Bochs的安装

        就像大部分软件一样,在不同的操作系统里面安装Bochs的过程是不同的,在Windows中,最方便的方法就是从Bochs的官方网站获取安装程序来安 装(安装时不妨将“DLX Linux Demo”选中,这样你可以参考它的配置文件)。在Linux中,不同的发行版(distribution)处理方法可能不同。比如,如果你用的是 Debian GNU/Linux或其近亲(比如Ubuntu),可以使用这样的命令:

$ sudo apt-get install vgabios bochs bochs-x bximage

敲入这样一行命令,不一会儿就装好了。

        很多Linux发行版都有自己的包管理机制,比如上面这行命令就是使用了Debian的包管理命令,不过这样安装虽然省事,但有个缺点不得不说,就是默认 安装的Bochs很可能是没有调试功能的,这显然不能满足我们的需要,所以最好的方法还是从源代码安装,源代码同样位于Bochs的官方网站[1],假设 你下载的版本是2.3.5,那么安装过程差不多是这样的:

$ tar vxzf bochs-2.3.5.tar.gz
$ cd bochs-2.3.5
$ ./configure --enable-debugger --enable-disasm
$ make
$ sudo make install

        注意“./configure”之后的参数便是打开调试功能的开关。在安装过程中,如果遇到任何困难,不要惊慌,其官方网站上有详细的安装说明。

 Bochs的使用
        好了,Bochs已经安装完毕,是时候来揭晓第1章(详见10分钟代码一篇)的谜底了,下面我们就一步步来说明图1.1的画面是怎样来的。

        在第1章我们提到过,硬件方面需要的是一台计算机和一张空白软盘,现在计算机有了──就是刚刚安装好的Bochs,那么软盘呢?既然计算机都可以“虚拟 ”,软盘当然也可以。在刚刚装好的Bochs组件中,就有一个工具叫做bximage,它不但可以生成虚拟软盘,还能生成虚拟硬盘,我们也称它们为磁盘映 像。创建一个软盘映像的过程如下所示:
$ bximage
========================================================================
                                bximage
                  Disk Image Creation Tool for Bochs
        $Id: bximage.c,v 1.32 2006/06/16 07:29:33 vruppert 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.

I wrote 1474560 bytes to a.img.

The following line should appear in your bochsrc:
  floppya: image="a.img", status=inserted

        凡是有?记号的地方,都是bximage提示输入的地方,如果你想使用默认值,直接按回车键就可以。在这里我们只有一个地方没有使用默认值,就是被问到创 建硬盘还是软盘映像的时候,我们输入了“fd”。

        完成这一步骤之后,当前目录下就多了一个a.img,这便是我们的软盘映像了。所谓映像者,你可以理解为原始设备的逐字节复制,也就是说,软盘的 第$M$个字节对应映像文件的第M个字节。

        现在我们已经有了“计算机”,也有了“软盘”,是时候将引导扇区写进软盘了。我们使用dd命令[2]:

$ dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

        注意这里多用了一个参数“conv=notrunc”,如果不用它的话软盘映像文件a.img会被截断(truncated),因为boot.bin比 a.img要小。第1章中我们使用这个命令时不需要此参数,因为真实的软盘不可能被“截断”──真的和假的总是会有一点区别。

        现在一切准备就绪,该打开电源启动了。可电源在哪儿呢?不要慌,我们还剩一样重要的东西没有介绍,那就是Bochs的配置文件。为什么要有配置文件呢?因 为你需要告诉Bochs,你希望你的虚拟机是什么样子的。比如,内存多大啊、硬盘映像和软盘映像都是哪些文件啊等内容。不用怕,这配置文件也没什么难的, 下面的代码就是一个Linux下的典型例子。

1 ###############################################################
2 # Configuration file for Bochs
3 ###############################################################
4
5 # how much memory the emulated machine will have
6 megs: 32
7
8 # filename of ROM images
9 romimage: file=/usr/share/bochs/BIOS-bochs-latest
10 vgaromimage: file=/usr/share/vgabios/vgabios.bin
11
12 # what disk images will be used
13 floppya: 1_44=a.img, status=inserted
14
15 # choose the boot disk.
16 boot: floppy
17
18 # where do we send log messages?
19 log: bochsout.txt
20
21 # disable the mouse
22 mouse: enabled=0
23
24 # enable key mapping, using US layout as default.
25 keyboard_mapping: enabled=1, map=/usr/share/bochs/keymaps/x11-pc-us.map

        可以看到,这个配置文件本来就不长,除去注释之后内容就更少了,而且很容易理解,字面上稍微不容易理解的只有romimage和 vgaromimage[3],它们指定的文件对应的其实就是真实机器的BIOS和VGA BIOS,读者自己操作的时候要确保它们的路径是正确的,不然过一会儿虚拟机启动时可能会被提示“couldn''t open ROM image file”。读者还要注意floppya一项,它指定我们使用哪个文件作为软盘映像。

        如果你在Windows下的话,romimage和vgaromimage两项指定的文件应该是安装目录下的BIOS-bochs-latest和 VGABIOS-lgpl-latest。当然,最保险的方法是参考安装程序自带的DLX linux的配置文件,将其稍作修改即可。

 好了,现在一切准备就绪,是时候启动了,输入命令:
$ bochs -f bochsrc
一个回车[4],你想要的画面就呈现在眼前了。是不是很有趣呢?
顺便告诉你个窍门,如果你输入一个不带任何参数的Bochs并执行之,那么Bochs将在当前目录顺序寻找以下文件作为默认配置文件:
? .bochsrc
? bochsrc
? bochsrc.txt
? bochsrc.bxrc (仅对Windows有效)

        所以刚才我们的“-f bochsrc”参数其实是可以省略的。读者在给配置文件命名时不妨从这些文件里选一个,这样可以省去许多输入命令的时间。

        此外,Bochs的配置文件还有许多其他选项,读者如果想详细了解的话,可以到其主页上看一看。由于本书中所用到的选项有限,在此不一一介绍。

本文摘自《Orange''S:一个操作系统的实现》