ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Linux 0.12 内核学习笔记专栏开篇语

Linux 0.12 内核学习笔记专栏开篇语 专栏导航上一篇无回到目录下一篇无本节内容关于 Linux 0.12 内核这是一款早期内核发布于 1992 年 1 月 15 日作者是出生于芬兰的林纳斯·本纳第克特·托瓦兹Linus Benedict Torvalds现在他是美国国籍。我们通常称他为林纳斯·托瓦茨或者林纳斯或者托瓦茨或者 Linus 。之所以选择解读这个版本的内核是因为在国内已经有计算机前辈赵炯先生出书讲解了这个版本的内核。所以我在尝试着解读它的时候会有较多的参考。如果让我去解读 0.95、0.96 版内核则我此刻是做不到的。一. 学习 Linux 0.12 内核的好处学习这个版本的内核是很有好处的。一版本较早体量较小这个版本的内核它是早期版本体量还比较小它的总代码量不超过 2 万行。虽说体量小但是呢Linux 内核的基本结构它算是具备了。学好这款内核更有利于了解 Linux 内核的总体逻辑与架构。如果你没有源码阅读的经验直接去学习内核原理教材那么很多的代码细节你是不了解的。那么你对内核的理解可能就会有着隔靴搔痒的感觉。如果你直接从 2.6、3.x、4.x、5.x 等等的高版本内核开始阅读则一下子就进入了一片汪洋大海之中假定你刚刚学完 C 语言、汇编语言基础语法那么直接阅读这样的汪洋大海式的代码我觉得你会很难坚持下来。从一个代码量相对小一些结构相对简单一些的东西开始学习逐渐地过渡到体量较大的内核循序渐进我认为是好的。二有助于理解操作系统、微机接口等等的学科某些大学的计算机专业会去开设操作系统课程会去开设微机原理与接口科目。在操作系统原理里面肯定会去讲解中断机制。而在微机原理与接口课程里面会去讲解 8259A 芯片的编程逻辑讲解 Intel 8253/8254、8255、8237 等等的早期芯片的驱动编程。请问对于这些个驱动编程内容你要如何来理解它们如何来实践它们直接看教材的内容有可能那些个内容会让你觉得根本就没啥用。可是当你学习了 Linux 0.12 内核那么里面就有 8259A 芯片的驱动代码也有 DMA 的驱动编程。8237A便是 DMA 芯片的一种。8253/8254这种定时器、计数器芯片也有在 Linux 0.12 内核里面有体现因为设置时钟那是内核运行的重要环节。总之在 Linux 0.12 内核里面普通的计算机专业的学生容易觉得困惑和无用的知识在这里会串起来。三提升系统底层的编程能力内核代码不是云计算、大数据它是属于系统底层的知识是操作系统中的核心部分。学习好内核知识有助于培养系统底层的编程能力。Linux 内核版本有很多它汇集着诸多的计算机大佬的智慧在这种内核代码的学习过程中在培养系统底层编程能力的过程中你自身的编程能力会得到较大的提升。Linux 0.12 内核会为你学习 Linux 内核提供一个很棒的入门机会。具体来说阅读 Linux 0.12 内核源码能够让你在以下几个方面获得实实在在的锻炼深入理解 C 语言与汇编的配合内核代码中大量使用内联汇编、指针操作和位运算这些内容能让你真正把课本上的语法知识用到实处而不是停留在写练习题的水平。掌握内存管理与地址映射通过阅读分页、分段机制的实现你会对虚拟地址、物理地址、页表这些概念建立起直观的认识这对理解现代操作系统的运行方式至关重要。熟悉中断与异常处理流程内核中中断处理程序的编写方式能帮助你理解硬件与软件之间是如何协作的这种底层视角是普通应用开发很难接触到的。提升代码阅读与调试能力面对没有注释、逻辑复杂的源码你需要学会断点定位、逐步追踪、对比分析这些能力对任何方向的程序员都是宝贵的财富。当你把 Linux 0.12 内核的启动流程、进程调度、内存管理、文件系统这些核心模块一一读通之后你会发现自己在编程方面是有不错的成长的。这种从底层建立起来的编程能力对你写业务代码也是很有帮助的。二. 本专栏的特色Linux 0.12 内核已经有赵炯先生在讲解了而且赵炯先生的教材也受到了欧美的计算机界的重视。因为通过学习赵炯先生的教材可以建立起初步的内核知识这对于培养内核人才是很有帮助的。既然赵炯先生已经写了很棒的教材并且都已经获得了国际性的认可那么我的专栏又有何写作的必要呢一贴近于初学者的视角目前我在内核学习方面我本身的程度并不是很高。阅读了几次 Linux 0.12 内核以后短期内我觉得很难在 Linux 0.12 内核方面有着重大的提升所以我转而去学习 0.95 版内核并且打算在以后去学习 0.96 版内核0.99 版内核直到学习完 1.0 版内核具备 Linux 内核的必要基础。我本身的程度不高因此我在讲解的时候我想应该会较为贴近初学者的程度。二与大家一起编译内核在赵炯先生的教材里面他虽有讲解在现如今的操作系统中如何来编译 0.12 内核但是我当初学习的时候我是没有学会的。我估计你去照着编译 0.12 内核有可能你也编译不出来。这是因为在 Linux 系统里面搭建开发环境它会有着较为复杂的工具链和依赖链。这些个东西如果你只是初学者可能你会难以将其搭建出来。当然了如果你本身就是大神了搭建这种环境是没啥问题的。但是初学者要怎么办在我的专栏里我除了讲解 Linux 0.12 内核之外更重要的我会和大家一起编译 Linux 0.12 内核。我给大家演示一下我已经编译出来的一个 Linux 0.12 内核。Linux 0.12内核演示在本专栏中我目前的打算是从头开始和大家一起编译 Linux 0.12 内核这对我来讲算是一个重要的挑战。因为我是在 2023 年的 10 月 20 几号编译出了 Linux 0.12 内核的。演示视频中的小内核是在这之后添加了一点功能而形成的但是与 2023 年 10 月 20 几号编译出来的东西大差不差。由于 2023 年 10 月份距离现在有两三年了我也有很久没咋去碰内核编译了因此好多的东西我也印象不深了。当初编译 0.12 内核也算是费了一番波折才编译成功的。我是在 2018 年开始学的汇编语言和赵炯的 0.12 内核教材到了 2023 年的 10 月 20 几号才将 Linux 0.12 内核给编译出来。在编译成功之前我也有几次想要将 0.12 内核给编译出来。结果呢多次失败。好在终于在 2023 年的 10 月 20 几号将其编译出来了。在编译成功的那一次当时我是通宵编译的。在编译之时我还遇到过几个 bug 。那种 bug当时我觉得让人不知所措让我有点失魂落魄。不过凭着我的蒙选择题的瞎蒙的办法很幸运地算是解决了遇到的几个 bug 。最终呢编译出来了。当编译出来的时候由于是通宵完成的当时似乎我是感觉到了一种心绞痛与濒临猝死的感觉猛地吸了一口气吸完了气以后觉得似乎胸口有点痛有一种呼吸抽筋的感觉。不知道那是不是心绞痛是不是濒临猝死的人会有的感觉。反正我觉得这种通宵工作、高强度的脑力思考与压力若是经常进行的话没多久我肯定就会真的猝死的。后来在 2024 年的 6 月 14 号上午十点我又是通过通宵工作写出了我自己的第一款 CPU它是一款简易的、仿真运行的 CPU 。当整个的 CPU 代码调试通过以后我再一次有了那种猛吸一口气、呼吸抽筋与胸口痛、濒临猝死的感觉。当初我也是好不容易才将 Linux 0.12 内核给编译成功的。后来我有大量的时间里都是没咋去碰内核编译的。所以现在让我在教程里和大家一起编译内核这对我来讲也是一个有挑战性的任务。我希望我挑战成功。你愿意和我一起来走这个冒险旅程吗三编译工具链的完整展示接触过的一些个教程它们对于编译工具链的安装配置都是讲得不够详细读者跟着去做容易编译不出来。估计可能会有一部分学习者因为编译工具链未能安装好而放弃学习吧。在我这里我会将编译工具链的安装和配置方法完整地向大家讲解的。我所提供的工具链既不是像赵炯先生的 0.12 内核教材中的 Fedora 环境也不是郑刚的《操作系统真象还原》、于渊的《自己动手写操作系统》和田宇的《一个 64 位操作系统的设计与实现》中的 CentOS 环境。之所以不采用 CentOS 环境是因为我觉得CentOS 对于初学者并不友好它的软件安装比较复杂。相比之下乌班图系统的软件安装就好很多了。很多的软件安装用【sudo apt install】命令就解决了实在是方便了好多。所以在我的专栏里我打算采用乌班图系统来编译 0.12 内核。除了乌班图系统之外我们也会需要用来安装乌班图系统的 Vmware 虚拟机还需要在乌班图系统里面安装 Bochs 模拟器、QEMU 模拟器也需要安装其余的一些个软件。这套工具软件安装起来都不会太难。我会尽量细讲我也相信你能够做到的。我也会将自己配置好的适配 Vmware 虚拟机的乌班图系统镜像提供给大家。以便说即使你本人没有安装好也可以使用我配置好的里面的各色软件都给安装好了的虚拟机系统镜像来学习本专栏的教程也可以用它来学习其余的操作系统小内核的教程。当然我会让你在学习我的专栏的时候就自己学会如何去安装和配置这一系列的工具链不会让你依赖于我提供的系统镜像的。之所以提供我的镜像也算是一种附带与方便吧。万一你在网吧学习或者是去朋友家学习而你又未对自己已配置好的开发环境予以备份和上传到自己的网盘里你还可以临时用我的虚拟机系统镜像来进行学习与开发。四深入浅出的讲解风格我平时说话时会有结巴的情形。写文章时会有重复啰嗦的情况。但是呢大体上我的教程文章的语言特点会带有深入浅出的特点的。王婆卖瓜自卖自夸。我这里也提前来一个自夸。虽说这是自夸但是我相信随着你阅读我的专栏的经验值的累积你会体会到我的语言的深入浅出的你会认同这一点的。关于我的文章的深入浅出这一点CSDN 助手是认同的。至于你你一定会感受到这一点的。所谓的深入浅出它必须要能够帮助读者破解坑点。如果写出来的教程很容易让人卡在某个位置上让人到了那里就难以继续往下学习从而劝退相当一部分的读者那么这就绝不是深入浅出。我的专栏会力图避免这一点。如果觉得哪里有问题你可以及时提出来我会尽量修改文章尽量地把许多大家觉得讲得不明白的地方给讲好。五包含一个 SoundBlaster 驱动SoundBlaster是早些年的一种声卡。有了它就可以让内核播放音乐了。这一块的内容我觉得会是一个有些复杂的东西吧。因为这里会涉及 DMA 的设置会涉及 SoundBlaster 声卡的各种端口的细节。同时它也会是一个有挑战性的部分。它也会很有意思的。我们会用它来播放一段流行的音乐或者你自己喜欢的其他音乐。不过暂时地我们做不到让你播放 mp3 音乐我会在教程里演示 Adobe Audition 的用法以便将下载的 mp3 音乐转换为符合教程的格式要求的 wav 音乐文件。然后呢我们的内核所播放的便会是这种 wav 音乐。希望你能够喜欢这部分的内容啊。六国学知识的有机融入我是从 2011 年开始学习国学知识的。在国学知识的学习中我也收获了很多。那么在写作本专栏的时候我应该会在适当的时机穿插着一些个国学知识。比如《孙子兵法》、《周易》、《中庸》、《论语》、《史记》等等。国学典籍充满着很多的有趣的东西。如果真的能够沉下心来阅读、领会与探究很多同学应该都是会对它感兴趣的。如果你能够感受到乐趣那么我相信你会愿意主动学习的而不是被外部压力催逼着去学习。国学知识对于计算机知识的学习有帮助吗我认为是有帮助的。有何帮助到时候再说吧。我会让你感受到乐趣和帮助的。三. 本专栏的写作目的接下来我来说一说我来写作本专栏的目的。一培养计算机系统底层人才讲解 Linux 内核主要地是希望培养系统底层人才以利于解决操作系统这一领域的卡脖子难题。所谓系统底层人才指的是那些能够深入理解计算机硬件与软件之间协作机制、能够读懂并修改操作系统内核代码、能够在系统层面进行性能调优与问题排查的软件工程师。二建立自己的团队我希望打造自己的一些个精品专栏来汇集一批程序员形成一支队伍以便在将来去从事操作系统的研发活动。怎么来汇集起这样的队伍我需要尽力地写好我的专栏文章写好教程然后呢获得你的内心的认同然后呢你愿意和我一起来写代码。问题是你会认同吗我拿着这样的问题问过 deepseek 。deepseek 说在北京各大211 高校相比地方的 211 高校会具备政策优势与政策资源学生们会更加地倾向于国企、考公务员进大企业像我这种名不见经传的小角色认同的估计不多。但是也会有一部分学习着我的教程一路跟下来的人会有一部分人真心认同我的教程认同我这个人。我希望你是那个喜欢我、认同我、愿意和我一起写代码的人。即使学完了相关的教程你有着其他的工作打算那么我若是培养出了一些个系统底层的程序员那也是好的。统信 UOS、麒麟系统等等的地方也都需要人才吧。三为了钱钱钱钱重要的话说三遍。赚钱养家给自己花给父母花给配偶和子女花。我希望自己能够赚到钱我也希望看到你通过学习内核知识提升编程能力而能够赚到更多的钱。四为了快乐我觉得如果能够写出来一个好的教程能够被人认可说这是一个深入浅出、有趣的教程那么我也会很有成就感会很快乐的。我希望你是那个能够带给我这种快乐的人。结束语本节内容大体上我是想到哪儿就写到哪儿。写来写去我自己也写得迷迷糊糊写得困了。希望你能够喜欢我的专栏也希望你能够学有所获。专栏导航上一篇无回到目录下一篇无
返回列表