从事技术工作二十年,与 Linux 的缘分断断续续,回首走过的每一步,心中感慨颇多。本文旨在梳理自己踏入 Linux 内核领域的来时路,把有效的学习方法和图书整理成文,希望得到前辈同行的指点,也为后来者提供一份入门参考与引路灯塔。
一、学习 Linux 内核,C 语言是地基
说到C 语言入门,绕不开谭浩强老师的那本《C 程序设计》。这本书或许没有其他 C 语言书籍那般声名显赫,但个人认为,它是最易上手的一本 C语言入门读物。在校期间,学习以书面编程为主,积累的多是理论知识;真正将 C 语言融会贯通,还需要在实际项目中不断历练、打磨。
有了初步的 C 语言基础之后,在实践中难免遇到各种 bug 与缺陷,对语言特性的理解也未必深透。于是,深入研究 C 语言的进阶知识便提上了日程——而指针,正是 C 语言的精髓与关键所在。关于《C 和指针》(Kenneth A. Reek 著),已有书友写出了相当客观精彩的书评。此处便不再赘述,直接拿来主义。参考书评https://book.douban.com/review/14652709/
读完《C 和指针》之后, C 语言基础在普通程序员的层级中已然相当扎实。若对技术深度和代码效率有更高追求,不妨进一步钻研编译、链接等底层知识,这便来到了《C专家编程》的领地。参考书评 https://www.zhihu.com/tardis/zm/art/526464859。
对于有意从事嵌入式开发的朋友,还需要对硬件与体系结构建立起区别于学校课程的实用性认知。推荐阅读:《Programming Embedded Systems in C and C++》了解这些知识,对于学习 Linux和其他系统软件同样大有裨益。参考书评https://computerbooks.cn/book/4153。
二、走进 Linux 内核
有了上述 C 语言基础之后(无需读完所有 C 语言书籍,只要具备一定的编程能力与实践经验,便可开始阅读这本经典著作),《深入理解 Linux 内核》堪称 Linux 领域的必读经典,众多书评已有高度评价,此处不再赘述。
我个人偏向先从理论出发,因此率先拜读了此书。然而其前半部分涉及大量 x86 体系结构知识,需要读者对内存寻址、进程等概念有相当深入的理解。遥想 2006 年初读此书时,着实感到晦涩难啃。幸好后来遇到了赵炯博士的《Linux内核完全剖析》,得以有效弥补这块短板。至于后半部分,除内存管理章节之外,其余各章均属子系统模块,可结合自身专注的细分领域选择性学习。值得一提的是,偏好先动手实践的朋友,不妨考虑将《Linux 设备驱动》与项目实践相结合,边读边练,这样能更快建立起对 Linux 内核、尤其是驱动层的直观认知。
赵炯博士的这本书《Linux内核完全剖析》,从Linux 内核的组成结构出发,对内核编程中涉及的汇编语言与 x86 体系结构做出了更为通俗易懂的诠释。如果读者对 Linux 启动代码及汇编相关代码感兴趣,这本书是极佳的参考;对于从事嵌入式开发、涉及 bootloader 等内容的工程师而言,更有着不可忽视的借鉴价值。
三、纵览全局:《深入 Linux 内核架构》

在反复研读《深入理解Linux 内核》的过程中,我始终有一种感觉:每个章节读来似乎都能理解,却总觉得少了些什么,宛如盲人摸象。直到有幸结识《深入Linux 内核架构》一书——2008 年时尚为英文版,但读来如他乡遇知音,内核的全貌与各子系统的整体图景一下子豁然开朗。
四、不可绕过的底层:汇编与体系结构
在阅读Linux 代码与内核图书的过程中,大量汇编代码与相关概念是绕不开的门槛。这本汇编语言专著,条理清晰,由浅入深,通俗易懂,可作为学习与查阅汇编知识的理想参考书。
五、调试是必修课
只要写Linux 代码,就免不了与各种 bug 和问题打交道。这本关于 Linux调试的书,涵盖了用户程序的 GDB 调试方法,以及内核各类 crash 的排查手段,是日常开发中相当实用的工具书。
六、深入细分领域:Linux 网络
有了上述基础之后,若对某一领域有着浓厚的兴趣或专长,便可进一步深耕。以网络方向为例,推荐以下面的顺序阅读如下图书,同时在项目中实践。
《深入理解Linux 网络技术内幕》这也是 Linux 内核领域网络模块的高评价书籍之一,对内核 device 系统到 bridge、二层、三层有着系统而全面的概述,在代码与原理层面有着深刻的诠释。
如果认为《深入理解Linux 网络技术内幕》过于细节和内容比较沉重,可以考虑参考《精通Linux 内核网络》一起阅读。
《Linux TCP/IP 架构与代码分析》将代码流程与代码解析做了恰到好处的融合。在梳理子模块架构的基础上逐步深入讲解 TCP/IP 代码实现,从宏观架构到具体细节,为 Linux TCP/IP 代码学习提供了极具价值的参考路径。如果在学习Linux TCP/IP 代码上遇到协议上面的困难,可以参考读下《TCP/IP 协议族》。个人认为这本书相比于经典的《TCP/IP 详解 卷1》要更通俗详细易于理解。
如果看了TCP/IP相关的图书,对于网络还是有一种模糊的距离感,可以考虑读一读《数据与通信网络》。这本书从物理层、链路层到网络层、传输层,帮助读者建立俯瞰网络全景的视角。
【原创声明】
本文为原创文章,版权归作者所有。
未经授权,任何单位或个人不得以任何方式转载、摘编或以其他任何形式使用本文全部或部分内容。如需转载,请务必联系作者获得授权,并在转载时注明出处及作者信息。
【免责声明】
- 本文所涉及的技术内容、观点及经验分享,均基于作者个人实践,仅供学习参考,不构成任何投资、职业或技术决策建议。作者不对因参考本文内容而造成的任何直接或间接损失承担责任。
- 本文部分素材来源于互联网公开信息,仅供交流学习之用,版权归原作者或原发布平台所有,如有侵权请联系删除。