很早之前就想写一篇文章总结一下Linux Kernel开发的相关资料,项目的原因,再加上家里的一些事情,一直没能找到闲暇,今天终于有些时间,希望可以完成这篇文章吧。首先需要说明的是不是所有的人都需要搞内核开发,因为据笔者了解,大部分的软件工程师的工作都在用户态开发,学习内核开发事倍功半,没什么实际意义,另外,初学编程的人也不太适合搞内核开发,因为信息量相对比较大,而且枯燥晦涩,很容易让初学者还没有入门,就已经放弃了,再有就是不想投入时间,总是试图走捷径的,内核开发可能也不适合你,因为必要的练习和资料学习可能是必须的。
那么我们再来谈谈什么样的人可能需要学习Linux内核开发,
1. 从事相关的Linux Kernel开发工作,可能不得不学
2. 有无尽的好奇心,闲的蛋疼, 就想刨根问底
3. 想为开源社区做贡献
Linux kernel开发的资料确实都比较晦涩,而且一般来说篇幅不短,一般来说仅靠看书来学习是不够的,读书的同时最好可以git clone一份linux源代码,对照练习,事半功倍。我的推荐学习顺序是 LKD-> ULK->LDD->ULNI->ULVMM, 另外学完这些内核的实现,如果可以对照用户态的使用加以巩固学习,效果更佳,推荐LSP。LKD业内大牛robert love的扛鼎之作,篇幅不长,却对内核开发的重点内容提纲挈领,实属不易。接下来是ULK,经典中的经典,读起来稍显晦涩,每读一次,都有新的收获,虽然书有些老了,没有跟进最新的Linux版本,但是概念学习足矣,LDD实战性很强,适合边学边做,加深概念的理解,ULNI是Linux网络方面的专著,ULVMM是Linux虚拟内存方面的专著,相对于各自的专题都有更加深入的剖析。至于LSP,也是出自于robert love,讲解细致到位,毫无拖沓之感,读起来十分舒服,顺畅。