做為一個過來人,我談談我自己的看法,歡迎大家補充:
首先肯定的一點是:不要一上來就看內核代碼,基本上你會很快被挫敗感打敗,內核正在變得越來越龐大,學習曲線越來越陡峭,當你一無所知的時候冒然進入linux kernel,你會發現處處都是障礙,處處都是大坑,你根本走不下去,最好的方法是把對內核源代碼的熱情先放在心里,從基本功開始,
我認為的基本功包括兩個方面:
1、linux的基本操作,內核中的很多設計都是源于應用,你不理解用戶空間的操作,也就不會知道內核空間在干什么,這時候,你需要做的就是在自己的計算機上安裝一個GNU/linux作業系統,Debian、Ubuntu什么的都OK,最好去掉其他的OS,這可以強迫你在linux下進行學習,作業,生活,在這個程序中,你可能需要google檢索一些資訊,安裝一些軟體,學習使用這些軟體,理解一些基本的linux的背景知識......如果你想要從事底層的軟體開發,那么盡量在終端下作業,這樣會讓你和linux kernel更接近一些,從而提供更多關于內核的基礎知識,
2、第二個方面是軟體相關的基礎知識,你最好學習一些軟體的邏輯思維,學習掌握一門語言,當然最好是c語言,掌握其基本的語法和語意,然后在linux環境下進行實際訓練,這里不得不隆重推出一本經典之作《Unix高級環境編程》,仔細閱讀這本書,然后動手實踐,撰寫linux下的小程式,給自己找些樂子,
有了基本功之后,你可以選擇強攻Linux kernel,不過呢我還是建議從一個小的RTOS入手,構建下面的知識體系:
1、關于OS的基本概念,什么是行程、什么是執行緒,什么是中斷,什么是檔案系統,什么是記憶體管理,什么是背景關系,什么是設備管理等等,
2、關于處理器以及周邊硬體的基礎知識,可以選擇ARM,也可以選擇其他的處理器,主要是從軟體角度來理解一個處理器,知道CPU的基本組成,知道什么是MMU,TLB,中斷處理流程,總線的概念,什么是指令集等等,這時候,相信你會接觸一些匯編指令,不一定要能寫,但是一定要能讀懂,
上面的階段都沒有接觸Linux內核,但是不要著急,我們馬上就要直面Linux內核了,第一個問題就是選擇什么版本,不需要太新,但是越早的內核就會越簡單,有助你可以把閱讀linux內核代碼的習慣持續下去,你有幾個選擇:
1、配合《Linux內核完全注釋》來理解0.12內核,我沒有看過這本書,聽說不錯,
2、配合《Linux內核情景分析》來理解2.4內核,當年就是這本書引領我來閱讀內核的,我一直都對其充滿感激之情
3、配合《深入理解linux內核》來理解2.6.10內核,非常好的書,強烈推薦,我基本上閱讀了好幾遍這本書,中文版一遍,英文版3遍,每次都有不同的識訓,
閱讀代碼的程序有些枯燥,可以考慮撰寫實際的驅動程式來調節一下,《Linux設備驅動》是不二之選,
最后,整理一些心得:
1、英語很重要、英語很重要、英語很重要,一定要學好英語,盡量看英文版書籍,
2、多動手,多思考,多總結,如果有機會,把自己的心得整理出來并發布,和其他工程師交流,這個程序可以有助于夯實你對Linux kernel的理解,
3、clone linux stable的代碼倉庫,多讀一讀git log,那是無窮的寶藏;
轉載地址:
http://www.wowotech.net/forum/viewtopic.php?id=5
http://www.wowotech.net/
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/84839.html
標籤:Linux
