Linux 系统的创始人在一篇新闻组投稿上所说的,要理解一个软件系统的真正运行机制,一定 要阅读其源代码(RTFSC – Read The Fucking Source Code)。系统本身是一个完整的整体,具有很多看似 不重要的细节存在,但是若忽略这些细节,就会对整个系统的理解带来困难,并且不能真正了解一个实 际系统的实现方法和手段。
目前的 Linux 内核源代码量都在几百万行的数量上,2.6.0 版内核代码行数约为 592 万行,而最近的 4.20 版内核代码行数已超过 2500 万行。所以对这些版本进行阅读几乎不可能。而 0.11 版内 核不超过 2 万行代码量,因此完全可以在一本书中解释和注释清楚。麻雀虽小,五脏俱全。
《Linux 内核 0.11 完全注释》最新版本5.0.1下载地址:
http://www.oldlinux.org/download/CLK-5.0.1-WithCover.pdf
环境准备
linux0.11环境下载
git clone https://github.com/Wangzhike/HIT-Linux-0.11.git
不想克隆的,可用去GitHub - Wangzhike/HIT-Linux-0.11: 网易云课堂选的操作系统课实验的代码及相关记录下载。
gcc-3.4安装
首先下载gcc-3.4,地址:http://old-releases.ubuntu.com/ubuntu/pool/main/g/gcc-3.4/
下载三个文件,分别是
cpp-3.4_3.4.6-6ubuntu2_amd64.deb
gcc-3.4-base_3.4.6-6ubuntu2_amd64.deb
gcc-3.4_3.4.6-6ubuntu2_amd64.deb
也可打开想要保存到的文件夹后,使用下面的命令直接下载
wget http://old-releases.ubuntu.com/ubuntu/pool/main/g/gcc-3.4/cpp-3.4_3.4.6-6ubuntu2_amd64.deb
wget http://old-releases.ubuntu.com/ubuntu/pool/main/g/gcc-3.4/gcc-3.4-base_3.4.6-6ubuntu2_amd64.deb
wget http://old-releases.ubuntu.com/ubuntu/pool/main/g/gcc-3.4/gcc-3.4_3.4.6-6ubuntu2_amd64.deb
下载完成后,安装
sudo dpkg -i cpp-3.4_3.4.6-6ubuntu2_amd64.deb gcc-3.4-base_3.4.6-6ubuntu2_amd64.deb gcc-3.4_3.4.6-6ubuntu2_amd64.deb
此时gcc-3.4已安装完成,但仍缺少相关类库做支撑,运行
sudo apt install gcc-multilib
此外编译bootsect和setup需要使用as86和ld86用于编译链接,在bin86中就有提供
sudo apt install bin86
倘若仍无法运行,追加安装
sudo apt install lib32z1 libsm-dev:i386 libx11-6:i386 libxpm4:i386 libstdc++6:i386
编译Linux 0.11
cd ~/oslab/linux-0.11
make
此时会生成镜像文件Image
运行
cd ~/oslab
./run
这里的run也是一个脚本,其最后一行的命令是启动Bochs
$OSLAB_PATH/bochs/bochs-gdb -q -f $OSLAB_PATH/bochs/bochsrc.bxrc
调试
汇编语言级别
./dbg-asm
通过Bochs进行汇编语言级别调试。
C语言级别
先运行
./dbg-c
再开一个终端,运行
./rungdb
则可以通过gdb进行C语言级别调试。
引用
https://jiaming.blog.csdn.net/article/details/119921424
Oldlinux.org -- Linux plinux - Early Linux Kernel Analysis and Comments
阿里云ubuntu系统配置linux-0.11(哈工大 李治军)实验环境搭建-阿里云开发者社区
linux0.11-文件系统_~怎么回事啊~的博客-CSDN博客_linux0.11根文件系统详解
GitHub - hoverwinter/HIT-OSLab: S - 哈工大《操作系统》实验
Ubuntu 20.04(64位)如何配置gcc-3.4用于编译linux-0.11 - 知乎
Oldlinux.org -- Linux plinux - Early Linux Kernel Analysis and Comments
Linux内核对比学习系列(3)——进程调度_DaHuangXiao的博客-CSDN博客_linux0.12比0.11