对于每一个尝试自己写计算机开机引导甚至是一个操作系统的人来说bochs是一个很好用的工具,强大的调试功能以及自带的制作虚拟盘的工具都是亮点。
和大多数人一样,初次接触这个工具难免会比较生疏,所以要把很常用的命令记录下来,以便查看。
本手册不定期更新。

1、如何运行自己的扇区引导

1)、自己写好的扇区引导用nasm编译成.bin为后缀的纯二进制文件。(nasm是一个很强大的编译工具,他可以直接把汇编源程序编译成任何格式的包括.exe和.elf格式的,这部分不是本文的重点,不在此详述)。
2)、用bochs自带的bximage创建一个虚拟软盘(或者虚拟硬盘)(fd是软盘,hd是硬盘)。
3)、将扇区引导的二进制文件刻入刚刚创建的软盘(假设软盘的名称叫做a.img,引导程序叫boot.bin)
dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

2、freedos的使用

直接把程序刻入创建的虚拟盘中这个方法很简单,但是每次只能写512字节的代码,这个明显不现实。所以我们采用另外一种方法吧我们的程序编译成com文件,然后让dos来执行他。
1)、下载一个freedos的img文件,放在自己的工作目录下,用bximage生成一个新的软盘映像。
2)、修改我们的bochs配置文件,floopya后边的映像改为freedos.img,floppyb后边的映像改为data.img(新创建的软盘映像)
3)、启动bochs,等freedos启动以后格式化一个新盘出来。这里要注意一下,dos格式化命令是format这是一个外部命令,一般情况下直接去官网下载的的freedos的镜像是不能直接运行外部命令的,去网上找一个format.com文件,把这个文件复制进freedos的镜像里边,注意这里是复制进去,不是直接dd进去(我就犯了这样的错误,把这个文件dd进去了,freedos起不来了,他会提示找不到boot文件,因为你dd的时候会清空镜像),复制的步骤就是,先挂载这个镜像,然后把文件复制到挂载点,最后卸载软盘。
4)、这时候引导代码不能直接加载到0x7c00地址处了,而是加载到0x0100处
5)、格式化创建的软盘映像(创建出来的时候对于系统来说并不是一个映像,这个时候挂载系统会认为你挂载的是一个普通文件,所以要先格式化这个映像)。
写入空数据 dd if=/dev/null of=data.img bs=512 count=1 conv=notrunc
将data.img 格式化 loop device sudo losetup /dev/loop0 data.img
格式化这个loop device sudo mkfs.msdos /dev/loop0
删除这个loop device sudo losetup -d /dev/loop0
6)、挂载软盘,写入扇区引导,软盘
sudo mount -o loop data.img /mnt/floppy
sudo cp boot.com /mnt/floppy
sudo umount /mnt/floppy
7)、在freedos中运行程序