产业气象站|第一本龙芯平台的Linux内核书来了,十年磨一剑( 二 )


由于Linux是一体化内核操作系统 , 因此设备驱动也放在内核层实现 。 设备驱动所涵盖的范围非常广泛 , 本书不可能面面俱到 , 只选取了两种常用的典型设备驱动——Radeon显卡与E1000E网卡 , 来做举例性的原理说明 。
Linux内核博大精深 , 本书虽然洋洋洒洒几百页 , 然而在两千多万行源代码实不过是沧海一粟 。 虽然我试图让内容覆盖更加全面 , 但也只是涉及了内核启动、异常中断、内存管理、进程管理、设备驱动和电源管理等几个常见话题 , 而对于文件系统、网络协议等方面的内容几乎只字未提 。
产业气象站|第一本龙芯平台的Linux内核书来了,十年磨一剑
文章图片
怎样阅读上千万行的源代码?阅读软件源代码是每个开发者的必由之路 , 尤其是内核开发者 。 因为内核开发在很大程度上并不是重新发明轮子 , 而是深入理解并尽量复用现有的内核设计框架 , 然后参照相似的功能模块去添加或改写某项需要的功能 。 在对内核整体框架以及某些子系统融会贯通以后 , 才有可能站在巨人的肩膀上去改进框架本身 , 实现自主创新 。
阅读代码有“广度优先”和“深度优先”两种方式 。 代码好比一棵树 , “广度优先”就是说我们要先找到主干 , 然后搞清楚主干上有几根树枝 , 再去某条感兴趣的树枝上寻找有意义的叶子;而“深度优先”指的是是碰到第一根树枝 , 就赶紧深入进去把所有的叶子给找出来 。 本书建议以广度优先为主 , 但在适当的时候也需要兼顾深度 。 因此 , 本书使用“树形视图”和“链式视图”来解析内核源代码 , 而这也是我以及我的同事在日常工作中常使用的方法 。 树形视图具有广度 , 能够快速理解大型函数的主干;链式视图具有深度 , 能够直观理解重点函数的调用 。
产业气象站|第一本龙芯平台的Linux内核书来了,十年磨一剑
文章图片
(树形视图)
产业气象站|第一本龙芯平台的Linux内核书来了,十年磨一剑
文章图片
(链式视图)
【产业气象站|第一本龙芯平台的Linux内核书来了,十年磨一剑】在很多现有的书籍中 , 都会使用流程图来描述代码逻辑 。 然而 , 流程图虽然直观 , 但是其描述能力有限(尤其是缺乏树形视图的层次化表达能力) , 往往很难精确描述一个函数的执行过程 。 而一个费尽心机画出来的精确的流程图 , 往往又会因为其复杂性而失去了直观的功能 。 并且 , 单靠流程图并不能完全理解源代码 , 而是需要将源代码与流程图两相对照 。
因此 , 本书尽量用精简版的源代码(即树形视图和链式视图)来代替流程图 , 一方面可以快速理解多级函数的复杂调用关系 , 另一方面可以不需要在源代码和流程图之间反复切换 。
本书除了引入树形视图和链式视图 , 在开篇第1章首先介绍了“先观其大略 , 再咬文嚼字”的代码阅读方法 。 具体来说分为四个步骤 , 即“找准入口点”“理清主脉络”“顾名思义看功能”“理解补丁文件” 。
从2015年开始动笔 , 到如今《用“芯”探核:基于龙芯的Linux内核探索解析》一书成型 , 其中的曲折艰辛实在是不足为外人道矣 。 在写书过程中 , 当我试图将一个基本原理向众人阐述明白的时候 , 才发现 , 其实之前自己只是似懂非懂 。 甚至可以说 , 写书最大的受益者是自己 , 因为整个知识体系真正得到了全面的升华 。
谨以此书 , 献给一起为信息产业自主化而奋斗的同仁们 。 也希望此书 , 能给读者带来实质性的收获 。
产业气象站|第一本龙芯平台的Linux内核书来了,十年磨一剑
文章图片
【来源:人民邮电出版社】
声明:转载此文是出于传递更多信息之目的 。 若有来源标注错误或侵犯了您的合法权益 , 请作者持权属证明与本网联系 , 我们将及时更正、删除 , 谢谢 。 邮箱地址:newmedia@xxcb.cn