ubuntu 16.04安装bochs运行Linux0.11 全攻略

学习操作系统课程设计这门课要求使用bochs运行Linux0.11内核来了解操作系统内核的原理,我们的实验是和哈工大的李志军老师的实验相同。

之前用Windows运行bochs来进行实验遭遇了各种各样的坑,后来发现用Ubuntu环境下来做实验更方便。就尝试在Ubuntu虚拟机中安装bochs并Linux0.11内核,可是过程真的一言难尽,虽然网上类似的安装教程很多,方法也各不相同,可是不知道是不是我脸黑还是因为我太菜,各种尝试,浪费了好几天的时间,每次都是解决一个问题又出一个新的问题,最后网上也查不到解决办法,都以失败告终,最后经过自己摸索还有参考一些前辈的方法最后还是成功了,为了避免后来人踩坑才将这个过程记录下来,希望能有所帮助。

活不多少,我们进入正题,因为多次失败我直接采用了实验楼上的实验环境,我会把整个文件放到百度网盘上供大家使用(见评论区),如果涉及侵权我会及时删除。

1.下载hit-oslab-linux-20110823.tar.gz文件后,可以在downloads文件夹下找到,通过tar xvfz+文件名 命令在命令行模式解压这个文件,会得到一个oslab文件夹。进入这个文件夹,可以看到里边包含Linux0.11的源文件和bochs程序。

2.进入Linux-0.11文件夹下可以看到里边有个Image文件,这个就是我们在运行bochs时要载入软盘的文件,我一开始以为这个是可以直接使用的,后来才发现必须要make编译后才可以使用。这一步要做的就是make编译Linux0.11源码,cd进入这个文件夹,使用make clean清除历史编译的信息,然后make编译,如果不出所料的话肯定会报错,因为这个oslab需要的系统环境是比较老的,我们的Ubuntu16.04的很多配置和它是不匹配的。

错误可能为

as86 -0 -a -o boot/bootsect.o boot/bootsect.s
make: as86:命令未找到
Makefile:101: recipe for target 'boot/bootsect' failed

make: *** [boot/bootsect] Error 127

这个时候我们需要

sudo apt-get install aptitude

sudo aptitude install bin86

可是还会报错,具体形式我忘记了,但是你把错误命令去百度的话会查到你是缺少。。。各种文件,当你试图安装的时候会发现系统提示你系统已经安装了更高版本的,所以老版本无法安装,可是只有老版本才能适配当前的oslab,我查到了一位大佬的办法大佬的原博客,本来我以为按照大佬的步骤来肯定没问题,可是还是出现了新的问题,这也是我写这个博客的目的,希望一次帮大家把坑踩完。

内核代码中的make文件使用gcc-3.4编译器编译内核,因此我们需要手动安装低版本gcc-3.4编译器。由于gcc-3.4已经不再由官网维护,因此我们需要手动下载deb包进行安装,文件可以在归档网站查到。

大佬提到的文件不符合我系统的要求,不知道是不是版本的问题,需要安装的文件如下:

cpp-3.4_3.4.6-6ubuntu3_amd64.deb
g++-3.4_3.4.6-6ubuntu3_amd64.deb
gcc-3.4-base_3.4.6-6ubuntu3_amd64.deb
gcc-3.4_3.4.6-6ubuntu3_amd64.deb
libstdc++6-dev_3.4.6-6ubuntu3_amd64.deb

libstdc++6-dev_3.4.6-6ubuntu3_amd64.deb

全部下载好后,进入下载文件所在的文件夹,因为这几个文件都是相互依赖的,所以要一起安装

sudo dpkg --force-depends -i 文件1.deb 文件2.deb。。。。。。依次输入六个文件名,执行,执行完成后

再次进入oslab/linux-0.11文件夹下make clean后make会发现仍然报错

/usr/include/features.h|374|fatal error: sys/cdefs.h: No such file or directory|

这是因为我们缺少32位程序的libc库,通过以下命令进行安装,

sudo apt-get install libc6-dev-i386

注意:此处可能安装失败,失败后我经过百度发现需要以下命令安装32位支持库

apt-get install ia32-libs

然而,ubuntu16.04 并不再支持 ia32-libs 的软件包。

而是用 lib32ncurses5 lib32z1​软件包代替了 ia32-libs 软件包,因此,安装lib32ncurses5 lib32z1​就可以了:

apt-get install lib32ncurses5 ​

apt-get install lib32z1​

注意,系统可能会提示找不到安装包 Unable to locate package ​,需要我们升级自己的安装库

apt-get install update

升级完成后再次安装就可以安装成功了(可能需要先安装第二个再安装第一个,总之很迷,我第一次安装不上,多试了几次就可以安装了)

安装完成两个文件后再次尝试make clean然后 make,会发现仍然报错

/usr/include/features.h:367:25: fatal error: sys/cdefs.h: No such file or directory

但是这个时候我们再次执行

sudo apt-get install libc6-dev-i386

就可以顺利安装了(不知道这个安装成功是不是于前两个安装成功有关系,还是因为我升级了安装源)

安装完成后我们再次编译make clean 然后 make就可以看到最后显示Sync,这就说明我们编译成功了,这时我们的第二步编译工作才顺利完成(很心累有没有?)

3.编译完成后Linux-0.11文件下的Image文件才是可用的,现在我们配置我们的bochs的运行文件,这个文件决定我们怎样启动我们的bochs,使用那个文件作为软盘使用哪个软件作为硬盘。bochs文件中bochsrc.bxrc配置文件如下:

romimage: file=/home/XPX/Downloads/oslab/bochs/BIOS-bochs-latest
megs: 16
vgaromimage: file=/home/XPX/Downloads/oslab/bochs/vgabios.bin
floppya: 1_44="/home/XPX/Downloads/oslab/linux-0.11/Image", status=inserted
ata0-master: type=disk, path="/home/XPX/Downloads/oslab/hdc-0.11.img", mode=flat, cylinders=204, heads=16, spt=38
boot: a
log: /home/XPX/Downloads/oslab/bochsout.txt
#parport1: enable=0
vga_update_interval: 300000
keyboard_serial_delay: 200
keyboard_paste_delay: 100000
#floppy_command_delay: 50000
cpu: count=1, ips=4000000
mouse: enabled=0
private_colormap: enabled=0
fullscreen: enabled=0
screenmode: name="sample"
i440fxsupport: enabled=0

注意:下载下来的文件中是包含这些代码的,你需要修改的是以上文件中包含XPX的内容,那是文件在你系统中的绝对地址,因为我的用户名是XPX所以我系统中文件的绝对地址就是/home/XPX/Downloads/oslab,具体自己系统中的路径可以自己查看一下。

以上工作都做完后我们就可以启动一下了

进入oslab/bochs文件夹下

bochs -f bochsrc.bxrc


这时候就会弹出bochs运行窗口,此时是黑屏,还需要在命令行中输入c

就可以看到bochs正常运行进入boot引导程序了,到此我们的实验环境搭建就顺利完成了!!!

(过程太曲折了,完成的那一刻都要哭了)

博主水平有限,如果有哪里不对,或者有更好的配置方案欢迎在评论区指点。

你可能感兴趣的:(操作系统)