- 一、实验环境
- 二、下载文件
- 三、配置Linux0.11所需环境
- 四、编译内核
- 五、运行linux0.11
- 六、说明
- 1、setup.sh脚本里进行了什么操作?
- 2、最后弹出来的窗口bochs是什么?
这次照例还是在Vmware虚拟机上进行实验,实验环境为Ubuntu16.04版本。
同时,本次内容也是基于哈尔滨工业大学《操作系统》课程实验的相关内容进行操作。hit-oslab
二、下载文件1、可以直接在hit-oslab-github下载,如果访问不了,或者下载速度慢,这里提供了gitee下载路径:hit-oslab-gitee
注意:
-
如果VMware实现了文件共享功能,可在解压好之后,直接拖动文件夹放入Ubuntu对应的文件路径中。
-
还可以在Ubuntu中安装git,命令如下:sudo apt install git。git安装好之后,可以直接用git命令获取文件。命令如下:git clone -b os https://gitee.com/fayoung/os.git 。
2、下载好之后,会得到以下目录
3、其中的hit-oslab就是这次我们需要的文件。内容如下:
三、配置Linux0.11所需环境由于LInux0.11在设计之初是在32位的机器上进行编译的,而现在的各大Linux发行版(例如Ubuntu、redhat、CentOS)都是64位,所以直接对Linux0.11进行编译会出现问题。
现在要配置Linux0.11所需的环境,在刚刚所下载的文件当中,已经写好了相关的脚本,直接运行即可。
执行setup.sh脚本:./setup.sh:
这时候会提示权限不足,需提高一个该文件的权限,命令为:chmod 777 ./setup.sh 。执行之后,会发现setup.sh文件变成绿色,是一个可执行文件。
然后,重新执行:./setup.sh
完成之后,会提示以下字符:
然后,该脚本会在源目录下生成oslab文件夹
四、编译内核进入oslab文件目录
进入到linux-0.11文件夹目录中
在当前目录下,使用make命令进行编译
等待一段时间,编译成功。
五、运行linux0.11回到上一级目录当中,执行run文件。
提高run文件的权限,运行run文件
发现还是报错
根据提示,提高当前目录下bochs中bochs-gdb的权限
接下来,再执行run文件:./run
弹出Bochs界面
输入ls命令
说明编译成功!
六、说明 1、setup.sh脚本里进行了什么操作?setup.sh代码如下:
#!/bin/sh # Harbin Insitute of Technology # Operating System - Setup script v0.0.1 # # $Author$: Deng Xiongfei# $Date$: 2014-10-10 export OSLAB_INSTALL_PATH=$HOME/oslab cat hit.icon echo "| Environment Setup script v0.0.1 |" echo "| $ 33[34mDeng Xiongfei 33[0m $ |" echo "+-------------------------------------------------------------------+" install_gcc34_amd64() { echo -n "* Install gcc-3.4 for x86_64(amd64) arch now......" if [ -z `which gcc-3.4` ]; then sudo dpkg -i gcc-3.4/amd64/gcc-3.4-base_3.4.6-8ubuntu2_amd64.deb > /dev/null sudo dpkg -i gcc-3.4/amd64/cpp-3.4_3.4.6-8ubuntu2_amd64.deb > /dev/null sudo dpkg -i gcc-3.4/amd64/gcc-3.4_3.4.6-8ubuntu2_amd64.deb > /dev/null echo " 33[34mDone 33[0m" else echo " 33[32mSipped 33[0m" fi } install_gcc34_i386() { echo -n "* Install gcc-3.4 for x86(i386) arch now......" if [ -z `which gcc-3.4` ]; then sudo dpkg -i gcc-3.4/i386/gcc-3.4-base_3.4.6-8ubuntu2_i386.deb > /dev/null sudo dpkg -i gcc-3.4/i386/cpp-3.4_3.4.6-8ubuntu2_i386.deb > /dev/null sudo dpkg -i gcc-3.4/i386/gcc-3.4_3.4.6-8ubuntu2_i386.deb > /dev/null echo " 33[34mDone 33[0m" else echo " 33[33mSkipped 33[0m" fi } install_dep_i386() { echo "* Install dependencies for x86(i386) arch now......" sudo apt-get install bin86 sudo apt-get install build-essential echo "* Install dependencies for x86(i386) arch now...... 33[34mDone 33[0m" } install_dep_amd64() { echo "* Install dependencies for x86_64(amd64) arch now......" sudo apt-get install bin86 sudo apt-get install gcc-multilib sudo apt-get install build-essential sudo apt-get install bochs bochs-x bochs-sdl echo "* Install dependencies for x86_64(amd64) arch now...... 33[34mDone 33[0m" } configure_for_i386() { echo -n "* Copy rest files to oslab......" cp -r i386/* $OSLAB_INSTALL_PATH echo " 33[34mDone 33[0m" } configure_for_amd64() { # 64-bit version bochs has to show in sdl mode, bochs-sdl required echo -n "* Change bochs:display_library into sdl......" echo "display_library: sdl" >> $OSLAB_INSTALL_PATH/bochs/bochsrc.bxrc echo " 33[34mDone 33[0m" echo -n "* Copy run script to oslab......" cp -r amd64/* $OSLAB_INSTALL_PATH echo " 33[34mDone 33[0m" } # Common Code if [ "$1" ] && ([ "$1" = "-s" ] || [ "$1" = "--skip-update" ]); then echo -n "* Begin to setup...... 33[33m3 33[0m sec to start"; sleep 1 echo -n "r* Begin to setup...... 33[33m2 33[0m sec to start"; sleep 1 echo -n "r* Begin to setup...... 33[33m1 33[0m sec to start"; sleep 1 echo "r* Begin to setup...... 33[0m" else echo -n "* Update apt sources...... 33[33m3 33[31m sec to start"; sleep 1 echo -n "r* Update apt sources...... 33[33m2 33[31m sec to start"; sleep 1 echo -n "r* Update apt sources...... 33[33m1 33[31m sec to start"; sleep 1 echo "r* Update apt sources...... " sudo apt-get update fi echo -n "* Create oslab main directory......" [ -d $OSLAB_INSTALL_PATH ] || mkdir $OSLAB_INSTALL_PATH echo " 33[34mDone 33[0m" echo -n "* Create linux-0.11 directory......" [ -d $OSLAB_INSTALL_PATH/linux-0.11 ] || mkdir $OSLAB_INSTALL_PATH/linux-0.11 echo " 33[34mDone 33[0m" # Extract linux-0.11 echo -n "* Extract linux-0.11......" tar zxf common/linux-0.11.tar.gz -C $OSLAB_INSTALL_PATH/linux-0.11 cp common/linux-0.11.tar.gz $OSLAB_INSTALL_PATH echo " 33[34mDone 33[0m" # Extract bochs and hdc image echo -n "* Extract bochs configuration file and hdc image......" tar zxf common/bochs-and-hdc.tar.gz -C $OSLAB_INSTALL_PATH/ echo " 33[34mDone 33[0m" # Copy common files echo -n "* Copy common files......" cp -r common/files $OSLAB_INSTALL_PATH echo " 33[034mDone 33[0m" # `getconf LONG_BIT` works better than `uname -a` if [ `getconf LONG_BIT` = "64" ] then install_dep_amd64 install_gcc34_amd64 configure_for_amd64 else install_dep_i386 install_gcc34_i386 configure_for_i386 fi echo " 33[34m* Installation finished. Ciao~ 33[0m"
总的来说就是:
- 为所在环境安装gcc3.4,使其可以编译32位的代码文件
- 配置编译Linux0.11所需要的依赖
- 下载Linux0.11代码
- 安装bochs和hdc image
- 最后将以上文件统一放入在home路径下新建的oslab文件夹中
Bochs是一个x86硬件平台的开源模拟器。它可以模拟各种硬件的配置。Bochs模拟的是整个PC平台,包括I/O设备、内存和BIOS。
通过改变配置,可以指定使用的CPU(386、486或者586),以及内存大小等。一句话,Bochs是电脑里的“PC”。根据需要,Bochs还可以模拟多台PC。它还有自己的电源按钮。
bochs的典型应用是提供x86 PC的完整仿真,包括x86处理器、硬件设备、和存储器。在工作站上的模拟器里运行操作系统和软件,就像你有一台机器内的机器。
总的来说就是一台模拟器,现在来看就是虚拟机中的虚拟机。



