我们一直用qemu来装载.bin文件,模拟计算机启动的过程,qemu很好,后面我们会讲到如何用gdb调试qemu,只能用强大来形容。
喜欢折腾的人,永远都不会闲下来,就像用vmware将二进制文件作为启动盘,用qemu模拟树莓派的启动一样,对于学习来说是有意义的。
今天介绍另一个很好用的虚拟机:bochs。
bochs完全用软件模拟了整个X86计算机的硬件逻辑,然后在其虚拟的硬件上插入虚拟的软盘,砰,系统就启动了。这世界本身就是信息,无论是真实的,还是虚拟的,只要对外输出一样的数据,我们是无法感知它们的区别,就像阿里云,我们以为在使用一台独立的主机,但实际上是一个服务器中小小的vamwar虚拟机。
扯远了,bochs比vmware虚拟得彻底的多,vmware总是希望让能在cpu上跑的指令就在cpu上跑,bochs完全不依赖硬件,cpu在其上不过是一个不断轮询、等待信息的函数。bochs与真实机器几乎没有区别,整个模拟过程接近于现实,当然qemu也是同样的原理。
用bochs的原因依然是集思广益,由于bochs专业性,debug的选项与gdb调试qemu是有些区别的,到底哪个好现在没有客观的评价,所以最好都会用,遇到问题多一个分析角度。
下面是介绍bochs在ubuntu18上的安装步骤,fedora28也测试过,需要下载库的名字与ubuntu上稍有区别:
1.下载bochs:
https://sourceforge.net/projects/bochs/files/bochs/2.6.9/bochs-2.6.9.tar.gz/download
2.解压
tar vxzf bochs-2.6.9.tar.gz
3.运行configure脚本
简书上有个大神的帖子里有 建议[1] :
注意:其中--prefix
是安装地址
cd bochs-2.6.9
./configure --prefix=/home/happy/Documents/bochs --enable-debugger --enable-disasm --enable-iodebug --enable-x86-debugger --with-x --with-x11
也可以简单的:
```bash
cd bochs-2.6.9
./configure --enable-debugger --enable-disasm
4.make
make
sudo make install
最后,建立软链接:
cd /bin
ln -s ~/bochs.2.6.9/bochs /bin/bochs
ln -s ~/bochs.2.6.9/bximage /bin/bximage
错误排查:
1.出现 找不到X11/Xlib.h 错误:x11/xlib.h no such file or directory
ubuntu:
sudo apt-get install libx11-dev
fedora:
sudo dnf install libX*
如果未解决,执行下面指令再试:
make dist-clean
./configure --enbale-debugger --enable-disasm
make
make install
使用bochs的方法:
1.创建硬盘镜像 1->hd -> enter->enter...
bximage
2.nasm编译bin文件
nasm boot.asm -o boot.bin
3.dd写入镜像文件
dd if=boot.bin of=c.img bs=512 count=1 conv=notrunc
4.修改bochsrc.txt[2](链接指向官方img范例,是个压缩包,其中的配置文件既是本bochsrc.txt的原版文件,本人略作了修改)。
bochsrc.txt其实只是bochs启动时默认查找的配置文件,官方有详细的文档 ,这里要谢谢@cn-stem的细心提醒,推荐大家都加入cn-stem
标签,能够让文章更加规范哦。
如果按照上面的步骤,使用下面的bochsrc.txt即可:
###############################################################
# bochsrc.txt file for DLX Linux disk image.
###############################################################
# how much memory the emulated machine will have
megs: 32
# filename of ROM images
romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
# what disk images will be used
floppya: 1_44=floppya.img, status=inserted
floppyb: 1_44=floppyb.img, status=inserted
# hard disk
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
#ata0-master: type=disk, path="c.img", cylinders=306, heads=4, spt=17
ata0-master: type=disk, path="c.img", mode=flat
# choose the boot disk.
boot: c
# default config interface is textconfig.
#config_interface: textconfig
#config_interface: wx
#display_library: x
# other choices: win32 sdl wx carbon amigaos beos macintosh nogui rfb term svga
# where do we send log messages?
log: bochsout.txt
# disable the mouse, since DLX is text only
mouse: enabled=0
# set up IPS value and clock sync
cpu: ips=15000000
clock: sync=both
# enable key mapping, using US layout as default.
#
# NOTE: In Bochs 1.4, keyboard mapping is only 100% implemented on X windows.
# However, the key mapping tables are used in the paste function, so
# in the DLX Linux example I'm enabling keyboard_mapping so that paste
# will work. Cut&Paste is currently implemented on win32 and X windows only.
keyboard: keymap=$BXSHARE/keymaps/x11-pc-us.map
#keyboard: keymap=$BXSHARE/keymaps/x11-pc-fr.map
#keyboard: keymap=$BXSHARE/keymaps/x11-pc-de.map
#keyboard: keymap=$BXSHARE/keymaps/x11-pc-es.map
5.启动bochs,如果c.img文件没有问题,弹出的bochs窗口中选择6
,然后bochs停在黑屏状态,在shell中输入c
即可运行系统
欢迎向cn-stem投稿 :)
存在如下问题,请给予修复:
谢谢,已修改如下:
1.图片是截屏,已删除。
2.已获得https://www.jianshu.com/p/f4cd1fbfb109的源码授权。
3.引用已注明
谢谢修改:
关于 https://www.jianshu.com/p/f4cd1fbfb109 的源码授权,是指引用2中的链接吗?该链接打不开(可能需要登录?)
最后一部分的boshsrc.txt文件,似乎也存在多种来源?(例如:(1)、(2))是否可以确认该文件的内容是否开源、采用何种开源协议,并可以用于商用?
链接是有些问题,那个博客是我自己的,现在改好了,https://www.jianshu.com/p/b1f4c1419f88
bochsrc.txt只是一个配置文件,它本身也是bochs官网的范例中的配置,配置文件本来就都长一样,没有什么版权概念。它是个菜单,做一个菜每个人都会买这些原料,可是这个菜单本身就没有版权,我修改之后的也是没有版权的。
由于上面的博客是作者所有,有必要进一步说明此文件/代码的原始来源。换句话说,如果bochsrc.txt是作者本身创作的,需要给予说明(如作者的GitHub repo);如果借鉴了其他来源,也需要说明出处。如果主要参考了官方或他人的研究,可以将“bochs官网的范例中的配置”的原始文件/代码,以及相关说明也添加到文中(或本文的引用中),以便读者参考学习。
steemstem重视版权和引用的原因在于尊重每一个创作者的贡献。如果对于参考或者引用有明确的说明和解释,有利于读者追根溯源、促进讨论和引发深度思考,对于文章本身的价值也有所裨益。
谢谢,已经修改了。
但是我并不赞同配置文件的追根溯源:
bochs是个开源软件,我使用它就像使用linux一样,我不可能在每次提到linux的时候,就把linux kernel的网站地址贴出来。
配置sshd_config时,谁也不会知道config最初是谁写的。
文中的bochs是我修改过的,可我现在给出的链接是原来未修改过的,我不知道这样是否更好
关于版权的原则很简单:(1)如果该文本/代码为作者所创作,请说明为本人著作或采用开源方式提供;(2)如果是使用了他人的成果,或基于他人的成果修改,应明确注明原著作的相关信息。否则一旦发现其他相似内容,都存在版权疑问。
这背后的版权与尊重的精神,比法律上的意义更重要。
对于所有代码,如前所述,请明确提供“作者”、“开源协议”、“出处”等信息。也可以添加bochsrc的官方文档以方便读者学习(如
http://bochs.sourceforge.net/doc/docbook/user/bochsrc.html ),如果是作者修改过的文件也请说明为“修改”而非“原创”。上面的链接指向一个压缩包,不方便读者查看,请尽量提供作者写作时参考的配置文件、或其他更容易理解的说明。
任何一本严谨的关于Linux的出版物都会澄清其使用的版本、网址、演进过程、贡献者等信息。如果出版物中配置文件不是作者自己写的,在出版物的附录中也应该说明。开源软件的精神绝不是没有版权;其目的在于促进全人类知识的进步,而尊重是进步的前提。
This post has been voted on by the SteemSTEM curation team and voting trail. It is elligible for support from @curie.
If you appreciate the work we are doing, then consider supporting our witness stem.witness. Additional witness support to the curie witness would be appreciated as well.
For additional information please join us on the SteemSTEM discord and to get to know the rest of the community!
Please consider setting @steemstem as a beneficiary to your post to get a stronger support.
Please consider using the steemstem.io app to get a stronger support.