问题
编写主引导区的代码时,如果发现 bug, 如何调试代码?
Bochs(一款优秀的虚拟机软件)
- 专业模拟 X86 架构的虚拟机
- 开源且高度可移植,有 C++ 编写完成
- 支持操作系统开发过程中的断点调试
- 通过简单配置就能够运行绝大数主流操作系统
环境搭建
- 解压压缩包
tar -xzvf bochs-2.xx.tar.gz
- 进入目录
cd bochs-2.4.5
- 执行配置文件
./configure --enable-debugger --enable-disasm
- 进行编译(当前目录下)
make
- 安装
sudo make install
在虚拟机上进行如上过程遇到的问题以及解决办法
- 缺少 libgtk2.0-dev
sudo apt-get install libgtk2.0-dev
安装的时候报如下错误
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
https://blog.csdn.net/u011596455/article/details/60322568
- 编译 make 结果出现
gui/libgui.a(gtk_enh_dbg_osdep.o): In function `MakeGTKthreads()': /home/bcos/Desktop/bochs-test/bochs-2.4.pre1/gui/gtk_enh_dbg_osdep.cc:2120: undefined reference to `pthread_create' collect2: ld returned 1 exit status make: *** [bochs] Error 1
修改 Makefile.in 文件内容添加如下代码
注意的是修改 Makefile.in 这个文件的需要重新执行 ./configure --enable-debugger --enable-disasm ,然后在从新 make 一下,编译通过了。
Bochs 的安装与配置
- 确定 bochs 的安装路径(which bochs)
- 安装 vgabios ( apt-get install vgabios)
- 确定 vgabios 的安装路径(whereis vgabios)
book@www.100ask.org:~$ which bochs
/usr/local/bin/bochs
book@www.100ask.org:~$ whereis vgabios
vgabios: /usr/share/vgabios
Bochs 的启动文件
###############################################################
# Configuration file for Bochs
###############################################################
# how much memory the emulated machine will have
megs: 32
# filename of ROM images
romimage: file=/usr/local/bin/bochs/BIOS-bochs-latest // 具体填写
vgaromimage: file=/usr/share/vgabios/vgabios.bin // 具体填写
# what disk images will be used
floppya: 1_44=a.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_mapping: enabled=1, map=/usr/local/share/bochs/keymaps/x11-pc-us.map
// 具体填写
启动 bochs 虚拟机
显示启动
bochs -f bochsrc-file
隐式方式
bochs
当前目录下的启动文件名
- .bochsrc
- bochsrc
- bochsrc.txt
最终效果展示
Bochs 中的常用调试命令
小结
- Bochs 是一款专业模拟 X86 架构的虚拟机
- Bochs 的启动配置文件时正确运行的关机
- Bochs 支持断点调试,其命令调试与 GDB 类似