Bochs是用C++开发的一个模拟器,模拟整个PC。它完全是靠软件模拟来实现的。从启动到重启,包括PC的外设键盘,鼠标,VGA卡,磁盘,网卡等,全部都是有软件来模拟的,因此它非常的适合开发操作系统。
Bochs安装:
双击安装文件,点下一步完成软件安装。
Bochs的配置
bochs的安装目录下为我们提供了一个配置文件的模版bochsrc-sample.txt。在配置文件中”#”为注释符号。只需复制该文件,修改相关变量即可。常用变量如下:
#megs: 内存,以MB为单位,你可以根据自己的机器来调整
megs: 16
# 下面两句一般是不可以改的,表示rom镜像和vga镜像。
romimage: file=../BIOS-bochs-latest, address=0xf0000
vgaromimage: file=../VGABIOS-lgpl-latest
#floppy:软盘镜像文件
floppya: 2_88=镜像路径(如C:\test.img), status=inserted
#floppyb: 1_44=镜像路径(如C:\test.img), status=inserted
# 下面是硬盘,很简单,还有就是BOCHS也是可以支持多个硬盘的。那么,硬盘文件是怎么生成的呢?我们可以发现硬盘是 img格式的。你注意没有在BOCHS文件夹里有一个工具叫 bximage.exe,他就是用来生成这个硬盘 文件的工具。
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="dos.img", cylinders=306, heads=4, spt=17
# 下面这个就是光驱,如果你想使用物理光驱,只要让path=E:(我们假设E盘是光驱)
ata0-slave: type=cdrom, path="dos.iso", status=inserted
# boot:这个是启动设备,可以使用cdrom(光驱)、c(硬盘)或floppy(软驱)。
#boot: cdrom (表示从光驱启动)
boot: c (表示从C盘启动)
#boot: floppy (表示从软盘启动)
# 这一句可以不要,他只是指定用来保存日志的文件。如果不指定的话他就会输出到命令控制台上。
log: bochsout.txt
# 这一句是设置在开机时是否激活鼠标,BOCHS对于鼠标的控制不是# 很好。建议如果不是特别需要的话不要激活他。在运行期间也可以点窗口右上角的鼠标图标来激活他。
mouse: enabled=0
启动BOCHS
配置好配置文件后,将文件后缀改为.bxrc。双击即可启动软件了。
调试功能
双击安装目录下的bochsdbg.exe,点击加载按钮,选择配置文件,即可进行调试。
常用调试命令如下:
help:显示帮助文档。
c:继续,前面我们已经用过了。
s:单步执行。他还有一个扩展用法。
s n :执行n步。
b 0x7c00:在内存0x7c00处设置一个断点.当程序执行到0x7c00处就自动进入到调试状态.后面的这个数指的是内存的线性地址。
x /20 0x7c00: 以16进制的形式从内存的0x7c00开始显示20个字的数据
dump_cpu:显示现在的寄存器的状态
u /20 0x7c00 :反汇编内存0x7c00处,反汇编的长度是20
以上是在网上很容易就能找到的使用指南,但是我在使用的过程中遇到了一些小问题,在此记下这些小问题,以备忘
1、romimage: file=../BIOS-bochs-latest, address=0xf0000 首先是这条,在运行bochs是跳出一个窗口提示mem0在什么#0ffff什么什么结束的,后来在网上查到说是因为在2.2.5以前的版本,Bochs的BIOS大小为64K,需要指定起始地址为0xf0000。之后的版本可支持512K的BIOS镜像。现在默认用的BIOS-bochs-latest的好像是128K(官方说法),我看了一下是132K。反正不需要指定起始地址了。而我装的是2.6版本,果断吧0xf0000删了,运行成功。
2、在调试的时候输入dump_cpu提示出错,好吧,继续上网找问题,原因如下:
bochs 2.3.5 以上的版本好像就没有dump_cpu了,你可以试试 下面的命令 组合他们
代码:
r
fp
mmx
sse
dreg
sreg
creg
附一个我电脑上运行成功的bochsrc.bxrc
############################################################### # bochsrc.bxrc file for Tinix. ############################################################### # how much memory the emulated machine will have megs: 32 # filename of ROM images romimage: file=$BXSHARE/BIOS-bochs-latest vgaromimage: file=$BXSHARE/VGABIOS-elpin-2.40 # what disk images will be used floppya: 1_44=Tinix.vfd, status=inserted # choose the boot disk. boot: a # where do we send log messages? log: bochsout.txt # disable the mouse, since Tinix is text only mouse: enabled=0 # enable key mapping, using US layout as default. keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-us.map