【转载】Linux-0.11实验环境准备
Linux-0.11实验环境准备
致谢:DeathKing/hit-oslab项目,我的修改脚本及原材料均来自于大大DeathKing的hit-oslab项目,特此声明原创出处,深表感谢!
参考博客:操作系统实验报告-熟悉实验环境
适用系统:ubuntu 16.04 amd64
如果是ubuntu 32位系统(i386)或者是ubuntu version <= 14.04的64位系统,可以直接移步这个快速配置教程,但是64位系统按上面提到的照配置教程来会缺少诸如dbg-asm dbg-c等调试脚本命令。并且ubuntu 16.04 64位按该配置快速配置教程来,在我的机器上有问题,编译之后的linux-0.11系统不能正常启动。所以我对该配置教程进行了改写,具体见以下内容。
我的16.04 amd64快速配置脚本
前几天,自学了下shell脚本的相关知识,参考上面快速配置教程的setup.sh脚本,以及对应的材料,自己改写了这个setup.sh脚本,以及对应的hit-oslab-linux-20110823.tar.gz材料,并重新打包为hit-oslab-linux-qiuyu.tar.gz,并将所需材料以及配置脚本setup.sh上传至我的github配置实验环境,经过测试,在我64位16.04的ubuntu中可以完成设置。
实验材料
- hit-oslab-linux-20110823.tar.gz
包含linux-0.11源码,bochs虚拟机等 - gcc-3.4-ubuntu.tar.gz
编译linux-0.11需要用到的低版本的gcc
安装
克隆该仓库
git clone https://github.com/Wangzhike/HIT-Linux-0.11.git
进入到环境配置文件夹
cd HIT-Linux-0.11/prepEnv/hit-oslab-qiuyu/
执行脚本。
本安装脚本会将实验环境安装在当前登录用户的*HOME*目录下,文件名为*oslab*。如果有特殊需要,请自行移动文件夹位置。注意,请不要使用超级用户执行此命令,当有需要时该脚本会请求超级用户权限。./setup.sh
复原
考虑到操作系统实验每次需要重置linux-0.11目录,添加了重置linux-0.11目录下所有文件的功能。本命令由./run
命令提供。
./run init
setup.sh具体操作细节(不关心也可以)
解压hit-oslab-linux
在终端执行tar zxvf hit-oslab-linux-20110823.tar.gz
安装gcc-3.4
在终端执行cp gcc-3.4-ubuntu.tar.gz /tmp cd /tmp tar zxvf gcc-3.4-ubuntu.tar.gz cd gcc-4.3 sudo ./inst.sh amd64
安装as86 ld86
as86 ld86用于编译和链接linux-0.11/boot下的bootsect.s和setup.s,它们采用as86汇编语法;而linux-0.11下的其他汇编文件采用gas的语法AT&
搜索包含as86 ld86的包:apt-cache search as86 ld86
执行结果:
bin86 - 16-bit x86 assembler and loader
安装bin86:
sudo apt-get install bin86
64位系统需要安装32位兼容库
sudo apt-get install libc6-dev-i386
C语言编译环境
sudo apt-get install build-essential
编译内核
cd oslab/linux-0.11 make
运行linux-0.11
./run
出现错误
./bochs/bochs-gdb: error while loading shared libraries: libSM.so.6: cannot open shared object file: No such file or directory
打印动态链接配置
ldconfig -p | grep libSM.so.6
libSM.so.6的链接信息
libSM.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libSM.so.6
我们需要的是32位的。搜索库对应的名称
apt-file search libSM.so.6
打印结果
libsm6: /usr/lib/x86_64-linux-gnu/libSM.so.6 libsm6: /usr/lib/x86_64-linux-gnu/libSM.so.6.0.1
得到其对应的包名为libsm6,安装对应的32位库
sudo apt-get install libsm6:i386
再次尝试,出现错误
./bochs/bochs-gdb: error while loading shared libraries: libX11.so.6: cannot open shared object file: No such file or directory
同样可以按照步骤11来解决,不过这里用了另一个工具
dpkg-query -S libX11.so.6
打印结果
libx11-6:i386: /usr/lib/i386-linux-gnu/libX11.so.6.3.0 libx11-6:amd64: /usr/lib/x86_64-linux-gnu/libX11.so.6 libx11-6:amd64: /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0 libx11-6:i386: /usr/lib/i386-linux-gnu/libX11.so.6
得到其对应的包名为libx11-6,安装对应的32位库
sudo apt-get install libx11-6:i386
再次尝试,出现错误
./bochs/bochs-gdb: error while loading shared libraries: libXpm.so.4: cannot open shared object file: No such file or directory
继续使用步骤15的工具
dpkg-query -S libXpm.so.4
打印结果
libxpm4:i386: /usr/lib/i386-linux-gnu/libXpm.so.4 libxpm4:amd64: /usr/lib/x86_64-linux-gnu/libXpm.so.4 libxpm4:amd64: /usr/lib/x86_64-linux-gnu/libXpm.so.4.11.0 libxpm4:i386: /usr/lib/i386-linux-gnu/libXpm.so.4.11.0
得到其对应的包名为libxpm4,安装对应的32位库
sudo apt-get install libxpm4:i386
再次尝试,运行成功!
Cloud Lab: 泰晓实验云台
配合 赵炯 博士的 Linux内核完全注释
$ git clone https://gitee.com/tinylab/cloud-lab.git
$ cd cloud-lab
$ tools/docker/choose linux-0.11-lab
$ tools/docker/run
然后通过浏览器登入ubuntu lab系统,
$ make boot # 软盘启动
$ make boot-hd # 硬盘启动
注意,挂载实验中的硬盘到本机时, offset=1024, 而不是《Linux内核完全注释》上的512一个扇区。
ubuntu安装libstdc++.so.6的方法
sudo apt-get install libstdc++6
sudo apt-get install lib32stdc++6