我知道,现在你已经开始摩拳擦掌准备大干一场了,因为你发现,开头并不是那么难的。你可能想到了Linus,或许他在写出第一个Boot Sector并调试成功时也是同样的激动不已;你可能在想,有一天,我也要写出一个Linux那样伟大的操作系统!是的,这一切都有可能,因为一切伟大必定是从平凡开始的。我知道此刻你踌躇满志,已经迫不及待要进入操作系统的殿堂。
可是先不要着急,古人云:“工欲善其事,必先利其器”,你可能已经发现,如果每次我们编译好的东西都要写到软盘上,再重启计算机,不但费时费力,对自己的爱机简直是一种蹂躏。你一定不会满足于这样的现状,还好,我们有如此多的工具,比如Virtual PC。
在介绍Virtual PC及其他工具之前,需要说明一点,这些工具并不是不可或缺的,介绍它们仅仅是为读者提供一些可供选择的方法,用以搭建自己的工作环境。但是,这并不代表这一章就不重要,因为得心应手的工具不但可以愉悦身心,并且可以起到让工作事半功倍的功效。
下面就从Virtual PC开始介绍。
2.1 虚拟计算机(Virtual PC)
即便没有听说过虚拟计算机,你至少应该听说过磁盘映像。在DOS时代,你可能就曾经用HD-COPY把一张软盘做成一个.IMG文件,或者把一个.IMG文件恢复成一张软盘。虚拟计算机相当于此概念的外延,它与映像文件的关系就相当于计算机与磁盘。简
单来讲,它相当于运行在计算机内的小计算机。
2.1.1 Virtual PC初体验
先看几个屏幕截图。
图2-1为Virtual PC中的Windows 2000启动界面。

图2-1 Virtual PC中的Windows 2000启动界面
启动完毕的界面如图2-2所示。

图2-2 Virtual PC中的Windows 2000启动完毕界面
读者一定要看清楚,眼前的画面不是一个显示器,而仅仅是一个窗口而已。Virtual PC的意思就是“一个好像PC一样的窗口”。是的,在这个窗口中,你可以像对待真的PC一样进行各种操作,甚至在网络的其他计算机上,你也可以像访问一个真实的PC一样访问它,根本不知道它其实只是一个Virtual PC。
真的很神奇,不是吗?更令人激动的是,这正是我们开发操作系统所需要的工具!有了它,我们不再需要频繁地重启计算机,即便程序有严重的问题,也丝毫伤害不到你的爱机。你可能迫不及待地要先试为快了,好的,我们现在就以Virtual PC 5.0为例,来简单介绍一下它的用法。
2.1.2 创建你的第一个Virtual PC
安装完成,第一次运行,你将会看到如图2-3所示的窗口。

图2-3 PC设置向导
使用这个向导可以创建你的第一个虚拟计算机,也就是Virtual Machine或者Guest PC。
(1)单击“Next”按钮,界面如图2-4所示。

图2-4 填写PC名称
(2)将“New PC name”命名为“Tinix”,然后单击“Next”按钮,出现如图2-5所示的界面。

图2-5 配置选项
(3)选择“Guide me”,单击“Next”按钮,出现如图2-6所示的界面。

图2-6 选择虚拟机安装的操作系统类型
(4)或许有一天,我们的操作系统也会出现在这个列表中,但现在,我们只能选择“Other”,单击“Next”按钮,出现如图2-7所示的界面。
(5)32MB内存对我们足够了,因此,选择“No”单选框,单击“Next”按钮,出现如图2-8所示的界面。

图2-7 配置内存大小

图2-8 启动盘选项
(6)默认需要建一个虚拟硬盘,虽然开始我们并不需要它,不过建一个也无妨。然后单击“Next”按钮,出现如图2-9所示的界面。

图2-9 启动盘位置
(7)选择一个存储位置,然后单击“Next”按钮,出现如图2-10所示的界面。

图2-10 总结信息
(8)单击“Finish”按钮,出现如图2-11所示界面。

图2-11 Virtual PC主界面
到此为止,你的第一个Virtual PC就已经建立完毕了,那么,现在是不是已经可以单击“Start Up”了呢?先不要着急,现在它还只是一台“裸机”,现在就用我们的Tinix启动盘来试试看。
2.1.3 虚拟软盘研究
Virtual PC是很灵活的,它允许你使用“真的”和“虚拟的”两种软盘。现在已经可以将先前做好的启动盘放在软驱中,用它启动。
将软盘放入软驱中,单击“Start Up”按钮,然后选择菜单“Floppy → Capture Host Drive A:”。如图2-12所示。

