linux核心「問題門」——學習問題、經驗集錦
《linux核心修煉之道》精華版之方**
至此落筆之際,恰至linux問世18周年,18年的成長,如夢似幻,風雨頗多,感慨頗多。
猶自憶起多年以前一位前輩訓導時的箴言:今天的必然正是由之前一系列的偶然所決定的。過去的某年某月,我偶然初識linux就身陷其中,至今仍找不到出去的路,而正是這次乃至之後的多次偶然相聯合,從而決定了今日的我要在此寫下這些話。那麼,當您偶然地拿起這本書,偶然地看到這段話,您是否會問自己:這樣的偶然又會導致什麼樣的必然?
如果您依然決定繼續這次的偶然之旅,那麼首先請認識兩個人,準確的說是乙個人和乙隻企鵝。這個人自然就是linus torvalds,我們也可是稱他為linus或李納斯,正是這位來自芬蘭的天才,在2023年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。
革命尚未成功,我等仍需努力。——與君共勉之。
……
新書預告 《Linux核心修煉之道》
首先祝各位朋友虎年快樂!其次有些慚愧得道個歉,已經有幾乎兩年時間沒有更新過了,有些時候想想這裡面還沒完成的內容,比如pci部分,還是覺得蠻對不起關心的朋友們的,無奈總是一些事情纏身,忙的如痴如醉的,就沒顧得上,不過缺的內容會完成的,恩,一定會的。再次,不在csdn的這麼些時間裡,應人民郵電出版社編輯...
《Linux核心修煉之道》 1 2 核心的版本
linux核心修煉之道 很多年來,linux核心的版本都是以x.y.z這3個數字的形式設定的,偶數y代表穩定版,奇數y代表不穩定的開發版。所謂的穩定版本是指核心的特性已經固定,執行穩定可靠,不再增加新的特性,要改進也只是修改 中的錯誤。而不穩定版本是指相對於上乙個穩定版本增加了新的特性,還處於發展之...
Linux驅動修煉之道
一些學習linux驅動的筆記整理在這裡與大家分享,如果那裡有錯誤也請高手指出。若干年後能進入intel開源中心或ibm搞linux kernel是我目前的目標。君子藏器於身,待時而動。文章 不斷更新中。linux驅動修煉之道 流水燈 linux驅動修煉之道 按鍵 linux驅動修煉之道 lcd背光與...