六年磨一剑,第一本龙芯平台的Linux内核书来了——《用“芯”探核:基于龙芯的Linux内核探求解析》是一本基于龙芯平台,结合源代码来探求和解析Linux-5.x内核的书。
尽管市面上解析Linux内核的精典书籍已有不少,尤其是被称为Linux内核领域的“四库全书”:《Linux内核设计与实现》《Linux设备驱动程序》《深入理解Linux内核》和《Linux内核源代码情境剖析》。
然而,一方面,大多数已有书籍是基于X86或则ARM体系结构的;另一方面,大多数已有书籍基于2.4版本或则2.6版本的Linux内核。
同时,仍然以来,从事龙芯内核开发工作的“标准教程”是《龙芯处理器用户指南》、《MIPS体系结构透视》和《深入理解Linux内核》。但是,《龙芯处理器用户指南》不涉及Linux内核;《MIPS体系结构透视》讲述的是传统的MIPS处理器,离真正的龙芯差别太大;而《深入理解Linux内核》所使用的内核版本又过分陈旧。
为此linux 关机命令,正如中科院估算所研究员张福新在推荐语中说的:“这本基于龙芯平台的内核开发书籍的出版,适逢其时。”
同时,这本书的作者陈华才博士历任广东航天龙梦信息技术有限公司总工工程师,负责龙芯3号处理器的内核开发。他作为Linux内核中MIPS/龙芯3号的Maintainer,向Linux内核官方递交了大量的代码。
02
为何写这本书
我是谁?我就是一个既爱Linux也爱龙芯的开发者。十六年前开始接触Linux内核,十二年前开始接触龙芯笔记本,六年前加入龙芯产业化基地,六年来伴随着龙芯一起成长,现在已成为Linux内核中龙芯3号的Maintainer。
有人说,“干一行,爱一行”,但我认为“爱一行,干一行”更加符合可持续发展。龙芯和Linux都是我所爱,研究上去动力爆棚。仍然以来,我在阅读内核源代码时都有做笔记的习惯,因为人脑虽然容量有限,在知识体系不断扩张的过程中,笔记是必不可少的。
我做笔记的方式以“代码摘录+适度精简+注释解析”为主,并且随着时间的发展和内核版本的升级,笔记总数越来越大,不同版本中的同名函数也早已显得面目全非。于是红旗linux安装,我常常不得不在笔记中记录源代码的多个版本,但是在代码片断的开始处加上版本标示。
其实说笔记主要是给自己看的,但正如热力学第二定律所宣示的一样,笔记的可读性早已不可防止地越来越差了(熵值太大)。
于是乎,便萌生了整理笔记并编撰成书的看法。最初的看法成形于2013~2014年,但真正开始动笔的时侯是2015年。在写书的过程中,解析方式尽量保留了笔记中精简代码的特征,但在内核版本的选择上全部采用了最新的LTS版本(常年维护稳定版本),即5.4.x版本。
03
选择了什么内容
全书以龙芯平台为重点,主要解析Linux内核源代码。首先对龙芯处理器和Linux内核进行概括性的介绍,并引入一种快速而有效的代码阅读方式,即“先观其大略,再咬文嚼字”。
操作系统是整个计算机的管理者,其本质上是一个小型软件平台,沿着程序的执行流程一起前进是自然而然的事情。因而,从Linux内核在龙芯计算机上的启动过程开始研究Linux内核是一个比较好的切入点,借此获得一个对龙芯处理器和Linux内核的宏观印象。
内核是操作系统中最基础、最重要的部份,其三大基本功能分别是中断/异常处理、内存管理、进程管理。这3章内容尽量遵守“从基础到下层”和“广度优先深度其次”的写作原则,更便捷读者依照自己的需求安排阅读次序。
Linux内核支持X86、ARM、MIPS、PowerPC等多种体系结构,但对下层应用提供了基本一致的操作插口。为此,内核的三大基本功能中一部份是体系结构相关的特定内容,一部份是体系结构无关的通用框架。
因为Linux是一体化内核操作系统,因而设备驱动也置于内核层实现。设备驱动所囊括的范围十分广泛,本书不可能面面俱到,只选定了两种常用的典型设备驱动——Radeon主板与E1000E网卡,来做举例性的原理说明。
Linux内核博大精深,本书尽管洋洋洒洒几百页,但是在两千多万行源代码只不过是沧海一粟。其实我企图让内容覆盖愈发全面,但也只是涉及了内核启动、异常中断、内存管理、进程管理、设备驱动和电源管理等几个常见话题,而对于文件系统、网络合同等方面的内容几乎只字未提。
04
如何阅读上千万行的源代码
阅读软件源代码是每位开发者的必由之路,尤其是内核开发者。由于内核开发在很大程度上并不是重新发明轮子,而是深入理解并尽量复用现有的内核设计框架,之后参照相像的功能模块去添加或改写某项须要的功能。在对内核整体框架以及个别子系统融会贯通之后,才有可能站在巨人的右臂起来改进框架本身,实现自主创新。
阅读代码有“广度优先”和“深度优先”两种形式。代码好比一棵树,“广度优先”就是说我们要先找到主干,之后认清楚主干上有几根枝条,再去某条感兴趣的树根上找寻有意义的叶子;而“深度优先”指的是是遇到第一根枝条,就赶忙深入进去把所有的叶子给找下来。
本书建议以广度优先为主,但在适当的时侯也须要兼具深度。为此,本书使用“树形视图”和“链式视图”来解析内核源代码,而这也是我以及我的朋友在日常工作中常使用的方式。树状视图具有广度,才能快速理解小型函数的主干;链式视图具有深度linux内核24版源代码分析大全(清晰版),才能直观理解重点函数的调用。
(树状视图)
(链式视图)
在好多现有的书籍中,就会使用流程图来描述代码逻辑。但是,流程图其实直观,而且其描述能力有限(尤其是缺少树状视图的层次化抒发能力),常常很难精确描述一个函数的执行过程。
而一个费尽心机画下来的精确的流程图,常常又会由于其复杂性而丧失了直观的功能。而且,单靠流程图并不能完全理解源代码,而是须要将源代码与流程图两相对照。
因而,本书尽量用精简版的源代码(即树状视图和链式视图)来取代流程图,一方面可以快速理解多级函数的复杂调用关系,另一方面可以不须要在源代码和流程图之间反复切换。
本书不仅引入树状视图和链式视图linux内核24版源代码分析大全(清晰版),在开篇第1章首先介绍了“先观其大略,再咬文嚼字”的代码阅读技巧。具体来说分为四个步骤,即“找准入口点”“理清主脉络”“顾名思义看功能”“理解补丁文件”。
从2015年开始动笔,到现在《用“芯”探核:基于龙芯的Linux内核探求解析》一书成形,其中的坎坷艰难实在是不足为外人道矣。
在写书过程中,当我企图将一个基本原理向众人论述明白的时侯,才发觉,虽然之前自己只是似懂非懂。甚至可以说,写书最大的获益者是自己,由于整个知识体系真正得到了全面的升华。
谨借此书,送给一起为信息产业自主化而拼搏的同仁们。也希望此书,能给读者带来实质性的收获。
用“芯”探核基于龙芯的Linux内核探求解析
¥59
订购