其实我也是过来人,深知没有接触过内核开发的同志在无人指导的情况下独自学习Linux设备驱动的感受。都是买书,看BLOG,自已调个小程序,很难有同志能够坚持下去,市面上的书籍也不是说写的不好,只是大家的基础都不一样,另外我感觉有一点就是那些书籍在看了之后始终感觉有一层捅不破的纸,看书的时候感觉啥都会,书一关,好像又啥都不懂了。其实我进书店看过市面上的书,很少有讲内核的框架的,不论是国内的还是国外的,要么框架讲的很抽象,离实际的代码距离太远,看书的人难以把两者统一起来,要么就纯粹是源码分析,忽略框架。
本人接触Linux其实时间也不久,从接触Linux内核至今也不过三年左右,并且大部分时间还是在做应用。但是凭着个人的
兴趣爱好,一直都坚持抽时间学习内核,属于入门级的学习者,本人开发或修改过部分的设备驱动及网络协议栈,也算是略有心得吧。我非常愿意把我觉得最重要最难懂的部分与大家一起分享,但是时隔三年,入门时的一些难题对我来说已经不是难题了,在某种程度上可能会略去一些我现在认为不重要的但对入门来说又很重要的东西,这个就只能靠网友一起帮我来查漏补缺了。
首先我说一下要开始设备驱动开发所具备的基本能力:
1. 会C语言,并且基础还不错,能跟踪调试分析C代码。
2. 有一定的Linux使用基础。
3. 能写一个hellword的驱动模块。
4. 偶尔需要一点汇编(就算不会,对我们分析Linux内核也不会有太大压力)
如果以上四点中的前三点你不具备,那请你先把这三点学会再看本系列的文章,否则会很难受的。
再说下工具的使用:
笔者的机器为WINDOWSXP的系统,在这个基础上装虚拟机,然后再在虚拟机上装Linux。两个系统间采用samba共享文件(当然你也可以采用hgfs或nfs等)。源码阅读就采用sourceinsight+find+grep+vi这种组合的方式。这个是写给还在门外的同志看的,如果你已经有了顺手的工具,可以凭自已的爱好,不必强求。我们的目的是分析内核源码,而不是比拼工具的优劣。
最后再说一下环境:
建议最好找一段比较连续的时间,尤其在入门的时候。我当时经常一看就三四个小时过去了,并且觉得时间太少了。现在虽然好点,但是如果时间经常被打断,效率会很低的。
如果你具备以上这些条件,OK。我们就可以开始我们的Linux内核之旅了。