图2-12 从软盘启动
然后,虚拟机会从软盘启动。最后,会看到如图2-13所示的界面。

图2-13 Tinix引导扇区运行结果
虽然这是意料中的事,不过仍然很奇妙,不是吗?“像真的一样”,你会说。是的,像真的一样。有了它,你就好像有了许多台计算机,而且,你可以用同一个键盘和同一只鼠标来操作它们。
软盘的读写速度显然是太慢了,说不定,当你拿出一张勾起你若干回忆的尘封的软盘时,发现它再也不像当初那么好用了,咔咔若干声之后,一个错误提示出现在你的眼前,告诉你这个磁盘已经损坏。于是你知道,时间能改变的,除了爱情,还有软盘!
所以我们需要将这台PC彻底地虚拟化,丢弃让人伤心的软盘,使用映像。
有一种简单的方法,就是使用一种工具将我们已有的软盘做成.IMG文件,比如使用DOS时代的HD-COPY。可是,在以后每一次更新的时候,我们不能总是先操作软盘,然后再把它做成.IMG,所以,我们需要研究一下.IMG的格式,以便在以后可以方便地操作它。
我们先用HD-COPY把启动盘制作成一个映像,假设是A.IMG。然后用一个二进制查看器打开它,如图2-14所示。

图2-14 用二进制查看器观察软盘映像
打开之后,我们恍然大悟,原来映像文件的开始处就是软盘的0道0面1扇区。这下你心里有底了,使用简单的文件操作,我们就可以对软盘映像进行绝对扇区读写。
笔者自己编写了一个小工具,可以在本书的附带光盘中找到,名字叫做FloppyWriter,用它可以将Boot Sector写进实际软盘或者软盘映像。源代码也在光盘中,代码非常简单,而且为自己的需要专门定制,使用起来极为方便。
2.1.4 虚拟软盘实战
现在,我们用Virtual PC和这个工具制作一张虚拟启动盘,步骤如下。
(1)首先,在Virtual PC主界面中选择“File→Virtual Disk Wizard”,弹出如图2-15所示的对话框。

图2-15 虚拟磁盘向导
(2)单击“Next”按钮,出现如图2-16所示的界面。

图2-16 选择软盘或硬盘
(3)选择第一项“Create new floppy or hard disk image”,单击“Next”按钮,出现如图2-17所示的界面。

图2-17 选择磁盘类型
(4)选择第二项“Create floppy disk image”,单击“Next”按钮,出现如图2-18所示的界面。

图2-18 指定映像文件路径
(5)选择一个存储位置,单击“Next”按钮,出现如图2-19所示的界面。

图2-19 结束界面
(6)单击“Finish”按钮,出现如图2-20所示的界面。

图2-20 虚拟磁盘创建成功
(7)单击“Close”按钮,完成虚拟启动盘的制作。
下面我们用FloppyWriter写入Boot Sector。
(1)在主界面上单击“Write File to Image”按钮,如图2-21所示。

图2-21 用FloppyWriter往软盘映像中写入引导扇区(选择引导扇区)
(2)打开编译好的Boot Sector,然后,程序会打开一个窗口提示打开映像文件,如图2-22所示。
(3)单击“打开”按钮,程序会将Boot Sector写入软盘映像,如果没什么意外,你会看到操作成功的提示,如图2-23所示。

图2-22 用FloppyWriter往软盘映像中写入引导扇区(选择软盘映像)

图2-23 用FloppyWriter往软盘映像中写入引导扇区(成功提示)
现在,我们有了一张准备好的具有引导扇区的软盘映像,我们可以用它来启动了。
(1)首先启动Tinix,然后选择菜单“Floppy→Release A:”,将刚刚捕获的A盘释放掉。如图2-24所示。

图2-24 弹出挂载到Virtual PC上的软盘
(2)选择菜单“Floppy→Capture Image”,如图2-25所示。

图2-25 使用软盘映像
(3)在弹出的窗口中选择要捕获的映像文件,如图2-26所示。
(4)单击“打开”按钮,等待启动完成,界面如图2-27所示。
到目前为止,我们已经大体知道了虚拟机的用法。实际上,虚拟机软件不仅仅是Virtual PC一种,还有VMware、Bochs等。但是,相对于VMware来说,Virtual PC的通用性更强,它声称“支持所有基于x86的操作系统”,而且从使用习惯上来讲,笔者本人更倾向于Virtual PC。至于Bochs,下文中会有相应介绍。

图2-26 选择一个软盘映像

图2-27 用刚挂载的软盘映像作为启动盘来启动






