其實我也是過來人,深知沒有接觸過內核開發的同志在無人指導的情況下獨自學習Linux設備驅動的感受。都是買書,看BLOG,自已調個小程序,很難有同志能夠堅持下去,市面上的書籍也不是說寫的不好,只是大家的基礎都不一樣,另外我感覺有一點就是那些書籍在看了之後始終感覺有一層捅不破的紙,看書的時候感覺啥都會,書一關,好像又啥都不懂了。其實我進書店看過市面上的書,很少有講內核的框架的,不論是國內的還是國外的,要麼框架講的很抽象,離實際的代碼距離太遠,看書的人難以把兩者統一起來,要麼就純粹是源碼分析,忽略框架。
本人接觸Linux其實時間也不久,從接觸Linux內核至今也不過三年左右,並且大部分時間還是在做應用。但是憑著個人的
興趣愛好,一直都堅持抽時間學習內核,屬於入門級的學習者,本人開發或修改過部分的設備驅動及網絡協議棧,也算是略有心得吧。我非常願意把我覺得最重要最難懂的部分與大家一起分享,但是時隔三年,入門時的一些難題對我來說已經不是難題了,在某種程度上可能會略去一些我現在認為不重要的但對入門來說又很重要的東西,這個就只能靠網友一起幫我來查漏補缺了。
首先我說一下要開始設備驅動開發所具備的基本能力:
1. 會C語言,並且基礎還不錯,能跟蹤調試分析C代碼。
2. 有一定的Linux使用基礎。
3. 能寫一個hellword的驅動模塊。
4. 偶爾需要一點匯編(就算不會,對我們分析Linux內核也不會有太大壓力)
如果以上四點中的前三點你不具備,那請你先把這三點學會再看本系列的文章,否則會很難受的。
再說下工具的使用:
筆者的機器為WINDOWSXP的系統,在這個基礎上裝虛擬機,然後再在虛擬機上裝Linux。兩個系統間采用samba共享文件(當然你也可以采用hgfs或nfs等)。源碼閱讀就采用sourceinsight+find+grep+vi這種組合的方式。這個是寫給還在門外的同志看的,如果你已經有了順手的工具,可以憑自已的愛好,不必強求。我們的目的是分析內核源碼,而不是比拼工具的優劣。
最後再說一下環境:
建議最好找一段比較連續的時間,尤其在入門的時候。我當時經常一看就三四個小時過去了,並且覺得時間太少了。現在雖然好點,但是如果時間經常被打斷,效率會很低的。
如果你具備以上這些條件,OK。我們就可以開始我們的Linux內核之旅了。