Linux內核修煉之道 之 前言

至此落筆之際,恰至Linux問世18週年,18年的成長,如夢似幻,風雨頗多,感慨頗多。
猶自憶起多年以前一位前輩訓導時的箴言:今天的必然正是由之前一系列的偶然所決定的。過去的某年某月,我偶然初識Linux就身陷其中,至今仍找不到出去的路,而正是這次乃至之後的多次偶然相聯合,從而決定了今日的我要在此寫下這些話。那麼,當您偶然地拿起這本書,偶然地看到這段話,您是否會問自己:這樣的偶然又會導致什麼樣的必然?
如果您依然決定繼續這次的偶然之旅,那麼首先請認識兩個人,準確的說是一個人和一隻企鵝。這個人自然就是Linus Torvalds,我們也可是稱他爲Linus或李納斯,正是這位來自芬蘭的天才,在1991年1月2日,攥着在聖誕節和生日得到的錢,偶然地做出了一個重大的財政決定,分期三年買一臺價格3500美元得相貌平平得計算機,從而Linux開始了。
企鵝則是Linux的標誌,很多人可能不知道Linus,但是卻可能知道這隻企鵝,這是一個奇怪的現象,就像很多人知道微軟,卻不知道比爾蓋茨。不管怎麼說,是Linus塑造了這隻企鵝,並讓它有一副爽透了的樣子,就像剛剛吞下一紮啤酒。除此之外,這隻企鵝還要很特別,其他的企鵝都是黑嘴巴黑腳蹼,但它卻是黃嘴巴黃腳蹼,這使它看上去好像是鴨子與企鵝的雜交品種,也許它是唐老鴨在南極之旅中與一隻當地企鵝一夜傾情的結晶。
其次,在您繼續之前,我還想請您問自己一個問題:我在強迫自己學習內核麼?我很希望您能回答不是,但希望與現實往往都有段不小的距離,因爲很多時候,我都發現身邊的人是因爲覺得內核很高深而強迫自己喜歡的。強迫自己去喜歡一個人是多麼痛苦的事情。或許,針對這個問題,最讓人愉悅的回答是“說實話,我學習的熱情從來都沒有低落過。”正如Linus在自己的自傳《Just for Fun》中希望的那樣。

本書的組織形式

本書將Linux內核的學習分爲四個層次:全面瞭解,掌握基本功;興趣導向,選擇重點深度鑽研;融入社區,參與開發做貢獻;堅持,堅持,再堅持。總結起來,就是“全面瞭解抓基本,興趣導向深鑽研;融入社區做貢獻,堅持堅持再堅持。”(如果您是一個修真小說愛好者,儘可以將其與煉氣、築基、結丹和元嬰等層次相對應。)
第一層次修煉的內容包括了前三章,目的是希望您能夠對Linux以及內核有個全面的認識和了解,掌握分析Linux內核源代碼的分析方法。
第1章主要介紹了Linux的18年成長史,或許您會樂意陪我一起緬懷下這過去的十八年。
第2章介紹內核的配置和編譯過程,和任何大型軟件源碼的學習一樣,學會編譯和配置是第一步。
第3章介紹學習內核需要的基礎,內核的體系結構、目錄結構、代碼特點,瀏覽內核代碼的工具,最後,突出強調了內核源碼分析過程中極爲重要的兩個角色——Kconfig和Makefile,並以USB子系統爲例,演示瞭如何利用這兩個角色進行代碼分析。

第二層次的修煉包括了第4~11章的內容,對內核多數部分的工作原理進行介紹。按照認識的發展規律,在第一層次修煉中已經對內核有個全局的認識和了解之後,接下來就應該以興趣爲導向,尋找一個子系統或模塊,對其代碼深入鑽研和分析,不懂的地方就通過社區、郵件列表或者直接發Email給maintainer請教等途徑弄懂,切勿得過且過,這樣分析下來,對同步、中斷等等內核的很多機制也同樣會非常瞭解,俗話說一通則百通就是這個道理。
因此第二層次的各個章節裏,只是闡釋重點的概念和工作原理,幫助您在分析該部分代碼時進行理解,並不求詳盡。
第4章討論系統的初始化,萬事開頭難,系統的初始化是一個很複雜的過程,不過對於內核源碼的學習來說,以這個部分開始應該是個不錯的選擇。特別是子系統初始化的討論,應該是您選擇任何內核子系統開始分析時都需要了解的內容。
第5章討論系統調用,它是應用程序和內核間的橋樑,學習並理解它是我們走向內核的一個很好的過渡。
第6章討論內核的中斷處理機制,包括幾乎任何一本內核書籍都沒有涉及的通用IRQ層。
第7章討論進程的內核抽象,以及進程如何被創建和銷燬。如果我們將計算機上運行的操作系統以及各種各樣的軟件看作一系列有機的生命體,而不是死的指令集合,那麼這就是一個進程的世界,只不過與我們人類世界不同的是,進程世界裏的個體是一個一個鮮活的進程,而不是人。人的世界有道德與法律去制約管理,進程的世界同樣也有自己的管理機制,這就是第7章所要展示的內容——進程管理。
第8章討論進程的調度,重點討論了在內核歷史上具有重要地位的O(1)調度器和最新的CFS調度起。
第9章討論內存管理,內存就是進程的家,這裏討論內核如何爲每個進程都分配一個家,並儘量的去做到“居者有其屋”,以及保證每個家的安全。
第10章討論文件系統,主要是虛擬文件系統(VFS),它通過在各種具體的文件系統之上建立一個抽象層,屏蔽了不同文件系統間的差異。
第11章討論設備驅動,對於驅動開發來說,設備模型的理解是根本,spec、datasheet與內核源代碼的利用是關鍵。
通過第二層次的修煉,您應該對至少一到兩個部分有了很深入的理解,對內核代碼採用的通用手法也已經很拈熟,那麼您應該開始進入第三層次,努力融入到內核的開發社區,此時的您已經不會再是社區中潛水小白的角色,而是會針對某個問題發表自己的見解。您已經可以嘗試參與到內核的開發中去,即使僅僅修改了內核中的一個錯誤單詞,翻譯了一份大家需要的文檔,也是做出了自己的貢獻,會得到大家的認可。
本書中第三層次只包括了兩章的內容,這是因爲內核的修煉之道越往後便越依賴於自己,任何參考書都替代不了自己不斷的反思與總結。
第12章討論參與內核開發需要了解的一些基礎信息。
第13章討論了內核的調試技術,與第12章一樣,您可以僅僅將這些內容看成內核修煉中的一些tips。
至於最後的第四層次,更是僅有兩個字——堅持。能夠在內核的修煉之道上走多遠,都取決於我們能夠堅持多久,或許一個用一個公式概括更爲合適:心態+興趣+激情+時間+X=Y。
革命尚未成功,我等仍需努力。——與君共勉之。
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章