Linux 系统在加载到内存运行前,系统要运行一段引导加载程序(如电脑中的 BIOS),用于将内核加
载到内存。当时的想法是先学引导加载程序,后学 Linux 内核,掌握整个系统的运作。嵌入式系统中最常
用的引导加载程序是 U-boot,我花了几乎将近一年的时间学习 U-boot,最终还是没有学完。最后我还是放
弃了,以我的能力不可能求全,还是直接学 Linux 内核吧,能把内核学好就不错了。
Linux 内核的书买了一堆,最开始看的是《深入 Linux 内核架构》,我天真的以为直接学习内核源代
码就能直接成为专家了,结果是书基本上看不懂。后来大概是到了 2016、2017 年的时候,反反复复地看
书,感觉有点眉目了,开始阅读内核源代码。刚开始,内核数据结构之间错综复杂的关系,让我非常的迷
茫,甚至买了一个笔记本来专门画出数据结构之间的关系。
随着学习的深入,我产生了写笔记的想法,毕竟好记性不如烂笔头,而且内核方方面面的内容庞杂,
如果不做记录,过几天自己都忘了,又等于白学。于是,本书的雏形就在我脑子里酝酿,最终 2017 年 7
月的时候我决定开设微信公众号,把学习的心得和经验跟大家一起分享,一起学习、进步。在笔记的撰写
过程中,不断地促进了我对内核的学习,逼着自己去弄清内核的组织结构和工作机制。经过几年的努力,
现在终于感觉有种拨云见日的感觉,内核的架构在脑海里也清晰了起来。曾经也迷茫、困惑过,怀疑过写
作笔记的意义,甚至想到过放弃,最终还是庆幸在众多关注微友的支持下坚持了下来,另外也要非常感谢
家人对我的支持,坚持就是胜利。
近几年在学习 Linux 内核的过程中,我还在关注国产处理器、操作系统方面的信息,操作系统离不开
处理器。目前,电脑系统基本是英特尔和微软的天下,手机则是 ARM 和安卓、IOS 的天下,没有一样是
国产的,这给我们的信息安全带来了非常大的隐患,加上 2018 年的中兴事件,更是坚定了我们发展自主
处理器和操作系统的决心。因此我又抛弃了 ARM 的学习,选择了国产龙芯处理器(MIPS 架构),支持国
产才是正道,虽然个人的能力有限,但也要力所能及地支持一下。
回顾几年的内核学习经历,最开始是好奇,觉得很神奇,希望搞明白内核是如何工作的;接下来是困
惑,真正开始接触内核了就不知道从何处下手,不知道内核是什么结构,如何工作,各组成部分、数据结
构是什么关系;后面是欣喜,感觉掌握点眉目了,可以顺藤摸瓜了;最后是淡定和从容,理解了内核架构,
整个内核在脑海里有一个整体的架构,可以去思考和研究各部分是怎么工作的,相互关系是什么,可以去
研究某个函数做了些什么工作。学习内核最终的目的是将内核移植到目标系统中,应用内核,我正在为此
努力。
我看了很多关于内核方面的书,国外讲内核源代码的书虽然写得很好,如《深入 Linux 内核架构》等,
但讲解的内核版本太低,多是 2.6.x 版本,现在内核版本都更新到 5.0 了,而且线条比较粗,个人认为并不
是很适合初学者。国内讲内核方面的书,多是讲驱动的移植,个人觉得讲内核都讲的不够深入,不够全面,
只知然不知其所以然。虽然网上也有很多学习资料,但质量和系统性就不敢恭维了。所以我决定把笔记写
成一本适合初学者、系统性讲解内核(源代码)的书。
内核代码量巨大,各部分内容庞杂,关系错综复杂,新手如何快速入门呢?内核说到底是编译链接成
的一个单一的可执行目标文件,系统启动时被加载到内存中开始运行,内核启动完成后负责为用户进程提
供服务。内核更多的是充当一个资源管理器的功能,通过某些数据结构管理和调配系统各种软、硬件资源。
学习内核要先了解内核的组织架构,各功能部件的主要功能和相互关系,避免一开始就迷茫在代码细节中。
本书在讲解内核的过程中,尽量地在章节的开始就建立本部分的组织架构,让读者对本部分的功能和组织
结构有整体的认识,再顺着组织架构去阅读和理解内核源代码。
本书主要从内核组织架构及源代码讲解内核启动、内存管理、进程管理、文件系统、驱动程序、网络
等各功能组件的工作机理,以 MIPS32 架构为基础介绍内核中特定于处理器架构的代码实现,并以龙芯 1B
处理器为基础介绍 Linux 内核移植的相关知识。
作者在 Windows 系统中采用 CodeLite 集 成 开 发 环 境 阅 读 源 代 码 。 CodeLite 是一款开源,支持
Windows、Linux 等操作系统的集成开发环境。移植内核前,读者需要在您的电脑上安装上 Linux 发行版操
评论0
最新资源