關於內核學習的一些個人看法!

    今天必須吐槽一下!

    我有個搞內核的同事說過:對現在的新人來說,內核的學習曲線越來越陡了,不知道搞內核的這些前輩退休以後,後輩能否扛起內核這個重擔。。。開始的時候還不以爲然,隨着這幾天陸續接觸內核代碼,才深刻的體會到這句話的滋味。

    舉一個最簡單的例子,我看的內核代碼是2.6.11,選這個版本的原因很簡單,因爲有ULK3,這對於新人來說很重要,結合代碼看書
可以起到很好的效果。我用source insight建完工程之後發現一個很煩人的事情就是,內核裏面的很多宏針對不同的arch有不同的定義,所以在查看定義或者聲明的時候羅列出很多不相關的內容,找起來很亂。後來我打算把一些用不到的arch和其他代碼都從工程裏刪掉,這樣可以讓搜索過程更清晰一些,於是我保留了arch下面i386,x86_64,ia64以及include下面asm-i386,asm-x86_64和asm-ia64等目錄,其他的都刪掉了。

    後面麻煩來了,在我看到內核最終頁表設置的時候,查看變量"pud_offset",發現只有asm-x86_64下面有一個定義,但是奇怪的是我當前正在看的文件是arch/i386/mm/init.c,引用asm-x86_64下的定義很不應該啊,但是又沒有找到其他的地方有定義。fuck!怎麼回事?糾結了很久,後來我又構建一個完整的內核代碼工程,這次我搜索發現了這樣一個目錄asm-generic,速度google下,結果找到了答案:
“每個架構都有自己的asm文件夾,放一些架構相關的。但是有些架構沒有實現某些函數,爲了讓編譯通過,就把這些東西放在asm-generic”

    後來我問了下公司那個搞內核的前輩,確認了此事!!!哎,弄巧成拙啊,但是我也真心無奈,有木有人提到過這個問題啊,那麼多的博客,特別是那些所謂“一步步教你xxx”,“內核xxx入門”,代碼流程我們都可以慢慢看,各位大神也並非必須給我們一步步地講,像這些點纔是應該着重指出的,對於菜鳥們來說。

    允許我在這發點牢騷,請前輩們諒解!希望後來學習順利吧。。。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章