操作系统内核实验(环境搭建)

实验步骤参考哈工大操作系统实验指导书,自行下载。

实验环境的搭建与使用

我用vmware搭的ubuntu做为实验环境,首先,下载hit-oslab-linux-20110823.tar(链接:https://pan.baidu.com/s/1O0HT2iyegHvQUICKdhsTmQ
提取码:98l3 )

里面包含了一下内容:

  1. 可在Ubuntu下编译的Linux 0.11内核源代码。
  2. 已打开gdb-stub功能的Bochs及其支撑文件、配置文件。Ubuntu自带的Bochs没有gdb-stub功能,不能用GDB进行C语言级的调试。
  3. 可忽略Signal 0的GDB调试器。GDB是为调试应用程序而设计,而应用程序不需要处理signal 0,所以GDB捕获到signal 0后会强制暂停程序。Bochs(也许是Linux 0.11内核)会产生大量的signal 0,影响调试。我们给GDB打了一个补丁,使其可以忽略signal 0。
  4. 磁盘镜像文件hdc-0.11-new.img。它是Linux 0.11的根文件系统,内含gcc、vi等开发工具和bash等常用工具。
  5. 方便运行、调试和文件交换的一系列脚本。

然后将这个文件解压

$ tar zxf hit-oslab-linux-20110823.tar

为了确保安装成功可以安装一些编译器和工具:

$ sudo apt-get install build-essential
$ sudo apt-get install bin86
$ sudo apt-get install gcc-3.4
$ sudo apt-get install manpages-dev

这里我安装gcc-3.4失败了。后面会遇到麻烦。

下面开始编译内核:

先切换到解压后的目录,我这里是oslab/oslab,然后进入linux-0.11目录,执行编译命令

$ make all

不出意外你会遇到各种报错(emmm)
首先我遇到的就是gcc-3.4命令找不到,刚才说了我没装上gcc-3.4,Ubuntu里装的是最新版的gcc,所以我把所有的makefile里的gcc-3.4全改成了gcc。(makefile决定一个项目里文件的编译规则)

之后又遇到很多错误,大部分都可以在这里找到解决方法:
感谢这位大神(这是个链接)

走过上面的坑后还有一个错误没提到,就是__stack_chk_fail未定义,解决方法是:在顶层的Makefile里找到CFLAGS然后添加-fno-stack-protector标志,添加完后记得make clean下,不然不会立即生效

最后不报错并得到linux-0.11/Image了就说明编译成功。

运行和调试

在解压目录下运行:

$ ./run

然后很自然的就报错了:
./bochs/bochs-gdb: error while loading shared libraries: libSM.so.6: cannot open shared object file: No such file or directory
查了下解决方法如下:
我们需要的是32位的库,所以先查找对应的文件:
apt-file search libSM
得到结果:

libsm6: /usr/lib/x86_64-linux-gnu/libSM.so.6
libsm6: /usr/lib/x86_64-linux-gnu/libSM.so.6.0.1

再安装:

sudo apt-get install libsm6:i386

这里i386代表32位的
后面又会有其他的库报错,按照相同的方法安装对应的库。

好了,接下来终于不报错了,然后运行bochs,发现一直在loadingsystem哪里闪烁…查无果,遂放弃,失败。






重做,参考这位兄台

发布了24 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/realfancy/article/details/88592590