linux0.11+Bochs环境搭建和使用
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
浅析Linux中的进程调度 - jack.chen - 博客园
Linux 0.11 实验环境搭建_kunkliu的博客-CSDN博客_linux0.11实验环境
linux0.11+Bochs环境搭建和使用相关推荐
- Linux 0.11 实验环境搭建与调试
缘起 之前我写过一篇博文:Linux 0.11 实验环境搭建 本以为有了这个环境(gcc-3.4 & gdb-6.8),就可以调试无忧了.谁知遇到了以下问题: (1)用 gdb 调试 main ...
- Linux 0.11 实验环境搭建
如果想学习Linux 0.11,实验环境是必不可少的.最好是能编译,能运行,能调试. 如今大家都是用64位的Linux操作系统,而且是高版本的GCC(4.0以上),所以环境搭建是个难题.要么就是编译后 ...
- Linux-0.00运行环境搭建【转】
转自:http://blog.csdn.net/rosetta/article/details/8933240 这里的Linux-0.00由Linus Torvalds写的Linux最初版本,只是打印 ...
- QT5.11 + VS2017 环境搭建
因为一系列原因没有文档国内开发搭建环境全靠自己摸索,网上七零八散不完整,遂写此文,方便需要的人: 说明1:visual studio 2017已经全新升级,如果只需要c和c++开发环境在线下载只需要1 ...
- linux0.11学习笔记-技术铺垫-简单AB任务切换程序(1)-实现一个简单的bootloader
直接看代码,即使已经理解了代码,但是还是会有种没有学到手的感觉.真正的掌握来自实践,来自己动手做出来."简单AB任务切换程序"系列文章的目的是,在bochs下,实践出简单AB两个任 ...
- Linux0.11学习研究
Linux0.11 环境搭建: 我参考的是这个博客:http://blog.csdn.net/u014688145/article/details/50575588 下载的文件:点击打开链接http: ...
- main() 函数解析(一)——Linux-0.11 剖析笔记(六)
文章目录 1. 宏定义`_syscall0` 2. `setup.s`读取的参数 3. 读取CMOS实时时钟信息 3.1 `outb_p(value,port)` 3.2 `inb_p(port)` ...
- main函数解析(一)——Linux-0.11 学习笔记(五)
main()函数解析(一)--Linux-0.11 学习笔记(五) 经过了前面的各种铺垫,终于来到了main函数.这篇博客的任务是把init/main.c讲清楚.由于牵扯到很多的函数调用,要想一次就说 ...
- linux看火狐的安装目录,linux下firefox+geckodriver环境搭建
2.将Firefox-latest-x86_64.tar.bz2拷贝到linux环境下 3.执行 tar -xjvf Firefox-latest-x86_64.tar.bz2 解压安装文件,.删除系 ...
最新文章
- 1小时学会:最简单的iOS直播推流(八)h264/aac 软编码
- python代码案例详解-Python综合应用名片管理系统案例详解
- 092_元素的几种宽度和高度
- OpenGL延迟着色之一
- Slave_SQL_Running:No的两种解决办法
- OpenStack组件
- 任意阶魔方阵matlab程序,【精品】任意阶魔方阵算法(c语言)
- 《零基础》MySQL 数据类型(八)
- OpenSessionInViewFilter 对 lazy 加载 的配置及作用
- 杭电1713相遇周期
- Android状态栏语言,Android实现3种Notification(状态栏通知)
- docker启动出现 hardware assisted virtual
- 什么是网络通信协议?(七层功能介绍)
- linux版本的火狐浏览器,火狐浏览器Linux版本
- 腾讯云弹性MapReduce
- MySQL 教程(三)函数
- 新零售背景下“农村淘宝“线下和线上服务
- 混合高斯模型(Gaussian Mixture Model,GMM)
- python应用——将raw文件转化为jpg文件,并显示图像
- 阻感性负载和反电动势负载——看似简单的整流电路详解
热门文章
- 第七讲:基于模型的系统工程(MBSE)|达索系统
- vue页面使用多个定时器
- 信息学奥赛一本通(c++版)1000
- 页面中实现轮播图效果
- 2023.05.30-ubuntu22.04多卡服务器卸载cuda重新安装(踩坑不断版本)
- jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
- svn服务器日志在哪个文件夹,SvnLog(svn日志导出工具)
- 第一篇博客,python爬取淘宝信息
- 连接机器打造智能工厂?请看虹科ASEM UNIQO解决方案!
- (四)DepthAI-python相关接口:OAK Messages