您的位置:首页 > 运维架构 > Linux

[积累] 在Ubuntu16.04 64位系统上配置linux-0.11内核实验环境

2017-07-01 09:52 736 查看
转载请注明出处

1 配置思路

由于编译器、汇编器等工具的更新,在Ubuntu16.04直接编译linux-0.11内核代码需要对源代码做很多的修改。为了减少工作量,本文使用了哈尔滨工业大学计算机学院在网易云课堂操作系统课中提供的实验环境,下载地址为 https://cms.hit.edu.cn/mod/folder/view.php?id=1716

这个压缩包中带有bochs软件并设置好了bochs的运行参数,带有Linux-0.11源代码以及一个简易的运行脚本。其中linux-0.11源代码与原版的代码由哈工大的老师做了修改,主要是修改了make文件。要查看详细的修改信息,可以使用diff命令,来比较修改后的源码和原版linux-0.11代码。本文主要做的主要工作:实现在Ubuntu16.04 64位系统上编译上述内核,并在bochs中进行模拟。

2 安装gcc-3.4

上述内核代码中的make文件使用gcc-3.4编译器编译内核,因此我们需要手动安装低版本gcc-3.4编译器。由于gcc-3.4已经不再由官网维护,因此我们需要手动下载deb包进行安装。在ubuntu的归档网站 http://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/ 下载如下包:

cpp-3.4_3.4.6-6ubuntu5_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

然后使用
sudo dpkg --force-depends *.deb
命令进行安装,*代表上面的包名。

安装完毕后用
gcc-3.4 --version
进行测试。在测试通过后我们开始尝试编译内核,切换至linux-0.11/目录执行
make
命令。在执行
make
命令过程中,如果出现了如下错误提示:

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


说明缺少32位程序的libc库,h执行如下命令进行安装(参考 https://askubuntu.com/questions/470796/fatal-error-sys-cdefs-h-no-such-file-or-directory):

sudo apt-get install libc6-dev-i386


之后内核应该可以正确编译了。

3 修改运行脚本

内核编译完成之后,需要运行bochs来启动内核,上述压缩包中的
run
脚本启动了压缩包中自带的32位bochs,但是由于我正在用64位的系统,还需要一些额外的库来运行32位的bochs,因此我安装了64位的bochs。要使用自己安装的boches,需要按照如下方式修改
run
脚本:

run
脚本的最后一行
$OSLAB_PATH/bochs/bochs-gdb -q -f $OSLAB_PATH/bochs/bochsrc.bxrc
替换为
bochs -q -f $OSLAB_PATH/bochs/bochsrc.bxrc
即,使用系统路径下的bochs命令启动bochsrc.bxrc虚拟机。

如果提示需要安装
x module
,那么执行如下命令安装:

sudo apt-get install bochs-x bochs-sdl


如果启动过程中黑屏,应该是进入了调试模式,在终端中输入
c
命令,可以启动正常模式。至此,可以编译运行的linux-0.11内核环境应该已经构建完毕了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: