1. 程式人生 > >Linux內核(5) - 內核學習的相關資源

Linux內核(5) - 內核學習的相關資源

背景 大量 vmm 代碼 linux min 建議 資源 自己

“世界上最缺的不是金錢,而是資源。”當我在一份報紙上看到這句大大標題時,我的第一反應是——作者一定是個自然環保主義者,然後我在羞愧得反省自身的同時油然生出一股對這樣的無產主義理想者無比崇敬的情緒來。

於是,我繼續往下看,“因此在XXX還未正式面市之時,前來咨詢的客戶已經不少,這些有眼光的購房者明白,誰能在目前最好的購房機會下最大化地占有絕版資源,誰就掌控了未來財富流向。”(為了避免做廣告的嫌疑,請允許我使用XXX代替該樓盤的名字。)頓時,我悟道了!

其實,韓峰同誌已經在日記裏告訴了我們資源的重要性,因此我們在學習韓峰同誌嚴謹細致的態度同時,還要領悟他對資源的靈活運用。只有在以內核源碼為中心,堅持各種學習資源的長期建設不動搖,才能達到韓局長那樣的高度,俯視Linux內核世界裏的人生百態。

註意,這個觀點與前面所說的學習效果主要取決於方法論和心理兩個方面並不矛盾,它們屬於不同層次上的問題。

內核文檔

內核代碼中包含有大量的文檔,這些文檔對於學習理解內核有著不可估量的價值,記住,在任何時候,它們在我們心目中的地位都應該高於那些各式的內核參考書。下面是一些內核新人所應該閱讀的文檔。

README
這個文件首先簡單介紹了Linux內核的背景,然後描述了如何配置和編譯內核,最後還告訴我們出現問題時應該怎麽辦。

Documentation/Changes
這個文件給出了用來編譯和使用內核所需要的最小軟件包列表。

Documentation/CodingStyle
這個文件描述了內核首選的編碼風格,所有代碼都應該遵守裏面定義的規範。

Documentation/SubmittingPatches
Documentation/SubmittingDrivers
Documentation/SubmitChecklist
這三個文件都是描述如何提交代碼的,其中SubmittingPatches給出創建和提交補丁的過程,SubmittingDrivers描述了如何將設備驅動提交給2.4、2.6等不同版本的內核樹,SubmitChecklist則描述了提交代碼之前需要check自己的代碼應該遵守的某些事項。
Documentation/stable_api_nonsense.txt
這個文件解釋了為什麽內核沒有一個穩定的內部API(到用戶空間的接口——系統調用——是穩定的),它對於理解Linux的開發哲學至關重要,對於將開發平臺從其他操作系統轉移到Linux的開發者來說也很重要。

Documentation/stable_kernel_rules.txt
解釋了穩定版內核(stable releases)發布的規則,以及如何將補丁提交給這些版本。

Documentation/SecurityBugs
內核開發者對安全性問題非常關註,如果你認為自己發現了這樣的問題,可以根據這個文件中給出的聯系方式提交bug,以便能夠盡可能快的解決這個問題。

Documentation/kernel-docs.txt
這個文件列舉了很多內核相關的文檔和書籍,裏面不乏經典之作。

Documentation/applying-patches.txt
這個文件回答了如何為內核打補丁。

Documentation/bug-hunting
這個文件是有關尋找、提交、修正bug的。

Documentation/HOWTO
這個文件將指導你如何成為一名內核開發者,並且學會如何同內核開發社區合作。它盡可能不包括任何關於內核編程的技術細節,但會給你指引一條獲得這些知識的正確途徑。

經典書籍

待到山花爛漫時,還是那些經典在微笑。

有關內核的書籍可以用汗牛充棟來形容,不過只有一些經典的神作經住了考驗。首先是5本久經考驗的神作(個人概括為“2+1+2”,第一個2是指2本全面講解內核的書,中間的1指1本講解驅動開發的書,後面的2則指2本有關內核具體子系統的書,你是否想到了某某廣告裏三個人突然站起單臂齊舉高呼“1比1比1”的場景?)。

《Linux內核設計與實現》
簡稱LKD,從入門開始,介紹了諸如進程管理、系統調用、中斷和中斷處理程序、內核同步、時間管理、內存管理、地址空間、調試技術等方面,內容比較淺顯易懂,個人認為是內核新人首先必讀的書籍。新人得有此書,足矣!

《深入理解Linux內核》
簡稱ULK,相比於LKD的內容不夠深入、覆蓋面不廣,ULK要深入全面得多。
前面這兩本,一本提綱挈領,一本全面深入。

《Linux設備驅動程序》
簡稱LDD,驅動開發者都要人手一本了。

《深入理解Linux虛擬內存管理》
簡稱LVMM,是一本介紹Linux虛擬內存管理機制的書。如果你希望深入的研究Linux的內存管理子系統,仔細的研讀這本書無疑是最好的選擇。

《深入理解LINUX網絡內幕》
一本講解網絡子系統實現的書,通過這本書,我們可以了解到Linux內核是如何實現復雜的網絡功能的。

(忘了聲明下,我這列出來的書名是中文的,但是並不代表我建議大家去看他們的中文版,其中有的翻譯的實在太??了,呵呵)

這5本書各有側重,正如下面的圖所展示的那樣,恰好代表了個人一直主張的內核學習方法:首先通過LKD或ULK了解內核的設計實現特點,對內核有個整體全局的認識和理解,然後可分為兩個岔路,如果從事驅動開發,則鉆研LDD,如果希望對內核不是泛泛而談而是有更深入的理解,則可以選擇一個自己感興趣的子系統,仔細分析它的代碼,不懂的地方就通過社區、郵件列表或者直接發Email給maintainer請教等途徑弄懂,切勿得過且過,這樣分析下來,對同步、中斷等等內核的很多機制也同樣會非常了解,俗話說的一通則百通就是這個道理。當然,如果你選擇研究的是內存管理或者網絡,則可以有上面的兩本書可以學習,如果是其他子系統,可能就沒有這麽好的運氣了。
技術分享圖片

內核社區

最近幾年,社區網站非常的熱火,不過此社區非彼社區。

Linux最大的一個優勢就是它有一個緊密團結了眾多使用者和開發者的社區,它的目標就是提供盡善盡美的內核。內核社區的中心是內核郵件列表(Linux Kernel Mailing List,LKML),我們可以在http://vger.kernel.org/vger-lists.html#linux-kernel上面看到訂閱這個郵件列表的細節。

內核郵件列表的流量很大,每天都有幾百條消息,這裏是大牛們的戰場,小牛們的天堂,任何一個內核開發者都可以從中受益非淺。
除了LKML,大多數子系統也有自己獨立的郵件列表來協調各自的開發工作,比如USB子系統的郵件列表可以在http://www.linux-usb.org/mailing.html上面訂閱。

其他網絡資源

除了內核郵件列表,還有很多其他的論壇或網站值得我們經常關註。我們要知道,網絡上不僅有獸獸和鳳姐,也不僅有犀利哥和韓局長。

http://www.kernel.org/
可以通過這個網站上下載內核的源代碼和補丁、跟蹤內核bug等。

http://kerneltrap.org
Linux和BSD內核的技術新聞。如果沒時間跟蹤LKML,那麽經常瀏覽kerneltrap是個好主意。

http://lwn.net/
Linux weekly news,創建於1997年底的一個Linux新聞站點。

http://zh-kernel.org/mailman/listinfo/linux-kernel
這是內核開發的中文郵件列表,裏面活躍著很多內核開發領域的華人,比如Herbert Xu,、Mingming Cao、Bryan Wu等。

http://linux.chinaunix.net/
全球最大的Linux/Unix中文技術社區。

Linux內核(5) - 內核學習的相關資源