为了调试系统,我们需要一个调试环境,这里我们选择
Bochs虚拟机,
它支持对操作系统的调试(包括MBR等);我采用的是2.6.9版在linux上运行
Bochs
bochs是一款专业
模拟x86架构的虚拟机
开源且高度可移植
由C++编写
支持操作系统开发过程中的断点调试
通过简单配置就能运行大多数主流操作系统
相对而然Bochs大多采用仿真方式,所以速度比较慢;virtual PC仿真量不多不少,速度剧中;vmware很少采用仿真,速度很快;
Bochs比其它两个虚拟机更适合像操作系统这样的
底层调试
bochs网站:
http://bochs.sourceforge.net/
下载好源码后解压
tar -zxf bochs-2.x.x.tar.gz -C 解压目录(不用-C参数会解压到当前目录)
进入解压后的目录
cd bochs-2.x.x
生成makefile文件
./configure --enable-debugger --enable-disasm(注意不要忘记参数,否则无法调试及反汇编,可以使用./configure --help查看,其它参数自行查找)
编译
make(好像花了一两分钟,如果提示找不到bochsdbg,就把bochs拷贝一份cp bochs bochsdbg;有些人可能没有gtk2.0包,请自行安装;可能还会有某些版本undefined reference to symbol pthread_create@GLIBC的问题,请自行百度)
安装
make install(如果你的权限不够sudo make install,或者切换到超级用户)
安装vgabios:
emerge --ask vgabios(
我的是gentoo系统;对于unbuntu而然是
apt-get install vgabios;RedHat是
yum install vgabios;其它的自行百度)
查询bochs安装路径:
which bochs
查询bgabios安装路径:
whereis vgabios
下面是刚解压后没有执行任何命令的文件
配置bochs
bochs
解压后的源码目录有一个名叫.bochsrc的隐藏的默认配置文件;
截止到此,你可以删除bochs的解压文件了
正确编写配置文件是正确运行软件的关键
显示指定配置文件:
bochs -f bochsrc_file
隐式指定配置文件:
bochs(默认会查找当前目录下的
.bochsrc、
bochsrc、
bochsrc.txt)
我的配置文件名为
/data/bochsrc(以后我会在/data/目录下使用隐式启动方式)
############################################################### # Configuration file for Bochs ############################################################### # how much memory the emulated machine will have megs: 32 # filename of ROM images
# 注意下面2个路径,他们通过上面的which、whereis查找而来 romimage: file=/usr/local/share/bochs/BIOS-bochs-latest vgaromimage: file=/usr/share/vgabios/vgabios.bin # what disk images will be used
# 注意下面的路径,他是你的img软盘镜像所在 floppya: 1_44=/data/DTOS.img, status=inserted # choose the boot disk. boot: floppy # where do we send log messages? # log: bochsout.txt # disable the mouse mouse: enabled=0 # enable key mapping, using US layout as default. # 注意有些电脑需要使用下面注释掉的内容,把下面第一行注释掉,第二行取消注释即可 keyboard:keymap=/usr/local/share/bochs/keymaps/x11-pc-us.map # keyboard_mapping:enabled=1,map=/usr/local/share/bochs/keymaps/x11-pc-us.map
启动bochs
使用命令行终端启动虚拟机
如果你进入了上述界面,恭喜你,安装并配置成功。
接下来
输入6或者回车进入调试模式(如果你安装正确的话应该有调试功能)
这时候bochs空空如也,啥也没有,
因为我们开启了调试所以没有让它继续,这时候输入continue或者c即可
(此时输入焦点已经切换到bochs虚拟机了,需要点击命令行窗口再输入)
这时候虚拟机启动完毕,输出了我们的字符串"
\n\nHello,DTOS!\n\n"(注意前后是有两个换行的,由于没有安装声卡,所以没有声音,你可以到vmware或者实体机上测试)
这时候需要通过虚拟机右上角的关机按钮进行关机,关机后终端才会回到正常可输入状态(当然你也可以暴力点,直接在终端ctrl C等等)
Bochs常用调试命令
Bochs的调试命令和GDB类似