linux0.11+bochs环境搭建和使用(代码片段)

特立独行的猫a 特立独行的猫a     2023-02-24     771

关键词:

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实验环境

bochs运行早期linux0.11和linux0.98内核(代码片段)

近期在看赵炯博士的《linux内核完全注释》一书,决定搭个环境进行测试。一、下面是需要的资源:1.Bochs2.6.11(操作方法:第一步加载bochs配置文件,随后在bochs中选择软盘文件加载)2.内核映像:http://www.oldlinux.org/Linux.old/3.根文... 查看详情

linux0.11内核体系结构(代码片段)

系列文章目录Linux0.11启动过程分析(一)Linux0.11fork函数(二)Linux0.11缺页处理(三)Linux0.11根文件系统挂载(四)Linux0.11文件打开open函数(五)Linux0.11execve函数(六)Linux0.1180X86知... 查看详情

在linux搭建操作系统实战的学习环境(代码片段)

Linux中操作系统模拟的环境搭建1.前期需要的工具bochs(虚拟机),实际上就是操作系统模拟器nasm(intel汇编器),这里不采用as(gasGNU)因为后期都是用的intel汇编。在window上搭建的Linux虚拟机g++编译器 2. 环境的搭建在window上搭建... 查看详情

oslab-实验0-搭建环境(代码片段)

...ux-0.11源码、GCC3.4编译器(只能在低版本编译器上编译Linux0.11) 查看详情

linux0.11-分段和分页-09(代码片段)

Linux0.11-分段和分页-09分段和分页参考转载分段和分页书接上回,上回书咱们说到,head.s代码在重新设置了gdt与idt后。来到了这样一段代码。jmpafter_page_tables...after_page_tables:push0push0push0pushL6push_mainjmpsetup_pagingL6:jmpL6那就是开... 查看详情

linux0.11-重新设置idt和gdt-08(代码片段)

Linux0.11-重新设置idt和gdt-08重新设置idt和gdt参考转载重新设置idt和gdt书接上回,上回书咱们说到,CPU进入了32位保护模式,我们快速回顾一下关键的代码。首先配置了全局描述符表gdt和中断描述符表idt。lidtidt_48lgdtgdt_48... 查看详情

linux0.11-如果让你来设计进程调度-24(代码片段)

Linux0.11-如果让你来设计进程调度-24如果让你来设计进程调度整体流程设计上下文环境运行时间信息优先级进程状态转载如果让你来设计进程调度书接上回,上回书咱们说到,操作系统通过move_to_user_mode方法,通过伪造... 查看详情

linux0.11-如果让你来设计进程调度-24(代码片段)

Linux0.11-如果让你来设计进程调度-24如果让你来设计进程调度整体流程设计上下文环境运行时间信息优先级进程状态转载如果让你来设计进程调度书接上回,上回书咱们说到,操作系统通过move_to_user_mode方法,通过伪造... 查看详情

linux0.11启动过程分析(代码片段)

Linux0.11系列文章Linux0.11启动过程分析(一)Linux0.11fork函数(二)Linux0.11缺页处理(三)Linux0.11根文件系统挂载(四)Linux0.11文件打开open函数(五)Linux0.11execve函数(六)Linux0.1180X86... 查看详情

linux0.11源码阅读笔记-块设备驱动程序

内核代码统一使用缓冲块间接和块设备(如磁盘)交换数据,缓冲区数据通过块设备驱动程序和块设备交换数据。块设备驱动程序块设备驱动程序负责实现对块设备数据的读写功能。内核代码统一使用缓冲块间接和块设备(如磁... 查看详情

linux0.11-信号-48(代码片段)

Linux0.11-信号-48信号转载信号新建一个非常简单的info.txt文件。name:flashage:28language:java在命令行输入一条十分简单的命令。[root@linux0.11]catinfo.txt|wc-l3这条命令的意思是读取刚刚的info.txt文件,输出它的行数。通过上两回的讲... 查看详情

linux0.11-信号-48(代码片段)

Linux0.11-信号-48信号转载信号新建一个非常简单的info.txt文件。name:flashage:28language:java在命令行输入一条十分简单的命令。[root@linux0.11]catinfo.txt|wc-l3这条命令的意思是读取刚刚的info.txt文件,输出它的行数。通过上两回的讲... 查看详情

linux0.11-调试linux最早期的代码-36(代码片段)

Linux0.11-调试Linux最早期的代码-36调试Linux最早期的代码整体思路和效果第一步:配置虚拟机第二步:安装qemu第三步:下载并运行可调试的Linux0.11源码第四步:通过vscode远程调试转载调试Linux最早期的代码Linux0.11是Li... 查看详情

linux0.11-调试linux最早期的代码-36(代码片段)

Linux0.11-调试Linux最早期的代码-36调试Linux最早期的代码整体思路和效果第一步:配置虚拟机第二步:安装qemu第三步:下载并运行可调试的Linux0.11源码第四步:通过vscode远程调试转载调试Linux最早期的代码Linux0.11是Li... 查看详情

利用vs2013构搭linux0.11内核调试环境

VS2013的下载链接:链接:http://pan.baidu.com/s/1mh7iLfy密码:ir2olinux0.11的工程链接:http://pan.baidu.com/s/1eRUvAUY密码:ue3h下载完成后然后从打开刚刚的Linux0.11工程。再然后设置image为启动项目再按ctrl+F5直接执行&# 查看详情

利用vs2013构搭linux0.11内核调试环境

...接:链接:http://pan.baidu.com/s/1mh7iLfy密码:ir2olinux0.11的工程链接:http://pan.baidu.com/s/1eRUvAUY密码:ue3h下载完成后然后从打开刚刚的Linux0.11工程。再然后设置image为启动项目再按ctrl+F5直接执行,弹出两个窗... 查看详情

linux0.11-execve函数-35(代码片段)

Linux0.11-execve函数-35execve函数读取文件开头1KB的数据解析这1KB的数据为exec结构判断是脚本文件还是可执行文件准备参数空间设置eip和esp,完成摇身一变累了吧,休息会转载execve函数书接上回,上回书咱们说到,进... 查看详情

linux0.11-execve函数-35(代码片段)

Linux0.11-execve函数-35execve函数读取文件开头1KB的数据解析这1KB的数据为exec结构判断是脚本文件还是可执行文件准备参数空间设置eip和esp,完成摇身一变累了吧,休息会转载execve函数书接上回,上回书咱们说到,进... 查看详情