在 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

Tags: , , ,

回复