對於初學者來說,linux內核是非常複雜的,所以一本好的學習書籍是相當必要的,否則容易打擊自信。所以,這裡我推薦先看Robert love的《Linux內核設計與實現》,全書也就300多頁,麻雀雖小、五臟俱全,非常適合初學者。或者笨叔叔的《奔跑吧linux內核:入門篇》,這本書也比較薄,寫的不是很全面,但是內存管理和進程管理部分還是不錯的,而且對很多問題總結的很好。

如果是中高級的內核工程師,推薦《深入理解linux內核》,這本書寫的很全面,基本上涉及了linux內核所有核心的內容。但是這邊書翻譯的不是很好,感覺有些表達邏輯不是很通,我讀這本書相當痛苦(雖然也學了不少東西)。

一本我正在看的是 《linux技術內幕》,寫的也很全面,作者是中國人,讀起來比《深入理解linux內核》舒服很多。但是我還沒讀多少,讀完了再來寫讀後感。


我自己幾年前買了兩本書:《深入理解linux內核》、《linux設備驅動程序》,第一本的命運就是拆開快遞之後放那裡喫灰,第二本是墊顯示器...。

其實這些書剛拿到手的時候是有認真看的,由於當時基礎不夠,越看只會越讓你想放棄學習linux內核,真的是太難懂了。後來我就改變了學習方式,直接看源碼,這種方式似乎很多人都不推薦。

Talk is cheap. Show me the code.

後來這兩本書就就成了我的字典,需要什麼內容看什麼或者說查什麼,我想沒有人去研究字典的所有內容吧。

既然要看代碼,所以首先要搞明白linux內核是如何啟動的,啟動時有什麼要求,網上搜索一下發現都是千篇一律的東西,乾脆直接去查官網文檔,為了省事,我就把相關的內容給總結了一下:

引導 ARM Linux?

mp.weixin.qq.com

通過上篇文章就可以瞭解到 bootloader 在引導 linux 內核時該如何設置軟硬體環境了,比如為什麼需要給 linux 內核傳遞參數等等。

linux 內核被引導到內存之後,就開始執行內核的代碼了,第一步就是對自身進行解壓縮,然後開始真正的內核代碼的運行,可以參考下面兩篇文章:

解壓內核鏡像?

mp.weixin.qq.com

調用 start_kernel?

mp.weixin.qq.com

至此就開始了內核的初始化過程,期間你還會遇到各種其他的概念,比如自旋鎖、原子操作等,對應的筆記都可以在公眾號 linux 專題中看到,雖然空閑時間還在繼續探索源碼,不過近期比較忙,筆記還沒有及時整理,後續會繼續更新。


Robert love的書比較薄,可以先看。不推薦wolfgan的那本紅色的,冗雜。

《深入理解linux內核》那本不錯,可以多花時間


深入理解linux內核,深入linux內核架構等


這個要看你的基礎啦。

瞭解內核的前提是,你瞭解啥是操作系統嗎?如果答案是否,首先閱讀的書籍是

計算機系統概論 - 這個基礎的書籍幫你理清楚操作系統的基礎概念,最基本的指令集,馮諾依曼結構與指令集的關係,等等。

如果你已經跨過這個門檻,緊接著我建議閱讀

CSAPP - 上一本書的升級版,告訴你,什麼一些現代操作系統的概念,鏈接,編譯,虛擬內存,等等等等

瞭解了這些基礎後,可以去看看 Linux 的內核的相關書籍啦,這個其他答案裡面已經很多了。


推薦閱讀:
相關文章