虽然LKD这本书非常适合初学者学习Linux内核,但要读懂它,还是需要一些基础知识的。如果仅是了解一些Linux命令,以及一些计算机的基本知识,学习这本书时也是会很吃力的。接下来要分享我个人认为需要的基础知识,以及自己的学习路线。
C语言:在Linux内核中几乎所有的代码是用C写的,因此想要读懂内核,C语言是必须要掌握的。C语言入门书籍,当然是C语言之父写的“The C Programming Language”(C语言程序设计)。除了读书之外,学习C语言最有效的方式是编写和调试代码。只有通过不断的编写和调试,才能体会C语言的精髓。阅读完之后,可以学习如下几本书:C和指针、C陷阱与缺陷与C专家编程。这几本书读完就可以在阅读Linux内核代码时不会有“语言”上的障碍。
数据结构:在写代码时,数据结构是非常重要的。对于数据结构,个人理解是:如何通过代码在内存中构建一个事物的模型。对于数据结构,我的知识掌握的不是非常全面。并且对数据结构方面的书也读的不多,之后还需要继续学习。个人认为严蔚敏写的数据结构可以作为入门的书籍。在学习数据结构过程中,通过图形进行表示是非常有助于理解。例如通过如下图形表示,可以清楚知道如何定义双向链表(循环),以及如何对双向链表进行一些添加和删除的操作。
操作系统:如果学习过操作系统这门课,读LKD和内核时当然会事半功倍。但如果没有学过,建议可以通过同步读LKD和其它介绍操作系统的书籍,来进行学习。当时我选择的操作系统入门书籍是“Operating Systems Internals and Design Principles”(操作系统——精髓与设计原理)。虽然通信是我的专业,但当时选了计算机辅修课以及操作系统选修课,可以说学了两次。个人认为学习操作系统时,肯定是需要装一个Linux系统。一方面Linux是开源的,可以通过源码来学习;另外一方面许多操作系统需要的实践在Linux下是很方便实现的。
PS:之前一直是在图书管借书学习linux内核,最近下定决心要认真研读Linux内核,所以就…