我把我学习kernel编程的过程介绍给你们,但愿你们有个参考。linux
学习kernel编程须要阅读大量的kernel方面的书籍,在此我列举一下我读过的kernel书籍(按时间前后顺序),并给一些建议。shell
1. LDDv3(Linux Device Driver Program)linux设备驱动编程编程
2. Linux内核情景分析,上,下网络
3. ULK(Understanding Linux Kernel)v2, v3学习
4. Linux 0.11内核彻底注释spa
5. ULN(Understanding Linux Networking) 设计
以上是我阅读过的算是大部头的Linux Kernel编程方面的书籍。固然若是你刚开始学习Linux编程,并但愿向底层发展,那么我建议你先阅读:内存
1. C语言程序设计同步
2. APUE(Advanced Programming in the UNIX Environment)Unix高级环境编程网络编程
3. Unix网络编程,卷一,卷二
4. TCP/IP详解,卷1、卷2、卷三
5. C语言标准与实现(选读,强烈推荐你读一下,读完后会对C语言有很深刻的了解)
初学Linux,读完以上这3类书籍,你对Linux系统编程就会至关的了解了,建议还要至少读一本shell编程方面的书,缘由就不用说了吧。
好如今你有了必定的系统知识和C语言编程技能了,那么来讲说你怎么读kernel的书籍。
上面列出的5种书籍我都读过,建议你这样阅读。
首先读LDDv3,读到内存映射部分,这时好多概念你不容易理解,能够等之后精度,到这之后能够先马虎的读一遍。
而后读Linux内核情景分析,上,下,这两本书是我见过的最厚的书了,必定要坚持读下来,讲述的2.4内核的情景。(阅读时最好把代码打开,讲到哪你看到哪,我是这样的)
再后能够读ULK v2或v3,ULKv2讲的是2.4的内核,ULKv3讲的是2.6的内核,直接读v3没有问题,要尽可能的理解所有内容。
这时若是以上你都读完了,那么能够把LDDv3内存映射开始章节和日后的章节重读一遍,你会彻底理解了。
关于0.11内核彻底注释,这本书你能够如今读了,这本主要是锻炼你的基本编程知识,包括对一些ATT汇编也有了一些认识,对你看当今最新的内核原理方面没有什么帮助。
但也推荐你看看,这本书会告诉你诸如printf是怎么实现的,仍是颇有意思的。(要打开代码同步阅读,最好)
ULN是彻底讲述的Linux网络子系统,当你对Linux Kernel编程有必定基础和概念了能够开始阅读了,我是最后阅读的,你会彻底在概念上了解Linux网络子系统的实现。
读了那么多的书,该行万里路了,写代码来实践是很是重要的,没有目标就本身想象一个,例如,读完怎样编写网络驱动后(LDD中),能够本身写个虚拟网卡,当你ping你虚拟网卡地址时,
你在驱动中把IP地址对调,并修改协议为ICMP回显,而后再发回给kernel,这样ping命令就会有回显,好像你真ping到了那个地址,实际上是你本身在kernel中作了点手脚。
有实际的工做目标是最好的了,多实践仍是硬道理。祝你成功!