資源描述:
《Linux內核入門 西郵》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、走近Linux內核作者:[王聰]不要理會任何一個告訴你內核開發(fā)是困難,特別或者不同的人。它是一個大的程序,而且bug修復或驅動編寫是一個最佳起點。它也沒有什么魔力,也不是使用只有留著絡腮胡的老手才能讀懂的語言編寫。──AlanCox[編輯]簡介這篇文章是專門寫給那些對Linux內核感興趣,卻又不知道如何著手去讀懂那么多代碼的內核新手。也許你剛剛了解Linux,又急于探索Linux的內部秘密;也許你是一個Linux開發(fā)者,熟悉應用程序的開發(fā),又雄心勃勃準備向內核世界進發(fā)。那么這篇文章正是你需要的,它會帶你走進內核的世界,伴你渡過危險的沼澤。通過分享我們自己的經歷,希望有更多的人能夠加入到Li
2、nux內核開發(fā)者行列。內核開發(fā)向來被視為非常神秘的工作,仿佛只有傳說中的留著長長的絡腮胡的黑客們才能從事它。其實不然,Linux內核的開發(fā)和其它大型項目沒有多少差別,只不過它的調試確實有點特別,需要一些特別的技巧。不要恐慌(Don'tPanic!),只要你下功夫,你也能參與內核的開發(fā),它的確是一件非常好玩的事。[編輯]需要準備什么當然,你首先要有一臺可供支配的電腦,最好裝有Linux。如果可以,最好再有一臺專門供你調試代碼的機器,因為沒人能保證調試內核的過程中不會讓你的文件系統(tǒng)崩潰。或者,至少有一塊專門給調試內核使用的硬盤。最好還有一個固定的互聯(lián)網接口,畢竟Linux內核開發(fā)是在網絡上進行
3、的,而且你也會經常在互聯(lián)網上搜索一些有用的信息。如果你是一位超級geek的話,再準備一根雙機串口線,它能幫助你從一臺機器上“聆聽”另一臺機器上內核運行中的“抱怨”。嗯,有點像是外科醫(yī)生給病人聽診,這看起來很酷,不是嗎?如果你準備在一臺非計算機設備上調試你的內核(這沒什么奇怪的,Linux早已經被移植到千奇百怪的系統(tǒng)上),那么你還需要準備相應的硬件,或者它的模擬器,或者其它一些工具。如果你有在非計算機設備上調試Linux內核的經驗,請在這里自由添加相應的內容。[編輯]開始我們假設上面的東西你都準備好了,整裝待發(fā),現(xiàn)在可以正式進軍內核了。當然了,如果你對Linux上的開發(fā)已經很熟悉了,你可以安
4、全地跳過這一節(jié)。好了,出發(fā),水手們![編輯]1.精通C語言編程不是我們一味推崇C語言,而是C語言的的確確太適合做內核開發(fā)了。C語言的誕生源于編寫Unix內核代碼,它精練的設計哲學確實做到了這一點。甚至有人這樣評價C語言──“它聯(lián)合了匯編的所有威力?!比绻氵€不懂C,趕快去學吧。如果你是一名編程新手,不推薦用C作為你的入門語言,原因如下:·編程新手最需要了解的是編程的概念和對編程的基本認識,而過多的接觸C語言往往會把你引出這一目的,會讓你把注意力集中到一些奇怪的語言特性上,而不是編程語言本身?!ぞ幊绦率滞鶎τ嬎銠C了解不夠深刻,不清楚計算機的內部結構,而C語言恰恰就是和計算機內存/編碼/CP
5、U打交道,最起碼,調試那些“隱晦”的錯誤時如此。(想想你是不是沒有把一個指向指針的指針的指針指向正確的位置。)·學好C語言需要下很大的功夫,最起碼不能低于兩年。(當然如果你不打算學好那得另說了。)所以,最好先學一門比較簡單的編程語言作為鋪墊。不妨試一下Python,它比Java還要簡單。當然了,這并非絕對,因人而異。如果你真的決定開始學習C語言,那么推薦的入門書籍仍然是K&R的《TheCProgrammingLanguage》。過去這么多年了,它仍然被奉為入門的首選,可見其有多么經典。不過僅僅了解C的語法,能編寫一些小的程序是遠遠不夠的。你必須能夠熟練地操縱C語言,了解它的一些缺陷和陷阱,
6、讓它變成你的利器。有句話說得好:“C語言就像一把刻刀,簡單,鋒利,并且在技師手中非常有用。和任何鋒利的工具一樣,C會傷到那些不能駕馭它的人?!弊x一讀《CTrapsandPitfalls》和《ExpertCProgramming》吧,它們能讓你有一個大的提升,成為一名C語言高手。如果碰巧你是一位C++的推崇者,那么下面的一些引用或許能說服你開發(fā)Linux內核不使用C++(摘自LKMLFAQ)。Linus在2004年說:Infact,inLinuxwedidtryC++oncealready,backin1992.Itsucks.Trustme-writingkernelcodeinC++is
7、aBLOODYSTUPIDIDEA.他認為:C++編譯器是不可靠的,1992年的時候更糟,有一些基礎性的東西沒有改變:C++的異常處理是broken(不知道怎么翻譯這個詞好)的,對內核來說它更是broken。任何一個喜歡把內存分配藏到你背后的編譯器或者語言,都不是你編寫內核的好的選擇。你可以用C來編寫OO代碼,而不用C++的一些“廢話”。AndrewD.Balsa如是說:Linux一開始的時候gcc還沒有很好的C++實現(xiàn)