《ORANGE’S:一个操作系统的实现》一书中选择使用虚拟计算机Bochs进行仿真。

Bochs是一个x86硬件平台的开源模拟器。它可以模拟各种硬件的配置。Bochs模拟的是整个PC平台,包括I/O设备、内存和BIOS。甚至可以不使用PC硬件来运行Bochs。事实上,它可以在任何编译运行Bochs的平台上模拟x86硬件。通过改变配置,可以指定使用的CPU(386、486或者586),以及内存大小等。根据需要,Bochs还可以模拟多台PC,此外,它甚至还有自己的电源按钮。

以下对bochs的安装及常见错误的解决作总结:

安装步骤

采用源码安装的方式:

1. 源码下载:

https://sourceforge.net/projects/bochs/files/bochs/

直接下载当前最新的源码,准备在linux上安装,所以下载的 bochs-2.6.9.tar.gz

2. 安装前准备

sudo apt-get install build-essential xorg-dev libgtk2.0-dev bison

省掉config过程很多依赖编译报错

我在这个过程中出现了报错:unable to locate package build-essential xorg-dev libgtk2.0-dev bison


3.编译安装

sudo tar xvzf bochs-2.6.9.tar.gz
cd bochs-2.6.9
./configure  --enable-debugger --enable-disasm --enable-readline -LIBS='-lx11'
make
sudo make install
make install //会把bochs可执行文件拷贝到/usr/local/bin/目录下

逐条执行上述指令 

第三条./configure指令可能会有错:configure: error: unrecognized option: `-LIBS=-lx11'

在ubuntu上 apt-get install libx11-dev,注意是小写. 然后在gcc中,-lX11, 注意是大写.

这里可以思考一下LIBS指令的含义:

在make过程中我出现的报错:x11/xlib.h nosuch file or directory

可能是x11的的包没有安装完整,改错的话可以参考:


make过程可能也会因为缺少其他包而报错,搜索缺少的包并安装即可。

剩下两条指令应该可以顺利执行

4. 接下来让环境变量重新生效,在终端输入:

source /etc/profile

在这一步中,起初我通过重启的方法时环境变量生效,但关机后却无法再开机,Ubuntu始终停留在开机界面或者在黑屏闪动,重装了三次系统,改为采用上述指令。

5. 修改bochsrc文件:

在bochs-2.6.9目录下,有一个配置文件 .bochsrc,我们需要修改,让他运行我们的a.img

当你输入一个不带任何参数的bochs并执行之,bochs将在当前目录顺序寻找以下文件作为默认配置文件:

bios安装nvme_bios安装nvme

 因此我们修改的文件为.bochsrc,注意前面有“.”的配置文件是隐藏文件,需要先把show hidden files打开:

bios安装nvme_os_02

.bochsrc 修改如下:

#cpu: model=core2_penryn_t9600, count=1, ips=50000000, reset_on_triple_fault=1, ignore_bad_msrs=1, msrs="msrs.def"
cpu: model=amd_k6_2_chomper, count=1, ips=50000000, reset_on_triple_fault=1, ignore_bad_msrs=1, msrs="msrs.def"
cpu: cpuid_limit_winnt=0
 
memory: guest=512, host=256
 
romimage: file=$BXSHARE/BIOS-bochs-latest, options=fastboot
 
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
 
mouse: enabled=0
 
pci: enabled=1, chipset=i440fx
 
private_colormap: enabled=0
 
#floppya: 1_44=/dev/fd0, status=inserted
#floppya: image=../1.44, status=inserted
#floppya: 1_44=/dev/fd0H1440, status=inserted
#floppya: 1_2=../1_2, status=inserted
#floppya: 1_44=a:, status=inserted
floppya: 1_44=a.img, status=inserted, write_protected=1
#floppya: 1_44=/dev/rfd0a, status=inserted
 
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15
ata2: enabled=0, ioaddr1=0x1e8, ioaddr2=0x3e0, irq=11
ata3: enabled=0, ioaddr1=0x168, ioaddr2=0x360, irq=9
 
#ata0-master: type=disk, mode=flat, path="30M.sample"
#ata0-master: type=disk, mode=flat, path="30M.sample", cylinders=615, heads=6, spt=17
#ata0-master: type=disk, mode=flat, path="c.img", cylinders=0 # autodetect
#ata0-slave: type=disk, mode=vvfat, path=/bochs/images/vvfat, journal=vvfat.redolog
#ata0-slave: type=cdrom, path=D:, status=inserted
#ata0-slave: type=cdrom, path=/dev/cdrom, status=inserted
#ata0-slave: type=cdrom, path="drive", status=inserted
#ata0-slave: type=cdrom, path=/dev/rcd0d, status=inserted 
 
boot: floppy
#boot: disk
 
floppy_bootsig_check: disabled=0
 
log: bochsout.txt
 
panic: action=ask
error: action=report
info: action=report
debug: action=ignore, pci=report # report BX_DEBUG from module 'pci'
 
debugger_log: -
 
parport1: enabled=1, file="parport.out"
 
#sound: driver=default, waveout=/dev/dsp. wavein=, midiout=
#speaker: enabled=1, mode=sound

有注释的地方基本都是改动过的,解决了下一步启动运行过程中,几个问题。

6. 启动运行bochs虚拟机:

bochs -f .bochsrc

注意:如果上面第5步修改的是bochsrc文件而非.bochsrc文件,那上面的启动指令就不加“.”

也可以直接输入bochs回车运行。

确保目录文件下有a.img文件,运行结果:

bios安装nvme_ubuntu_03

 

bios安装nvme_虚拟机_04

常见错误及解决 

如果有问题,大部分都是bochsrc配置的问题,可以查看报错点,尝试注释掉,确保最基本的几个配置基本就可以正常运行了

例如:

memory: guest=512, host=256
romimage: file=$BXSHARE/BIOS-bochs-latest, options=fastboot
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
floppya: 1_44=a.img, status=inserted, write_protected=1
boot: floppy

启动过程可能遇到的问题:

问题1:.bochsrc:187: cpu directive malformed

bios安装nvme_操作系统_05

解决方法:

linux终端下:bochs -help cpu

bios安装nvme_虚拟机_06

我选的是amd_k6_2_chomper

不用纠结你的电脑是何种类型的cpu,这里设置的是bochs模拟的硬件,而非适配你的电脑的硬件类型。我的电脑是intel core_duo,使用amd类型一样没有错误。

修改配置文件即可

#cpu: model=core2_penryn_t9600, count=1, ips=50000000, reset_on_triple_fault=1, ignore_bad_msrs=1, msrs="msrs.def"
cpu: model=amd_k6_2_chomper, count=1, ips=50000000, reset_on_triple_fault=1, ignore_bad_msrs=1, msrs="msrs.def"

问题2:.bochsrc:915: Bochs is not compiled with lowlevel sound support

bios安装nvme_os_07

解决方法:修改配置文件,注释掉以下两行

#sound: driver=default, waveout=/dev/dsp. wavein=, midiout=
#speaker: enabled=1, mode=sound

问题3:bochs界面显示no bootable device

这是比较常见的错误了。检查目录文件下是否有软盘镜像a.img等img文件,并查看它与.bochsrc配置文件中设置的floppy名称是否一致。