os内核入门-linux0.11运行环境搭建

张开发
2026/4/15 1:09:10 15 分钟阅读

分享文章

os内核入门-linux0.11运行环境搭建
1. 为什么要学习linux内核程序员基本做的软件都会运行在一个os上当然也有没有os的系统比如单片机但是这个群体很少。基于这一点不论是上层软件开发人员还是底层软件开发了解内核是有好处的一是搞清楚程序继续往下运行的原理是什么可以反馈于上层开发进行优化二是内核里面有很多程序设计的技巧可以在上层软件中借鉴使用。至少让你讨论问题的时候可以说出来或者听懂些高大上的词汇![图片](https://i-blog.csdnimg.cn/direct/0dd30f46ec0d420ca170ebf81c4ef2dd.jpg)。 所有的os底层逻辑或者说提供的功能是相同的选择一种内核进行学习就有助于理解所有os的运行linux是目前应用很广泛的并且开源的os很值得学习。2. 为什么选择linux0.11进行学习最新的linux内核版本5.x代码级别在千万行要整体进行学习几乎是不可能的我们关注的更多的其精华的、原理性的东西。linux0.11是1991.12.8日发布的代码约有2万行是一个可以基本正常运行的内核版本可以进行系统性、整体性的学习内核。 linux0.11算是一个古董级别的内核30年前发布但是它具有os最基本的属性支持实时多任务有进程的概念。后续版本在其基础上演化。3. linux0.11运行环境搭建下面进入正题写代码做项目的都知道环境搭建是个力气活经常耗费了大量时间撸代码反而阻力较小。Talk is cheap. Show me the code借用Linux 的创始人Linus Torvalds的话那就让我们直接上干货。这里我从网上找到一个可以快速搭建环境进行学习的一站式资料https://github.com/Wangzhike/HIT-Linux-0.11.git里面包括源码、编译环境搭建、运行os的虚拟机等。下面我们按照源码-》编译-》运行的顺序进行。3.1 准备工作研究linux当然要先用一下linux系统这里推荐使用linux应用最广泛的发行版ubuntu。有一些程序员甚至不用windows做任何工作必须要用windows的app时用wine在linux下运行。闲话少说这里先安装vituralboxubuntu环境自行百度查询安装方法。3.2 代码执行如下命令进行代码工具下载git clone https://github.com/Wangzhike/HIT-Linux-0.11.git ~/hit-oslab cd ~/hit-oslab/HIT-Linux-0.11-master/0-prepEnv/hit-oslab-qiuyu tar -zxvf hit-oslab-linux-qiuyu.tar.gz cd oslab/linux-0.11 lsoslab/linux-0.11就是linux-0.11的源码我们先了解下目录结构如下boot/目录下包括三个汇编程序其中包括磁盘引导程序 bootsects.s、获取BIOS中参数的 setup.s汇编程序和32位运行启动代码head.s汇编程序。这三个汇编程序完成了把内 核从快射别上引导加载到内存的工作并对系统配置参数进行探测完成了进入32为 保护模式运行之前的所有工作为内核系统执行进一步初始化做准备工作。 fs/文件系统。 include/头文件信息定义常量和数据结构。init/内核系统的初始化程序 main.c。它是内核完成所有初始化工作进入正常运行的关键。 在完成系统所有的初始化工作后创建了用于shell的进程。 kernel/最重要的部分是进程调度函数schedule(),sleep_on()函数和有关系统调用的程序。 kernel/dev_blk/对快设备程序进行了注释说明。含有硬盘软盘等快设备的驱动程序主要用来与文件系统和高速缓冲区打交道含有较都的与硬件相关的内容。 kernel/dev_chr/字符设备驱动做说明。主要涉及串行设备驱动键盘驱动显示器驱动等。 kernel/math/数学协处理器的方针程序。 lib/库函数文件主要向编译系统提供接口。 mm/内存管理主要介绍Intel80X86 为处理的内存的保护模式的运行方式。 tools/build.c 程序用于将内核的磁盘引导程序块与其他主要内核模块连接成一个完整的内核映像(kernel image)文件。Makefile依赖关系文件。3.3 编译首先要安装编译工具确保ubuntu可以连上网。cd0-prepEnv/hit-oslab-qiuyu/ ./setup.sh安装成功后下面就是编译cd0-prepEnv/hit-oslab-qiuyu/oslab/linux-0.11make出现tools/build boot/bootsect boot/setuptools/kernelImage表示编译成功。3.4 运行cd0-prepEnv/hit-oslab-qiuyu/oslab ./run运行成功会出现如下图下面我们来修改下代码验证下是否可以生效vim linux-0.11/init/main.c搜索找到Free的打印在后面加上printf(This my hello world!\n\r);保存退出后进行makerun如下图3.5 其他进行run之后会弹出一个运行的窗口这个窗口就是虚拟机bochs跟上面vitualbox一样的功能。怎么使用bochs可以查看run这个脚本vim run可以看到$OSLAB_PATH/bochs/bochs-gdb-q-f$OSLAB_PATH/bochs/bochsrc.bxrcvim bochs/bochsrc.bxrc可以看到floppya:1_44$OSLAB_PATH/linux-0.11/Image,statusinserted运行了我们编译出来的内核。具体bochs的用法调试的时候再进行说明。后记是不是很有成就感自己运行起来了一个linux系统内核学习已经为你敞开推荐两本书辅助学习《Linux内核设计的艺术》新设计团队 《Linux内核0.11完全注释》赵炯linux0.11学习系列后续会陆续更新纯干货分享无广告不打赏。欢迎转载欢迎评论交流“那路谈OS与SoC嵌入式软件”欢迎关注个人文章汇总https://thatway1989.github.io

更多文章