我的操作系统是Ubuntu12.04
如果你使用的也是Ubuntu操作系统,可以使用下面的命令来安装Bochs:
从Bochs的官方网站http://bochs.sourceforge.net/下载最新的Bochs源代码包,我下载的是bochs-2.6.2.tar.gz。
安装过程差不多是这个样子的:
$tar vxzf bochs-2.4.5.tar.gz
$cd bochs-2.4.5
$./configure --enable-debugger --enable-disasm
$make
$sudo make install
解释一下上面几行命令:
1. 解压源代码包bochs-2.4.5.tar.gz,生成文件夹bochs-2.4.5;
2. 进入bochs-2.4.5目录;
3. 运行configure脚本,它会测试你的机器,C/C++编译器以及一些库,用来判断何种配置适合于你的机器。其中命令行参数--enable-debugger --enable-disasm便是打开调试功能的开关。成功执行完configure脚本后,会在每个源代码目录下生成一个Makefile文件;
4. make根据第三步生成的Makefile文件从源代码编译整个Bochs;
5. 当整个Bochs编译成功后,执行make install,会将Bochs的可执行文件、帮助文档以及其它一些必要文件拷贝到系统相应的目录下
Bochs已经安装完毕。现在,我们已经有了计算机(Bochs),还差一张引导软盘。既然计算机都可以虚拟,软盘当然也可以。在刚刚装好的Bochs组件中,有一个工具叫做bximage(见表1的第二项),它既能生成虚拟软盘,也能生成虚拟硬盘,我们也称它们为磁盘映像。创建一个软盘映像的过程如下所示:在命令行输入bximage
========================================================================
bximage
Disk Image Creation Tool for Bochs
$Id: bximage.c,v 1.34 2009/04/14 09:45:22 sshwarts Exp $
========================================================================
Do you want to create a floppy disk image or a hard disk image?
Please type hd or fd. [hd] fd
Choose the size of floppy disk image to create, in megabytes.
Please type 0.16, 0.18, 0.32, 0.36, 0.72, 1.2, 1.44, 1.68, 1.72, or 2.88.
[1.44]
I will create a floppy image with
cyl=80
heads=2
sectors per track=18
total sectors=2880
total bytes=1474560
What should I name the image?
[a.img]
Writing: [] Done.
The following line should appear in your bochsrc:
floppya: image="a.img", status=inserted
所谓磁盘映像文件(Disk Image File)是软盘或硬盘上信息的一个完整映像,并以文件的形式保存。磁盘映像文件中存储信息的格式与对应磁盘上保存信息的格式完全一样。空磁盘映像文件是容量与我们创建的磁盘相同但内容全为0的一个文件。这些空磁盘映像文件就像刚买来的新软盘或硬盘,还需要经过分区及格式化才能使用。
有了磁盘映像,我们写一个小小的引导扇区,可以参考《Orange's 一个操作系统的实现》,命名为boot.asm。
org 07C00h ; 告诉编译器程序加载到0000:7C00处
mov ax, cx
mov ds, ax
mov es, ax
call DispStr ; 调用显示字符串例程
jmp $ ; 无限循环
DispStr:
mov ax, BootMessage
mov bp, ax ; ES:BP = 字符串地址
mov cx, 16 ; CX = 字符串长度
mov ax, 01301H ; AH = 13H, AL = 01H
mov bx, 000CH ; 页号为0(BH = 0) 黑底红字(BL = 0CH,高亮)
mov dl, 0
int 10H ; 调用BIOS的10号中断
ret
BootMessage: db "Hello World!" ; 要显示的字符串
times 510-($-$$) db 0 ; 填充剩余空间,使生成的二进制代码恰好为512字节
dw 0XAA55 ; 结束标志
我们把这段代码用NASM编译一下:
$nasm boot.asm -o boot.bin
如果没有安装NASM,可以用如下命令进行安装:
$sudo apt-get install nasm
编译完成后,会在当前目录生成一个512字节的boot.bin文件,使用dd命令将它写进刚刚创建的软盘映像a.img的第一个扇区
$dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
Ok,马上就可以启动Bochs了。不过别急,在启动Bochs之前还需要为运行系统预先设置一些模拟环境的参数。这些参数可以在命令行上传递给Bochs执行程序,但通常都使用一个文本形式的配置文件(例如bochsrc)为专门的一个应用来设置运行参数。在目录/usr/local/share/doc/bochs下有一个bochsrc-sample.txt,我们可以参照它来写一个。这里既有好消息也有坏消息,坏消息是这个文件很长,好消息是大部分都是注释。
我们在当前目录下新建一个文件,命名为bochsrc(注意,没有后缀)。
###############################################################
# Configuration file for Bochs(Linux)
###############################################################
#=======================================================================
# filename of ROM images
#=======================================================================
romimage: file=$BXSHARE/BIOS-bochs-latest
#=======================================================================
# VGAROMIMAGE
# You now need to load a VGA ROM BIOS into C0000.
#=======================================================================
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
#=======================================================================
# what disk images will be used
#=======================================================================
floppya: 1_44=/home/chen/exp/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=0, map=
#=======================================================================
# how much memory the emulated machine will have
#=======================================================================
megs: 32
万事俱备,从终端进入当前目录(假设是/home/mayuan,bochsrc与a.img也在这个目录内),输入命令:
$bochs
回车
最终可以看到如下界面