编译linux0.11内核

  • 一、实验环境
  • 二、下载文件
  • 三、配置Linux0.11所需环境
  • 四、编译内核
  • 五、运行linux0.11
  • 六、说明
    • 1、setup.sh脚本里进行了什么操作?
    • 2、最后弹出来的窗口bochs是什么?

一、实验环境

这次照例还是在Vmware虚拟机上进行实验,实验环境为Ubuntu16.04版本(32位)。下载地址

同时,本次内容也是基于哈尔滨工业大学《操作系统》课程实验的相关内容进行操作。hit-oslab

二、下载文件

1、可以直接在hit-oslab-github下载,如果访问不了,或者下载速度慢,这里提供了gitee下载路径:hit-oslab-gitee

注意:

  1. 如果VMware实现了文件共享功能,可在解压好之后,直接拖动文件夹放入Ubuntu对应的文件路径中。

  2. 还可以在Ubuntu中安装git,命令如下:sudo apt install git。git安装好之后,可以直接用git命令获取文件。命令如下:git clone 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<dk@hit.edu.cn>
# $Date$: 2014-10-10
export OSLAB_INSTALL_PATH=$HOME/oslab
cat hit.icon
echo "|                 Environment Setup Script v0.0.1                   |"
echo "|                $ \033[34mDeng Xiongfei\033[0m <dk@hit.edu.cn> $                  |"
echo "+-------------------------------------------------------------------+"install_gcc34_amd64() {echo -n  "* Install gcc-3.4 for x86_64(amd64) arch now......"if [ -z `which gcc-3.4` ]; thensudo dpkg -i gcc-3.4/amd64/gcc-3.4-base_3.4.6-8ubuntu2_amd64.deb > /dev/nullsudo dpkg -i gcc-3.4/amd64/cpp-3.4_3.4.6-8ubuntu2_amd64.deb > /dev/nullsudo dpkg -i gcc-3.4/amd64/gcc-3.4_3.4.6-8ubuntu2_amd64.deb > /dev/nullecho "\033[34mDone\033[0m"elseecho "\033[32mSipped\033[0m"fi
}install_gcc34_i386() {echo -n  "* Install gcc-3.4 for x86(i386) arch now......"if [ -z `which gcc-3.4` ]; thensudo dpkg -i gcc-3.4/i386/gcc-3.4-base_3.4.6-8ubuntu2_i386.deb > /dev/nullsudo dpkg -i gcc-3.4/i386/cpp-3.4_3.4.6-8ubuntu2_i386.deb > /dev/nullsudo dpkg -i gcc-3.4/i386/gcc-3.4_3.4.6-8ubuntu2_i386.deb > /dev/nullecho "\033[34mDone\033[0m"elseecho "\033[33mSkipped\033[0m"fi
}install_dep_i386() {echo  "* Install dependencies for x86(i386) arch now......"sudo apt-get install bin86sudo apt-get install build-essentialecho  "* Install dependencies for x86(i386) arch now......\033[34mDone\033[0m"
}install_dep_amd64() {echo  "* Install dependencies for x86_64(amd64) arch now......"sudo apt-get install bin86sudo apt-get install gcc-multilibsudo apt-get install build-essentialsudo apt-get install bochs bochs-x bochs-sdlecho  "* Install dependencies for x86_64(amd64) arch now......\033[34mDone\033[0m"
}configure_for_i386() {echo -n  "* Copy rest files to oslab......"cp -r i386/* $OSLAB_INSTALL_PATHecho  "\033[34mDone\033[0m"
}configure_for_amd64() {# 64-bit version bochs has to show in sdl mode, bochs-sdl requiredecho -n "* Change bochs:display_library into sdl......"echo "display_library: sdl" >> $OSLAB_INSTALL_PATH/bochs/bochsrc.bxrcecho  "\033[34mDone\033[0m"echo -n "* Copy run script to oslab......"cp -r amd64/* $OSLAB_INSTALL_PATHecho "\033[34mDone\033[0m"
}# Common Code
if [ "$1" ] && ([ "$1" = "-s" ] || [ "$1" = "--skip-update" ]); thenecho -n "* Begin to setup......\033[33m3\033[0m sec to start"; sleep 1echo -n "\r* Begin to setup......\033[33m2\033[0m sec to start"; sleep 1echo -n "\r* Begin to setup......\033[33m1\033[0m sec to start"; sleep 1echo "\r* Begin to setup......                                 \033[0m"
elseecho -n "* Update apt sources......\033[33m3\033[31m sec to start"; sleep 1echo -n "\r* Update apt sources......\033[33m2\033[31m sec to start"; sleep 1echo -n "\r* Update apt sources......\033[33m1\033[31m sec to start"; sleep 1echo "\r* Update apt sources......                                 "sudo apt-get update
fiecho -n "* Create oslab main directory......"
[ -d $OSLAB_INSTALL_PATH ] || mkdir $OSLAB_INSTALL_PATH
echo "\033[34mDone\033[0m"echo -n "* Create linux-0.11 directory......"
[ -d $OSLAB_INSTALL_PATH/linux-0.11 ] || mkdir $OSLAB_INSTALL_PATH/linux-0.11
echo "\033[34mDone\033[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 "\033[34mDone\033[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 "\033[34mDone\033[0m"# Copy common files
echo -n "* Copy common files......"
cp -r common/files $OSLAB_INSTALL_PATH
echo "\033[034mDone\033[0m"# `getconf LONG_BIT` works better than `uname -a`
if [ `getconf LONG_BIT` = "64" ]
theninstall_dep_amd64install_gcc34_amd64configure_for_amd64
elseinstall_dep_i386install_gcc34_i386configure_for_i386
fiecho "\033[34m* Installation finished. Ciao~\033[0m"

总的来说就是:

  • 为所在环境安装gcc3.4,使其可以编译32位的代码文件
  • 配置编译Linux0.11所需要的依赖
  • 下载Linux0.11代码
  • 安装bochs和hdc image
  • 最后将以上文件统一放入在home路径下新建的oslab文件夹中

2、最后弹出来的窗口bochs是什么?

Bochs是一个x86硬件平台的开源模拟器。它可以模拟各种硬件的配置。Bochs模拟的是整个PC平台,包括I/O设备、内存和BIOS。

通过改变配置,可以指定使用的CPU(386、486或者586),以及内存大小等。一句话,Bochs是电脑里的“PC”。根据需要,Bochs还可以模拟多台PC。它还有自己的电源按钮。

bochs的典型应用是提供x86 PC的完整仿真,包括x86处理器、硬件设备、和存储器。在工作站上的模拟器里运行操作系统和软件,就像你有一台机器内的机器。

总的来说就是一台模拟器,现在来看就是虚拟机中的虚拟机。

编译linux0.11内核相关推荐

  1. linux0.11内核编译,编译Linux-0.11内核

    make[1]:正在离开目录 `/home/guang/temp/h/linux-0.11/lib' kernel/kernel.o: In function `number': /home/guan ...

  2. linux内核启动后键盘不能用,编译linux-0.11内核后键盘不对的问题解决方法,比如/变成了-...

    keyboard.S文件开始有这么一句 #include config.h里面有键盘布局的定义,linus用的是芬兰的键盘,我们用的是美式键盘. #ifndef _CONFIG_H #define _ ...

  3. Linux-0.11内核学习-添加系统调用

    1.参考资料 赵炯博士的网站oldlinux Linux内核完全注释 Linux0.11 源码 2.概要 操作系统作为软件应用层和底层硬件之间的部分,向下提供服务,向上提供接口.系统调用便是操作系统向 ...

  4. 一站式linux0.11内核head.s代码段图表详解

    阅读本文章需要的基础: 计算机组成原理:针对8086,80386CPU架构的计算机硬件体系要有清楚的认知,我们都知道操作系统是用来管理硬件的,那我们就要对本版本的操作系统所依赖的硬件体系有系统的了解, ...

  5. Linux0.11内核源码解析-setup.s

    学习资料: Linux内核完全注释 操作系统真像还原 极客时间-Linux内核源码趣读 Linux0.11内核源码 ->setup程序将system模块从0x10000~0x8ffff整块向下移 ...

  6. Linux0.11内核源码解析-bootsect.s

    学习资料: Linux内核完全注释 操作系统真像还原 极客时间-Linux内核源码趣读 Linux0.11内核源码 ->上电 ->80x86架构CPU会自动进入实模式 ->从地址0x ...

  7. LINUX0.11内核阅读笔记

    我是通过阅读赵炯老师编的厚厚的linux内核完全剖析看完LINUX0.11的代码,不得不发自内心的说Linus真的是个天才.虽然我觉得很多OS设计的思想他是从UNIX学来的,但是他自己很周全很漂亮很巧 ...

  8. VirtualBox虚拟机安装RedHat7.3编译Linux0.01内核

    引子 由于需要编译linux0.01内核,而目前的linux版本太高需要降低gcc版本等等,需要做不少调整非常不方便. 所以,直接安装RedHat7.3,这样就好编译linux0.01的内核了. 但是 ...

  9. Ubuntu14.04下搭建Bochs仿真平台,同时用该平台安装Linux0.11内核

    因为Linux0.11内核需要在80X86硬件平台上运行,现在已经没有该硬件系统了,所以需要搭建Bochs这个仿真平台.Bochs是一个X86硬件平台的开源模拟器. 安装步骤参考的是如下一篇文章:ht ...

最新文章

  1. 你不知道的CSS单位
  2. hdu2089 不要62 数位dp
  3. vue2.0中ckeckbox(复选框)的使用心得,及对click事件和change的理解
  4. 基于JAVA+Servlet+JSP+MYSQL的高校后勤管理系统
  5. mysql读写分离6_6\MySQL 主从同步 、 MySQL 读写分离 、 MySQL 性能调优
  6. 高密度椒盐噪声的多方向加权均值滤波算法-附代码
  7. 数字电路逻辑设计 总结
  8. EasyDSS流媒体服务器如何解决5G超高清4k视频直播卡顿的问题解决方案
  9. 谈逻辑与数学界线之淡化
  10. PV、UV、IP分别是什么意思
  11. c语言51单片机调节led亮度,51单片机中用PWM控制LED亮度调节
  12. Sinkhorn算法
  13. OBS Studio安装教程以及录制等详细配置
  14. ubuntu如何卸载软件
  15. 【mac 环境】邮箱密码修改后,foxmail无法正常接收邮件
  16. 作业帮猿辅导们的隐忧:下沉市场真的是在线教育的菜?
  17. 【问】无法连接,用户‘sa’登陆失败
  18. JS判断某年某月有多少天
  19. 南京大学计算机信息安全专业,信息安全专业按实力划分为九类,看看你喜欢的院校属于哪一类...
  20. Java8新特性-Optional

热门文章

  1. 游戏的轻度、中度、重度是什么意思
  2. 转个有意思的东西: 脑残体全论(2007-08-20 13:48)
  3. App Store审核指南中文版
  4. java对象克隆效率_fastclone
  5. web前端期末大作业——基于Bootstrap响应式汽车经销商4S店官网21页
  6. 超详细的RS232/RS485电路设计
  7. 使用PHP访问Windows注册表
  8. plc编程中程序结构是什么样的
  9. 光储并网simulink仿真模型,直流微电网。 光伏系统采用扰动观察法是实现mppt控制,储能可由单独蓄电池构成
  10. 次世代游戏美术模型的特性和制作流程