用 Bochs 来代替 Virtual PC
Table of Contents
Virtual PC 是一个很棒的软件,但其价格也不便宜。对于计算机玩家来说,频繁地买软件有点开支太大了吧?为什么不试试开源的软件呢? Bochs 就是这样一个可以替代大部分 Virtual PC 功能的软件。
简介: Bochs 是用 C++ 开发的可移植的 IA-32 (x86) PC 模拟器,几乎可以运行在所有流行的平台上。它包括对 Intel x86 CPU 、通用 I/O 设备和可定制的 BIOS 的模拟。目前, Bochs 可以模拟 386, 486, Pentium Pro 或者 AMD64 CPU ,包括可选的 MMX, SSE, SSE2 和 3DNow 指令。Bochs 的模拟环境中可以运行大部分的操作系统,包括 Linux, Windows 95, DOS, Windows NT 4, FreeBSD, MINIX 等。 Bochs 由 Kevin Lawton 创建,此项目当前仍由他维护。
以上是我根据 bochs 的首页介绍翻译并整理的简介。Bochs 的运行很简单,只要你准备好这几个文件就可以开始使用 bochs 了:模拟环境的配置文件(通常命名为 bochsrc),ROM BIOS 文件(发行版本中自带),VGA BIOS(同 ROM BIOS),磁盘映像文件。你可以访问主系统的设备,比如软盘、COM 口、LPT 口等。你还可以模拟网卡、声卡等。
其实,使用 bochs ,你可以更清楚地了解 PC 的运行原理,由于 bochs 使用一个配置文件来模拟一个环境,这个配置文件中有很多的参数可以调整,用起来会很方便。下面,简单介绍一下如何在 Bochs 中运行 FreeDOS (一个基于 GPL 发行的与 MS-DOS 100% 兼容的系统,参见: http://freedos.org/ 。之所以还提 DOS,是因为还有许多在 DOS 开发的优秀程序,比如有朋友使用的解谱程序还是基于 DOS 的,目前还没有其它可代替的版本,而一台 P4 的机器用来运行 DOS 实在有点那个什么……)。
本文是在 MacOS 10.3 上测试的,其它平台,比如 Linux 类似(Linux/Unix 可能会更简单一点)。在使用 Bochs 之前,希望你能够了解一些基本内容,比如如何在 MacOS X 上使用终端,最好还有一些基本的 shell 常识,比如 bash 的变量如何定义之类的基础常识。
下载并安装 bochs
到 http://bochs.sf.net 去下载最新版的 bochs (当时的稳定版为 2.1.1)。国内的朋友可能无法访问 sourceforge.net 的子域名,可以直接到这个地址去下载:
根据你的系统平台,下载相应的版本。比如你使用的是 MacOS 10.2 或者 MacOS 10.3 并安装了 Fink 系统,应该下载 Bochs-2.1.1-macos10.2.dmg ,如果你的 10.2 或 10.3 没有安装 Fink ,应该下载 Bochs-2.1.1-macos10.2noFink.dmg 。我使用的是 bochs-2.1.1-macos10.2.dmg 。
下载后,挂载那个磁盘映像文件,将其中的文件拷贝出来,应该有这些内容:
BIOS-bochs-2-processors VGABIOS-elpin-2.40 bochsrc-sample.txt BIOS-bochs-4-processors VGABIOS-elpin-LICENSE.txt bxcommit BIOS-bochs-8-processors VGABIOS-lgpl-README.txt bximage BIOS-bochs-latest VGABIOS-lgpl-latest dlxlinux CHANGES.txt VGABIOS-lgpl-latest-debug keymaps COPYING.txt bochs.app README.txt bochs.scpt
那些 BIOS-bochs-* 是 BIOS 的模拟文件,同样 VGABIOS-* 是显卡的模拟文件。 bochs.scpt 是一个 AppleScript 示例程序,你可以根据它修改自己的启动脚本。 目录 keymaps 是键盘的字符映射,其中你可以找到许多常用键盘字符映射。 bochs.app 是 OS X 的可执行的束,在 Finder 中它显示为一个应用程序图标。另外的两个文件是可执行的 Mach-O 程序:bximage 用于创建新的磁盘映像, bxcomment 用于设置磁盘映像文件的复用标识(redolog),目前只能对 Flat 映像进行设置恢复(undoable redolog)标识。
用 dlxlinux 测试 bochs 系统
你到目录 dxlinux 下点击那个 bochs.scpt 脚本,你会发现打开了一个终端,提示你这些操作:
... ... ... ... You can also start bochs with the -q option to skip these menus. 1. Restore factory default configuration 2. Read options from... 3. Edit options 4. Save options to... 5. Begin simulation 6. Quit now Please choose one: [5]
这是读取配置文件 bochsrc.txt 之后 bochs 的提示。但你选择 5 开始模拟时, bochs 却退出了。这是因为 bochsrc.txt 的配置文件有问题。打开 bochsrc.txt 文件,你会发现有这样的一行:
# filename of ROM images romimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000 vgaromimage: $BXSHARE/VGABIOS-elpin-2.40
(对不起,好象是三行哦),其中有这样的字串 $BXSHARE ,这是一个 shell 变量,它指向 Bochs 所在的路径,而你并没有设置它,因此虽然配置文件没有错,但 bochs 找不到 ROM image 所在的文件 $BXSHARE/BIOS-bochs-latest,它就退出了。
你可以用 ScriptEditor 打开 dxlinux 下的 bochs.scpt 文件,在 on run 这一行之前加上一句:
do shell script "export BXSHARE=~/Bochs-2.1.1"
最简单的办法,直接修改 bochsrc.txt 文件,把其中的 $BXSHARE 换成 BIOS-* 所在的路径就中了。修改后,再运行那个脚本,你会看到同样的提示,按 5 开始模拟,然后就会出来 Bochs 的界面,然后就是 DLX Linux 的加载过程了,勿庸多言。
使用 FreeDOS
在 http://bochs.sourceforge.net/diskimages.html 或者 http://bochs.sourceforge.net/cgi-bin/topper.pl?name=Disk+Images&url=http://sourceforge.net/project/showfiles.phpqmrkgroup_ideq12580amppackage_ideq27799 你都可以找到 FreeDOS 的下载,下吧。我用的是 FreeDOS 100MB 的那个映像。
下完了,仔细读读解压后目录中的 README 文件吧。不过,那个 bochsrc.txt 文件同样需要做一些修改,最大的修改还是 $BXSHARE 。然后,与测试 DLX LInux 时一样操作就可以了。
个人的一些使用习惯
每个人的习惯不同吧。我喜欢在终端下打命令行启动 bochs ,后面是我的一些设置。
我建立了一个目录 ~/Opt/Bochs (我称之为 $BXHOME),将 bochs.app, bximage, bxcommit 等文件保存在 $BXHOME/R2.1.1 目录下,然后在 $BXHOME 下对每个系统建立一个工作目录,比如有 FreeDOS, GNUHurd, MINIX-2.0.4 等,在每个 Guest 系统的目录下,保存着这个系统的磁盘映像,配置文件等。在 $BXHOME 下有一个文件 bochs-env.sh 是这样写的:
#!/bin/sh export BXHOME=~/Opt/Bochs export BXAPP=${BXHOME}/R2.1.1/bochs.app/Contents/MacOS/bochs export BXBIOS=${BXHOME}/bios export BXKEYMAPS=${BXHOME}/keymaps export BXLOGS=${BXHOME}/logs alias bochs="$BXAPP" alias bochs-open="$BXAPP -f"
当然,在我的 .bashrc 中少不了这样的一行:
if [ -f ~/Opt/Bochs/bochs-env.sh ]; then . ~/Opt/Bochs/bochs-env.sh fi
然后,每次打开一个终端,我只要进入 $BXHOME 目录下的任一个 Guest 系统目录,执行
bochs -f bochsrc.txt
就可以开始模拟了。每次 bochs 更新时,我只需要把对应的
Rx.x.x 目录修改就可以了。当然,也可以写一个 Apple Script 的脚本,配上 Acqua 界面,那就更好了。等我把 Apple Script 学会之后再说吧。
关于配置文件的简介
其实,使用 bochs 关键的是那个配置文件。仔细阅读一下 Bochs 目录下的那个
bochsrc-sample.txt
文件,你会有很大收获。详情请参见 Bochs 的用户手册。
有时间,再慢慢讨论如何让 host OS 与 guest OS 之间联网、guest OS 如何使用硬件设备,比如 CDROM 等。 但首先一条,大家要试用起来,才能开始讨论啊。希望有人能有同好。 Bochs 开发人员希望大家提供安装好系统的磁盘映像。但要注意一点,不要把安装盗版 Windows 的映像文件提供给人家,那是有版权的东西,你不要让微软找到借口来打压他们。