也是那句老话:“公欲善其事,必先利其器”,开发OS(Operating System, 操作系统)的第一步就是搭建自己的开发环境。
鉴于大部分人(包括我)日常工作用的操作系统都是WinXP,所以虽然Linux有很多优势,但是我们还是不选择它(我可不希望写这操作系统的时候老板来让我交个文档,我不得不重启计算机切换回Windows)。
工作的操作系统确定了,再决定我们这个任务需要些什么软件环境。首先,为了调试方便,也防止前期不成熟的系统损坏我们已有的计算机系统,一个虚拟机环境是必须的。同时,为了保证我们的操作系统在真实的计算机环境下能够运行,我们也需要一个真实的计算机硬件环境。那本节我们就来打造这两个平台。
(一)虚拟机环境(调试)
虚拟机软件有很多,其中个人感觉VMware是比较成功的-强大、真实、稳定。可是美中不足的就是它不支持调试,所以从我们的名单上排除。
从各方面考虑,bochs最终都成为了我们最好的选择,虽然它也存在一些各种各样的问题...那我们就说说怎么配置bochs。可能比较罗嗦,但是请不要轻易跳过,除非你十分确信自己知道自己需要什么。
(1) 下载,当前bochs的最新版本是2.3.7。你可以从 http://bochs.sourceforge.net/cgi-bin/topper.pl?name=See+All+Releases&url=http://sourceforge.net/project/showfiles.phpqmrkgroup_ideq12580 得到。需要下载3个文件:
1) bochs-2.3.7.win32msvc-src.zip - bochs源文件
2) bochs-p4-2.3.7-win32.zip - bochs Windows版本的二进制发行包安装文件
3) bochs-p4-smp-2.3.7-win32.zip - bochs Windows版本的二进制主文件(支持多处理器)
(2) 安装 bochs 基本程序(无多处理器支持)
先解压并 bochs-p4-2.3.7-win32.zip,安装过程中提示是否选择安装文档和一个演示用的Linux,建议都安装。
(3) 安装多处理器支持
解压 bochs-p4-smp-2.3.7-win32.zip 得到 bochs-p4-smp.exe,将其改命为 bochs.exe,复制到bochs 安装目录下并覆盖原有文件(注意,覆盖前请先备份原有文件;bochs的默认安装路径为C:/Program Files/Bochs-2.3.7)
再解压 bochs-2.3.7.win32msvc-src.zip 并打开SMP(Symmetrical Multi-Processing, 对称多处理,在这里主要指多处理器支持)选项重新编译 bochs SMP调试程序,得到 bochsdbg.exe 文件,用其覆盖 bochs 安装路径下的同名文件即可。我知道编译这个文件对很多人来说费时费力,所以我在文章最后提供了我的小师弟编译好的 bochsdbg.exe,您可以直接下载覆盖 bochs 安装路径下的同名文件即可。
(4) 生成/设置虚拟机
使用 bochs 自带的 Disk Image Creation Tool 生成一个 256M 的硬盘映像文件(img文件)。生成后软件会提供一个类似 “ata0-master: type=disk, path="myOS.img", mode=flat, cylinders=520, heads=16, spt=63” 的硬盘配置行。在这个行后填加 translation=lba,表示硬盘访问方式使用lba(Logical Block Addressing, 逻辑块寻址模式)。则上面的描述行变为 “ata0-master: type=disk, path="myOS.img", mode=flat, cylinders=520, heads=16, spt=63, translation=lba”。
下面按照 bochs 的手册编写虚拟机描述文件 bochsrc.bxrc。这个比较复杂,可以参考 bochs 提供的 demo linux。并把硬盘的描述行复制到指定位置。一台有了硬盘的虚拟机就此生成。
但是有了这个 img 境像的硬盘还不算成功。这个img文件只相当于一个空硬盘,没有分区、没有格式化,还不能向其中写入文件。我使用的是XP安装盘进行分区和格式化。方法是在 bochs 的配置文件中配置使用物理光驱启动,进入XP的安装程序后分区硬盘,并格式化成FAT32格式。在格式化后,XP没有正式安装前“关机”即可。
配置虚拟机这个过程比较复杂,为了方便大家,我在文章后也提供了我配置好的虚拟机,并且对镜像 myOS.img 文件进行了分区和格式化。可以直接使用
(5) 管理硬盘镜像
向 bochs 虚拟机的硬盘上写入文件需要使用的软件主要有两种,一种是二进制写入。将 img 文件以二进制形式打开,这主要是为了写入引导区和MBR。这方面的软件有很多,比如UE等。为了开发方便,强烈建议使用 WinHEX, 因为他不仅可以打开 img 文件,还可以以二进制方式打开计算机上的物理/逻辑硬盘,并可以套用模板帮我们进行分析,这个以后在硬盘结构的章节详细介绍。
另外一种软件就是可以直接把文件拷贝到 img 文件中的软件,推荐 WinISO 或 UltraISO, 用这个软件打开分区并格式化好的 img 文件,就像用 rar 打开解压文件一样,虚拟“硬盘”里的文件可以自由编辑。
(二)虚拟机环境(编译)
虽然我们主要在 WinXP 环境下开发,但是编译还是在 Linux 下比较方便。编译环境可以选择任何一个发行版本的 Linux,只要它自带 gcc 和 nasm 就可以。
这里建议使用 VMware,方便快速。VMware Workstation 可以从 EMC/VMare 的网站免费得到。
(三)真实计算机环境
首先提示,这个步骤有风险,请注意!
将计算机的一个分区格式化成 FAT32 格式。如果你的机器上只有 Windows, 可以选择使用 SFDISK 设置多系统引导,并将这个分区设置为可引导。具体过程,还是上google上百度下,文章很多,不多说了。但是,需要注意的是,如果你的系统中已经有了如 grub 之类的引导程序,请不要使用 SFDISK, 会有危险。可以在 grub 中直接配置这个分区的引导命令。具体配置方法我没有琢磨,不敢乱说。
----------------------------------------
相关软件下载地址:
(1) bochs Win32 安装包
http://acm.hrbeu.edu.cn/szh-myOS/bochs-p4-2.3.7-win32.zip
(2) bochs Win32 SMP支持
http://acm.hrbeu.edu.cn/szh-myOS/bochs-p4-smp-2.3.7-win32.zip
(3) bochs Win32 源文件
http://acm.hrbeu.edu.cn/szh-myOS/bochs-2.3.7.win32msvc-src.zip
(4) 编译后的 bochs Win32 SMP调试程序
http://acm.hrbeu.edu.cn/szh-myOS/bochsdbg.exe
(5) 配置好的 bochs 虚拟机及分区/格式化好的硬盘镜像
http://acm.hrbeu.edu.cn/szh-myOS/bochsdbg.exe
由于版权问题,SFDISK/WinHEX/WinISO 我无法提供,请见谅
-----------------------------------------
本节参考文献
Bochs User Manual - 见bochs安装文件