linux内核书籍
?1, 關(guān)于操作系統(tǒng)理論的最初級(jí)的知識(shí)。不需要通讀并理解《操作系統(tǒng)概念》《現(xiàn)代操作系統(tǒng)》等巨著,但總要知道分時(shí)(time-shared)和實(shí)時(shí)(real-time)的區(qū)別是什么,進(jìn)程是個(gè)什么東西,CPU和系統(tǒng)總線、內(nèi)存的關(guān)系(很粗略即可),等等。
2, 關(guān)于C語(yǔ)言。不需要已經(jīng)很精通C語(yǔ)言,只要能熟練編寫(xiě)C程序,能看懂鏈表、散列表等數(shù)據(jù)結(jié)構(gòu)的C實(shí)現(xiàn),用過(guò)gcc編譯器,就可以了。當(dāng)然,如果已經(jīng)精通C語(yǔ)言顯然是大占便宜的。
3, 關(guān)于CPU的知識(shí)。這塊兒可以在學(xué)習(xí)內(nèi)核過(guò)程中補(bǔ),但這樣的話你就需要看講解很詳細(xì)的書(shū),比方后面將會(huì)提到的《情景分析》。你是否熟悉Intel 80386 CPU?嘗試著回答這幾個(gè)問(wèn)題來(lái)判斷一下:1)說(shuō)出80386的中斷門和陷阱門的區(qū)別;2)說(shuō)出保護(hù)模式與實(shí)模式的區(qū)別;3)多處理器機(jī)器上,普通的讀- 改-寫(xiě)回一塊內(nèi)存這樣的動(dòng)作,為什么需要特殊的手段來(lái)保護(hù)。等等。講解基于其它CPU的Linux內(nèi)核的書(shū),目前好象只有一本《IA64Linux內(nèi)核: 設(shè)計(jì)與實(shí)現(xiàn)》──也還是Intel的,其它都是講解基于IA32的。
以上算是知識(shí)方面吧,如果還要再補(bǔ)充一條,我想就是:動(dòng)手編譯過(guò)內(nèi)核。
好了,我們接下來(lái)走。好多人裝上Linux之后,第一件事找到內(nèi)核源碼所在的路徑,打開(kāi)一個(gè)C程序文件,開(kāi)始嘩嘩嘩翻頁(yè),看看大名鼎鼎的Linux內(nèi)核代 碼到底長(zhǎng)啥模樣──然后關(guān)閉。這是可理解的,但卻不是學(xué)習(xí)的方法。剛開(kāi)始,必須從讀書(shū)入手。至少要對(duì)內(nèi)核有一個(gè)Overview之后,才有可能帶著問(wèn)題去 試圖閱讀源代碼本身。 下面就講一下我讀過(guò)的幾本書(shū):
1, 《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》,英文名Linux Kernel Development(所以有人叫它LKD),機(jī)械工業(yè)出版社,¥35, 美國(guó)Robert Love著,陳莉君譯者。評(píng)說(shuō):此書(shū)是當(dāng)今首屈一指的入門最佳圖書(shū)。作者是為2.6內(nèi)核加入了搶占的人,對(duì)調(diào)度部分非常精通,而調(diào)度是整個(gè)系統(tǒng)的核心,因 此本書(shū)是很權(quán)威的。這本書(shū)講解淺顯易懂,全書(shū)沒(méi)有列舉一條匯編語(yǔ)句,但是給出了整個(gè)Linux操作系統(tǒng)2.6內(nèi)核的概觀,使你能通過(guò)閱讀迅速獲得一個(gè) overview。而且對(duì)內(nèi)核中較為混亂的部分(如下半部),它的講解是最透徹的。對(duì)沒(méi)怎么深入內(nèi)核的人來(lái)說(shuō),這是強(qiáng)烈推薦的一本書(shū)。
翻譯:翻譯水平、負(fù)責(zé)任程度都不錯(cuò),但是印刷存在一些錯(cuò)誤。買了此書(shū)的朋友可以參考我在Linux高級(jí)應(yīng)用版的《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)中文版勘誤》:
http://bbs.chinaunix.net/forum/viewtopic.php?t=541234
另外,此書(shū)2005年有了第二版,目前尚無(wú)中譯本面世。我就是對(duì)照著2nd-en勘誤1st-cn的。
2, 《Linux內(nèi)核源代碼情景分析》上、下。毛德操、胡希明著,浙江大學(xué)出版社,上冊(cè)¥80,下冊(cè)¥70. 評(píng)說(shuō):
本書(shū)是基于2.4.0內(nèi)核的,比較早,也沒(méi)聽(tīng)說(shuō)會(huì)出第二版。上冊(cè)講解內(nèi)存管理、中斷、異常與系統(tǒng)調(diào)用、進(jìn)程控制、文件系統(tǒng)與傳統(tǒng)Unix IPC;下冊(cè)講解socket、設(shè)備驅(qū)動(dòng)、SMP和引導(dǎo)。關(guān)于這套書(shū)的評(píng)價(jià)褒貶不一,我個(gè)人認(rèn)為其深度是同類著作中最優(yōu)秀的。本書(shū)基于Intel IA32體系,由于厚度大,很多體系上的知識(shí)都捎帶講解了,所以如果你想深入了解內(nèi)核的工作機(jī)制而又不非常熟悉Intel CPU的體系構(gòu)造,本書(shū)是最合適的。缺點(diǎn)是:版本較老,沒(méi)有TCP/IP協(xié)議棧部分(它講的socket只是Unix域協(xié)議的),圖表太少,不適合初學(xué)者 入門。還有就是對(duì)學(xué)生朋友來(lái)說(shuō),可能書(shū)價(jià)偏高,這樣的話可以考慮先買上冊(cè),因?yàn)樯蟽?cè)是核心部分,下冊(cè)一大部分都在講具體PCI/ISA/USB設(shè)備的驅(qū) 動(dòng)。
翻譯:沒(méi)什么翻譯,作者是國(guó)人,而且行文流暢。本人書(shū)桌上諸多計(jì)算機(jī)經(jīng)典圖書(shū)當(dāng)中,這套是唯一又經(jīng)典又無(wú)閱讀障礙的。
www.linuxforum.net內(nèi)核版好多朋友已經(jīng)把這書(shū)讀到六七遍了,我很慚愧,上冊(cè)差不多讀熟了,下冊(cè)就SMP部分還看過(guò)──但這就花費(fèi)了整整 1年的時(shí)間,還有好多弄不懂的。這里順便說(shuō)明另外一個(gè)研究?jī)?nèi)核常見(jiàn)的誤區(qū):目標(biāo)太龐大。要知道Linux內(nèi)核(最新的2.6.13)bzip2壓縮之后 37M,解壓縮之后244M,根本不是哪個(gè)人能夠吃透的。即使是內(nèi)核的核心開(kāi)發(fā)團(tuán)隊(duì)中,恐怕也只Linus Torvalds、Alan Cox、David Miller、Ingo Molnar寥寥數(shù)人會(huì)有比較全面的了解,其它人都是做自己專門的部分。我自己來(lái)說(shuō),目前已經(jīng)決定放棄內(nèi)存管理的全部(slab層、LRU、rbtree 等)、文件系統(tǒng)部分、外設(shè)驅(qū)動(dòng)部分,暫時(shí)也沒(méi)打算弄IA32以外的其它體系的部分。
3, 《深入理解Linux內(nèi)核》第二版。中國(guó)電力出版社。也是陳莉君譯。此書(shū)是Linux內(nèi)核黑客在推薦圖書(shū)時(shí)的首選。 評(píng)說(shuō):
此書(shū)C版的converse兄送了我一本第一版,因此就沒(méi)買第二版,比較后悔。因此只就第一版說(shuō)一說(shuō),第一版基于2.2,第二版2.4 。我見(jiàn)O'Reilly官方主頁(yè)上說(shuō)第三版的英文版將于2005年11月出版,也不知咱們何時(shí)才能見(jiàn)到。此書(shū)圖表很多,形象地給出了關(guān)鍵數(shù)據(jù)結(jié)構(gòu)的定義, 與《情景分析》相比,本書(shū)內(nèi)容緊湊,不會(huì)一個(gè)問(wèn)題講解動(dòng)輒上百頁(yè),有提綱挈領(lǐng)的功用,但是深度上要遜于《情景分析》。
4, 其它的幾本書(shū)。市面上能見(jiàn)到的其它的Linux內(nèi)核的圖書(shū),象《Linux設(shè)備驅(qū)動(dòng)程序》、《Linux內(nèi)核源代碼完全注釋》以及新出的《Linux內(nèi)核分析及編程》等。
《Linux設(shè)備驅(qū)動(dòng)程序》第二版是基于2.4的,中文翻譯不錯(cuò),中國(guó)電力出版。這書(shū)強(qiáng)調(diào)動(dòng)手實(shí)踐,但它是講解“設(shè)備驅(qū)動(dòng)”的,不是最核心的東西,而且有 些東西沒(méi)硬件的話無(wú)法實(shí)踐,可能更適合驅(qū)動(dòng)開(kāi)發(fā)的程序員吧,不太適合那些For fun and profit的人。此書(shū)有第三版英文版,東南大學(xué)出版社影印,講解2.6的,行文流暢,講解的面也比第二版更廣泛,我讀過(guò)其中關(guān)于同步與互斥、內(nèi)存分配的 部分,感覺(jué)很不錯(cuò)。
《Linux內(nèi)核源代碼完全注釋》(機(jī)械工業(yè)出版社)是同濟(jì)大學(xué)的博士生趙炯的著作,講解0.1Linux內(nèi)核,我沒(méi)買也沒(méi)看,有看過(guò)的朋友說(shuō)一說(shuō)。
《Linux內(nèi)核分析及編程》(電子工業(yè)出版社)是剛剛出版的,國(guó)人寫(xiě)的,講解2.6.11 。很多人說(shuō)好,但有人說(shuō)不夠系統(tǒng),我沒(méi)買,不敢評(píng)說(shuō)。
還有一本清華出的《Linux內(nèi)核編程指南(第三版)》,原書(shū)應(yīng)該是好書(shū),但是翻譯、排版十分糟爛,脫字跳行,根本沒(méi)法看,我買了一本又扔掉了。
5, 其它資源。 TLDP(The Linux Documentation Project)有大量文檔,其中不少是關(guān)于內(nèi)核的,有些是在國(guó)外出版過(guò)的,象《Linux Kernel Interls》《The Linux Kernel》《Linux Kernel Module Programming Guide》等,作者都是親身參加開(kāi)發(fā)的人,著作較為可信。Http://www.linuxforum.net中國(guó)Linux論壇的內(nèi)核版。該版是研究 內(nèi)核的中文Linux社區(qū)中水平最高的,有很多專家級(jí)別的牛人,強(qiáng)烈推薦去學(xué)習(xí)一下(但建議不要問(wèn)太過(guò)分簡(jiǎn)單的問(wèn)題,人家脾氣再好也會(huì)煩的^_^),它的 置頂貼簡(jiǎn)直是一個(gè)包羅萬(wàn)象的FAQ,精華區(qū)也有很多資料。只可惜太過(guò)曲高和寡,人氣不是很旺。
6, 一本不是講解Linux的書(shū):《現(xiàn)代體系結(jié)構(gòu)上的Unix系統(tǒng):內(nèi)核程序員的SMP和Caching技術(shù)》,人民郵電出版社2003版,定價(jià)¥39. 本書(shū)雖然不是講解Linux,但是對(duì)所有Unix內(nèi)核都是適用的,適合對(duì)SMP和CPU的Cache這些組成原理知識(shí)不是很熟的朋友,而且是很多國(guó)外牛人 推薦的書(shū)。中文版翻譯非常負(fù)責(zé)。
還有個(gè)很重要的問(wèn)題:怎樣瀏覽內(nèi)核源代碼。有的朋友喜歡在Windows上工作,用Source Insight;有的在Linux,用Source Navigator;還有專門瀏覽源代碼的軟件,象lxr(Linux Cross Reference);還有用ctags/ectags/cscope等,這些都是很優(yōu)秀的軟件。我個(gè)人用Vim + ctags瀏覽(參考了www.linuxforum.net內(nèi)核版wheelz大俠的文檔,)。
此外,前邊已經(jīng)提到的一個(gè)重要的問(wèn)題是:你研究?jī)?nèi)核的目的是什么, 開(kāi)發(fā)?樂(lè)趣?如果是開(kāi)發(fā),而且是國(guó)內(nèi)做開(kāi)發(fā),把kernel API熟悉一下就差不太多了(你也知道國(guó)內(nèi)的水平有多差),比方說(shuō)copy_from_user()、kmalloc()函數(shù)等,kernel API在Internet上找得到,編譯內(nèi)核時(shí)也可以用DocBook生成(具體請(qǐng)參考內(nèi)核源代碼包下的README文件);如果是研究,那就差別很大 了,需要下很大的苦功:會(huì)用kmalloc()絕不說(shuō)明你懂得Linux內(nèi)核的虛存管理子系統(tǒng),正如同會(huì)講漢語(yǔ)不說(shuō)明你懂中國(guó)文化一樣。
說(shuō)完了,發(fā)現(xiàn)前面講的太羅嗦了,簡(jiǎn)化一下:
1, 動(dòng)手編譯內(nèi)核
2, 精讀《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》
3, 上www.linuxforum.net內(nèi)核版看置頂貼與精華區(qū)
此外就憑自己興趣選擇吧。
PS:
關(guān)于linux內(nèi)核方面的書(shū)籍。兩年前買了幾塊的linux磚頭內(nèi)核的書(shū)籍,不分先后的讀起來(lái),激情磨滅了不少,有時(shí)候搞得一頭霧水、很是懊惱。凡是分個(gè)循序漸進(jìn)的好,呵呵!
Linux內(nèi)核完全剖析,0.11版本內(nèi)核,趙炯寫(xiě)的,覺(jué)得麻雀雖小,五臟具全。一本書(shū)中差不多包含了所有的代碼,而且加了很多注釋。分析的很透徹,不錯(cuò) 的內(nèi)核研度入門書(shū)。 深入理解LINUX內(nèi)核第二版,關(guān)于2.4內(nèi)核的,如果有一些linux操作系統(tǒng)的基礎(chǔ),讀著相當(dāng)爽, 內(nèi)容全面,而且用大量數(shù)據(jù)結(jié)構(gòu)、宏名和函數(shù),貫穿其中。遇到重點(diǎn)時(shí),又附以代碼、圖解,理解起來(lái)比較容易。其中有些概念不是很正統(tǒng),可能是作者有意為之 吧!第三版是關(guān)于2.6。
linux內(nèi)核源代碼情景分析 ,中國(guó)人寫(xiě)的,博大精深呀。經(jīng)常在細(xì)節(jié)上深入進(jìn)去,看的時(shí)候,要記得經(jīng)常切換回來(lái)。不是很容易看懂。因?yàn)橛刑嗉?xì)節(jié),經(jīng)常看著前面的,就忘了后面的,特別是函數(shù)、宏名,要是覺(jué)得自己內(nèi)存堆??臻g夠大的話??梢阅脕?lái)試試。
Linux設(shè)備驅(qū)動(dòng)程序,雖是掛著設(shè)備驅(qū)動(dòng),但是大多是講內(nèi)核,也講了很多系統(tǒng)接口。
內(nèi)核2.4版源代碼分析大全,李善平寫(xiě)的,典型的中國(guó)人寫(xiě)的書(shū),概念都很清楚,整體框架也不錯(cuò)。比較理解“中國(guó)國(guó)情”。
還有UC/OS_II,5000多行代碼的嵌入式操作系統(tǒng),也是開(kāi)源的,有了任哲、邵貝貝的那兩本書(shū),足以搞定了。感覺(jué)比較適合本科操作系統(tǒng)課程的課程設(shè)計(jì),可惜俺哪會(huì)還看到。
轉(zhuǎn)載于:https://www.cnblogs.com/ruiy/p/book.html
總結(jié)
- 上一篇: [原]procexp替换任务管理器
- 下一篇: linux 恢复数据