在 Bochs2.4.5 下安装 Redhat Linux 9.0
Bochs 是一款虚拟机软件,功能类似于 vmware、Vitual PC 等。
如果想让虚拟机运行在生产环境下,Bochs 不是一个好的选择,甚至可以说是个很坏的选择。因为设计方法的原因,bochs 要比别的虚拟机慢的多(比牛都慢)!
但是,如果想要学习和研究操作系统的话,Bochs 则是一个很好的选择。因为 Bochs 很好地原生地模拟了操作系统的各种硬件,包括BIOS、显卡ROM、声卡、软盘、硬盘、光驱、鼠标、键盘、并口、串口等。Bochs 有 Linux 和 Windows 版本,可以说是“跨平台”的,我们可以自由选择。
Bochs 还具有操作系统的调试功能,能够让我们一步一步看着操作系统从加电自检(POST)到进入操作界面的整个过程,每一步下的寄存器的值都能看到。我们还可以手工控制操作系统的断点。
既然 bochs 能够运行和调试新的操作系统,那不妨先安装一个别人的成熟的OS试试。
在安装之前,首先制定个目标:
安装从 Redhat Linux9.0 三张虚拟光盘 iso 文件开始。
安装成功的 Linux 需要支持网络功能。
要使用 bochs,核心问题就在其配置文件 bochsrc.bxrc 里。基于以上目标,所以,bochs 虚拟机本身需要有虚拟硬盘、虚拟光驱、虚拟网卡。其它基本模块和IO设备按照 bochs 的常规配置。
1,虚拟硬盘:
虚拟硬盘用其“Disk Image Creation Tool”工具产生,回答一系列问题,完毕后,配置代码存放在Windows的剪贴板栗,我们粘贴到配置文件里即可。
ata0-master: type=disk, path="c.img", mode=growing, cylinders=20, heads=16, spt=63
可以看到,生成了一个文件名为 c.img 的硬盘文件,“mode=growing”表示硬盘是动态增长的。
2,虚拟光驱
新的 bochs 版本不再支持“cdromd:……”配置语句,配置虚拟光驱的语句如下:
ata0-master: type=disk, path="c.img", mode=growing, cylinders=262141, heads=16, spt=63
光驱作为 ata1 口的 master 主盘来挂载。硬盘大小 129023M。
3,虚拟网卡
bochs 的虚拟网卡是最古老最有序的网卡 NE2000。
bochs 的虚拟网卡需要 WinPacp 软件的支持。安装 WinPacp 后,运行 bochs 自带的“NIC Lister”程序,显示如下:
1: Adapter for generic dialup and VPN capture
Device: \Device\NPF_GenericDialupAdapter
2: VMware Virtual Ethernet Adapter
Device: \Device\NPF_{B1041E80-1C9E-4103-8B6C-E861219FB93D}
3: VMware Virtual Ethernet Adapter
Device: \Device\NPF_{360EDFC8-D82E-408E-9AAF-CFEC2A6A2F64}
4: Intel(R) PRO/100 VE Network Connection
Device: \Device\NPF_{E6FC333A-84A4-47C9-8CAB-60E2E76E233E}
Example config for bochsrc:
ne2k: ioaddr=0x300, irq=3, mac=b0:c4:20:00:00:00, ethmod=win32, ethdev=\Device\NPF_GenericDialupAdapter
第1个是普通拨号和VPN设备;
第2和第3个是母机(HOST)安装的 Vmware 虚拟机虚拟的2块网卡;
第4个是本机的物理网卡。
4,鼠标:按“Ctrl”+鼠标的第三键(滚轮)进行鼠标的捕获和释放。
一个配置文件实例:
#=======================================================================
# ROMIMAGE:
#=======================================================================
romimage: file=$BXSHARE\BIOS-bochs-latest
#=======================================================================
# MEGS
#=======================================================================
megs: 256
#megs: 128
#megs: 64
#megs: 32
#megs: 16
#megs: 8
#=======================================================================
# VGAROMIMAGE
#=======================================================================
vgaromimage: file=$BXSHARE\VGABIOS-lgpl-latest
#=======================================================================
# FLOPPYA:
#=======================================================================
#floppya: 1_44=/dev/fd0, status=inserted
#floppya: file=../1.44, status=inserted
#floppya: 1_44=/dev/fd0H1440, status=inserted
#floppya: 1_2=../1_2, status=inserted
#floppya: 1_44=a:, status=inserted # for win32
#=======================================================================
# DISKC: file=, cyl=, heads=, spt=
#=======================================================================
#ata0-master: type=disk, path="hdc-0.11.img", mode=flat, cylinders=121, heads=16, spt=63
ata0-master: type=disk, path="c.img", mode=growing, cylinders=262141, heads=16, spt=63
ata1-master: type=cdrom, path="D:\TDDownload\rh9-shrike\shrike-i386-disc1.iso", status=inserted
#=======================================================================
# NEWHARDDRIVESUPPORT: enabled=[0|1]
#=======================================================================
#newharddrivesupport: enabled=1
#=======================================================================
# BOOT:
#=======================================================================
#boot: a
boot: cdrom, disk
#=======================================================================
# LOG:
#=======================================================================
#log: /dev/null
log: bochsout.txt
#=======================================================================
# com1:
#=======================================================================
#com1: dev=/dev/ttyp9
#=======================================================================
# SB16:
#=======================================================================
#sb16: midimode=1, midi=/dev/midi00, wavemode=1, wave=/dev/dsp, loglevel=2, log=sb16.log, #dmatimer=600000
#=======================================================================
# KEYBOARD_SERIAL_DELAY:
#=======================================================================
keyboard_serial_delay: 200
#=======================================================================
# KEYBOARD_PASTE_DELAY:
#=======================================================================
keyboard_paste_delay: 100000
#=======================================================================
# mouse: Not used in any of the GUI specific modules, but the option
#=======================================================================
mouse: enabled=1
#=======================================================================
# private_colormap: Request that the GUI create and use it's own
#=======================================================================
private_colormap: enabled=0
#=======================================================================
# fullscreen: ONLY IMPLEMENTED ON AMIGA
#=======================================================================
fullscreen: enabled=0
screenmode: name="sample"
#=======================================================================
# ne2k: NE2000 compatible ethernet adapter
#=======================================================================
# ne2k: ioaddr=0x280, irq=9, mac=b0:c4:20:00:00:00, ethmod=fbsd, ethdev=xl0
# ne2k: ioaddr=0x280, irq=9, mac=b0:c4:20:00:00:00, ethmod=linux, ethdev=eth0
# ne2k: ioaddr=0x280, irq=9, mac=b0:c4:20:00:00:01, ethmod=win32, ethdev=MYCARD
# ne2k: ioaddr=0x280, irq=9, mac=fe:fd:00:00:00:01, ethmod=tap, ethdev=tap0
ne2k: ioaddr=0x300, irq=3, mac=b0:c4:20:00:00:00, ethmod=win32, ethdev=\Device\NPF_GenericDialupAdapter