用VMWARE搭建开发操作系统的环境

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

很多人觉得开发底层系统用BOCHS会更好一些,能够跟踪每个指令的执行,不过我觉得开发过程中,需要利用EMULATER一步步跟踪指令的时间并不长,在设置了IDT表,启动了MONITOR功能之后就不需要了,而VMWARE提供的直接硬盘访问,串口互联等功能可能是BOCH都不具备的功能。(当然,最主要的原因是我还不太会用BOCHS)

环境需求:

(1) 内存:在256M以上

我的机器是512M, 推荐这个数值或更大,因为在运行时需要同时启动两个虚拟系统, 以128M/64M来分配的话,就要占用192M的物理内存,再加上VMWARE本身占用的内存,在256M的机器上,我是调整成96M/32M才能同时启动(不是最大),虽然可行,但内存少也会导致虚拟系统运行效率降低。

(2) 操作系统:XP或NT2000

需要能够运行VMWARE软件,所以WIN95/98都不行。

使用LINUX作为宿主操作系统也行,但我没试过。

(3) 虚拟软件:VMWARE 4.0/4.5

再低的版本没试,所以不知道是否可行,当然版本越高越好。

(4) 其它软件:Linux安装盘(映象文件)

对LINUX的版本没什么要求,但要注意,我们要用到里面的开发/编译工具,版本越新,提供的工具版本也越新。另外该LINUX最好提供GRUB的安装.

(5) 有足够的硬盘空间,最好是有两块硬盘,而且有一个硬盘的某些分区是没使用的。

除了在虚拟机上跑,应该还希望在实机上跑跑看吧。

如果只用一个硬盘也可以,但要求你会使用GRUB引导WINDOWS.

搭建步骤:

(0) 安装VMWARE

(1) 在VMWARE上建立两个VM。一个用于编译/跟踪(develop_vm),一个用于运行(run_vm)

(2) develop_vm的创建

Guest OS选择LINUX

内存可以设大一些,因为在这上面要跑Linux,还要完成软件的编译和跟踪。

硬盘可以采用Virtual Disk,容量可以设大一些。

* 进入Advance设置

* 设备连接点连到IDE 0:0

需要安装网卡,采用Host-only模式即可。

(3) 在develop_vm上安装LINUX,安装模式随自已,但必需包含开发工具,

即gcc, binutils,make等软件是必需安装的。minicom也应该有。安装后要注意安装VMWare Tools

(4) run_vm的创建

Guest OS选择LINUX

内存可以小一些,视内存情况而定,要确保deveop_vm和run_vm能同时运行。

硬盘采用直接物理硬盘方式,可以激活所有分区。

* 进入Advance设置

* 设备连接点连到IDE 0:0

* 在MODE中,选中Independent. 并选择Persistent。

(5) 在run_vm上安装LINUX, 选择最小模式安装.

实际上run_vm并不需要安装任何操作系统,但我们利用LINUX安装可以实现两个目标

* 将一个分区格式化成EXT2(EXT3)格式系统。

* 在引导扇区和文件系统上安装GRUB

安装LINUX时建议如下:

* 使用GRUB作BOOT LOADER, 安装到MBR上

* 不需要安装多个分区目录,只要建立"/"分区即可。甚至SWAP也可以没有.

(6) 分别在develop_vm和run_vm上分别添加串口(Serial)

属性选择"使用命名管道"(Use named pipe)

两个VM中的管道名需要一致。

在develop_vm中选择“This end is the server",在run_vm中选择"This end is the client"

都选择"The other end is a virtual machine.

(7) 在run_vm中启动Linux,修改Boot loader的引导配置文件. 我使用的是GRUB. 下面只以GRUB为例

% cd /boot/grub

% vi grub.conf

文件改成如下内容:

#grub.conf

default=0

timeout=1

title Self Develop OS

root (hd0,0)

kernel /boot/xxxx-0.1 ro root=/dev/hda1

#eof

关于kernel那一行,root=??? 需要根据你在run_vm的安装的分区情况页定。

(8) 在develop_vm上,执行添加硬盘设备操作。

* 选择直接物理硬盘方式(该硬盘即run_vm使用的硬盘)

* 启用Advance设置

* 将该硬盘挂到IDE0:1

* 在MODE中,选中Independent. 并选择Persistent.

(9) 在develop_vm上启动LINUX, 创建目录/mnt/devos

目录名其实是随意的,我只是举例。

(10) 如果你习惯使用SourceInsight或VC等的编辑工具(不习惯vi),可以将源码建在WINDOWS中的某个目录下,然后使用VMWARE的Shared Folders功能将其MOUNT到develop_vm中。(注意只有在develop_vm上安装了VMWare Tools之后才能有这个功能),

这样就可以在WINDOWS下写代码,在develop_vm虚拟机下编译,在run_vm虚拟机上测试运行了。

开发事项和疑问解答:

(1) 使用gcc/gas作为开发的编译工具

linux是开发操作系统最好的借鉴代码,所以gcc/gas应该是最合适的工具。

(2) 遵守MultipleBoot规范。可以参考GRUB的文档,非常简单!

(3) 使用root帐号进行编译,在MAKEFILE中,添写将执行程序COPY到run_vm中的过程

#......

xxxxos-0.1: ?????

......

mount /dev/hdb? /mnt/devos <- 注意这里的hdb?和run_vm的hda?是对应的!

cp -f xxxxos-0.1 /mnt/devos/boot/xxxxos-0.1

umount /mnt/devos

执行mount时,会有警告提示,完全可以忽略不管。

(4) 如果你想用实机测试,那么只需要用run_vm使用的硬盘引导就OK了。

(5) 如果宿主机使用LINUX, 是不是就不需要设置两个虚拟机了

develop_vm除了用来编译之外,另一个功能是通过minicom(或其它串口应用)让develp_vm与run_vm通信互联。宿主机使用LINUX,可以完成编译的功能,但无法完成与run_vm通信的功能。

(6) develop_vm和run_vm之间用串口互联的目的是什么。

在开发初期,这个串口可以用来作为标准输入输出,实现基本的交互(要比实现KEYBOARD/VGA简单)。 但我更倾向于利用这个串口作MONITOR. 这样就可以对代码进行跟踪了(这样才能替代BOCHS的优势)。

使用串口不是必需的,但如果有,而且实现了Monitor功能,你就能体会到它的好处。

(7) 为什么不将编译的代码放到develop_vm上,在run_vm用网络引导的模式。

如果只是开发操作系统那样用。但这种模式不只可用开发编写操作系统,也可以用开发BOOT LOADER,适用性更强些。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航