前面我们讲解了主引导程序的加载过程,并且制作了虚拟软盘a.img,最终这个主引导程序也在机器中成功运行了,但是实际开发的时候,并不会如此简单,免不了调试过程,如果还像上一节中直接将软盘放到机器中去加载的话是没有办法进行调试的,因此,我们需要一款调试工具bochs,bochs是一款x86模拟器,支持断点调试,为我们开发操作系统带来了方便。
bochs的安装:
可以选择源码安装,也可以选择apt-get安装,源码安装时,我们需要下载源码包并放置到我们的工作目录下,解压缩并进入到源码目录下,然后进行配置操作,下面的配置是开启调试和反汇编功能,如下所示:
我们使用的版本是bochs-2.4.5,配置完成后,然后进行make,如下:
执行完make编译后就是安装过程,我们只需执行sudo make install即可,如果一切顺利的话,上面三步很快就会完成,安装也随之完成。
但是,现实往往是悲催的,安装过程会报各种错误,本文不在详细展示错误的情况,只给出一些有限的解决方法。
1、配置中如果出现错误,可能是缺少g++编译器,可用sudo apt-get install g++安装即可。
2、缺少x-window,例如:ERROR: X windows gui was selected, but X windows libraries were not found
可使用sudo apt-get install xorg-dev安装xorg-dev包。
3、缺少gtk库
Package gtk+-2.0 was not found in the pkg-config search path.Perhaps you should add the directory containing `gtk+-2.0.pc'to the PKG_CONFIG_PATH environment variableNo package 'gtk+-2.0' foundERROR: pkg-config was not found, or unable to access the gtk+-2.0 package.Install pkg-config and the gtk+ development package,or disable the gui debugger, or the wxWidgets display library (whichever is being used).
可以使用sudo apt-get install libgtk2.0-dev来安装相应的库即可。
4、bochs启动时崩溃,显示panic错误,可尝试使用sudo apt-get install bochs-x解决。
其他的错误信息可以自行搜索解决。
bochs安装完成后,还需要安装vgabios,执行sudo apt-get install vagbios即可。下面就进入bochs真正的配置。
bochs启动时可以显示的使用bochs -f bochsrc_file,如果不加启动文件的话会自动在当前目录下一依次寻找.bochsrc,bochsrc,bochsrc.txt,首先找到的即被当做启动文件。bochs的启动文件大致如下:
9,10,13,25是我们重点关注的行,13行的a.img即为当前目录下的虚拟软盘文件的名字,9行的romimage是bochs安装目录下的一个文件,10行的vgaromimage是vgabios安装目录下的文件,我们首先要确定bochs和vgabios的安装目录,使用如下命令:
which bochs
和
whereis vgabios
which是查看可执行文件的位置,whereis是查看文件或者目录的位置,whereis有很多选项,可以进行特定格式的文件查找。
执行结果如下:
第9行romimage和第25行map的填写请注意,which bochs只能确定bochs的安装路径,以上两项的填写需要在上述路径下相应的切换一下文件夹。
我们上一节已经有了a.img,现在配置文件也有了,我们直接启动bochs,启动界面如下:
输入6,开始仿真,进行到如下界面:
输入continue,回车,结果如下:
上图和我们在VmWare模拟的物理机器上执行的结果一致。
bochs还支持断点调试,例如,刚启动时,我们不输入continue,而是先设置一个断点,即break 0x7c00,然后再执行continue,如下所示:
执行continue后,程序停在了7c00断点处,如下所示:
bochs还有很多其他强大的功能,命令也和gdb很相似,我们在本文不再进行介绍,下面给出一些常用的调试命令:
至此,我们搭建好了最基本的os调试环境。