[轉錄][心得] 十本 Linux 核心開發書籍介紹

看板SFFamily作者 (迷惑失道)時間13年前 (2011/03/21 14:08), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
※ [本文轉錄自 LinuxDev 看板 #1DWbDT_v ] 作者: rextsai (Rex Tsai) 看板: LinuxDev 標題: [心得] 十本 Linux 核心開發書籍介紹 時間: Fri Mar 18 02:30:51 2011 ※ [本文轉錄自 Linux 看板 #1DWUdB-o ] 作者: rextsai (Rex Tsai) 看板: Linux 標題: [心得] 十本 Linux 核心開發書籍介紹 時間: Thu Mar 17 19:00:22 2011 網頁版: http://bit.ly/hJL3gJ [2] 十本 Linux 核心開發書籍介紹 「利益揭露: 本文英文書籍連接使用 [3]Amazon Associates Program.」 我相信絕大部分 Linux 開發者都會告訴你,Driver 的開發比 Linux Application 容易許 多,即便寫驅動程式聽起來莫名偉大,其實也不過是一段 C/assembly 的組合程式碼。有 別於桌面應用程式,Linux kernel API 較少因?不同的新軟硬體規格,而進行大幅度 API 更動 (參數的簡化倒是十分常見),且由傑出的軟體開發者撰寫的核心架構,穩定性已經十 分可靠。 相較與 userland 高度複雜的設定機制,Linux Kernel 暴露的界面十分簡單,在硬體穩定 的前提之下,你也難得碰到 API 反應與預期不符合的處境。一般開發者對於核心驅動程式 上手的時間,應該不會比開發桌面軟體來的更久。花費時間較多應該是研讀硬體手冊,以 及不嚴謹的開發習慣造成臭蟲而所需的除錯時間。 對於深具經驗的開發者,在學習開發 Linux kernel driver 時,最快的方法莫過於直接解 開 Kernel tarbar, 切進欲開發的 subsystem 目錄,拿出 [4]global, [5]vim, [6]LXR 直接把現成程式碼當作範例學習,很快就可以理解程式結構。不過,偶爾還是需要參考書 來驗證對於架構得理解是否正確,另外接觸新的 subsystem 時先閱讀入門文章也可以減少 無謂的撞牆期。 所幸,幾位 Linux kernel hacker 也是傑出的文件作者。在 Linux kernel sourc tree 中已有一些各子系統的架構、操作參考文件,涵蓋了基本的 coding style、設計哲學等。 另外,像是 [7]Robert Love, [8]Greg Kroah-Hartman (PCI, USB maintainer) 等開發者 也出版了完整的書籍,很值得參考。 不過市面上針對 Linux kernel 開發的書籍也不少,那一本是適合你的呢?這類的技術書 籍,通常設定不同的讀者?來設定內容,有的偏重知識,有的偏重操作實務。且出版版次 也會影響所介紹的 API 差異,造成無法編譯其範例,但並非舊書,所談之理論就不正確。 以下分享不才對於市面上 2005 年之後出版的[9]核心開發書籍的評論,希望對於想擴充團 隊圖書館的朋友提供些參考。 [10][9780596100797-] [11]Linux Kernel in a Nutshell 是 2006 年年底發行,作者是 GregKH,使用核心為 2.6.18,部分操作方式或指令已經略有更改。GregKH 基於讓更多新手參與開發行列,針對 的讀者是從未編譯過 Linux kernel,想瞭解下載、設定、編譯需求等等細節,適合剛從其 他平臺進入 Linux 核心開發的朋友,可以較快熟悉核心編譯的操作程序。書內主要介紹通 用性知識,因此未提各 distro 間安裝 kernel 的細節 (如 initrd 建制方式)。 LKN 已採 [12]CC BY-SA 2.5 授權。電子書可於 GregKH 的[13]網頁下載。 [14][0596005652] [15]Understanding the Linux Kernel, Third Edition* 這本由兩位博士 Daniel P. Bovet 與 [16]Marco Cesati 所撰寫,從 2000 年底出版之後,到 2005 已經是第三版, 介紹的核心是 2.6.24。有[17]中譯版。 此書結構以流水帳方式帶過各個子系統,但稍嫌膚淺的僅僅介紹表面的細節,未能給予概 觀性的理論說明,也未能直指程式核心。篇幅常用於註記資料結構或函式用途,適合想尋 著麵包屑理解 Linux kernel 運作的探險家使用。 [18][0470343435] [19]Professional Linux Kernel Architecture 在2008 年出版,作者是 Wolfgang Mauerer,作者的背景是量子物理學家。在沒有社群內知名開發者的背書與協助下,他完成 了一本巨大的書籍,篇幅高達 1368 頁。 有別於 UTLK,也許是為了非科班出生的讀者,作者試著詳盡的敘述作業系統的基本概念, 另外一方面也以程式碼告訴讀者 Linux 的運作模式。 如果你讀不下純粹理論導向的作業系統教科書,而想透過 Linux理解一個作業系統的設計 原理,這是適合你的書。本書基於 Linux kernel 2.6.24. [20][0672329468] 身為知名的 kernal hacker, [21]Robert Love 在 [22]Linux Kernel Development (3rd Edition) 一書中為讀者拆解 Linux kernel source tree, 直接從設計理念切入,酌以程 式碼輔助,讀者需要有作業系統理論素養以及 Linux 開發經驗,才能消化理解筆者的解剖 。最新第三版發表於 2010 年初版,更新到 2.6.34. 簡體中譯版 [23]Linux ?核??与??翻譯自 Linux Kernel Development 第二版。正體 中文版有維科圖書有限公司出版沈中庸, 沈彥男翻譯的 [24]Linux 核心開發指南, 2/e。 [25][0596002556] [26]Linux Network Internals 的作者是 [27]Christian Benvenuti,發表於 2005 年。 少數專談 Linux Network stacks 的書籍,作者循序的從設定工具、核心啟動開始,逐一 介紹封包傳送接受、Bridging、IPv4、Neighboring Subsystem 與 Routing。 書中涵蓋了 Layer 2, Layer 3 等協定, 可惜遺漏了 IPv6, IGMP, PIM, Traffic Control, [28]Netfilter, Virtual devices (802.1Q, bonding, IPIP, GRE) 等等重要原 件。讀者需要基本開發能力與網路協定常識。此書有[29]中譯版。 [30][1584504811] [31]The Linux TCP/IP Stack: Networking for Embedded Systems [32]第一版發表與 2004 年,最新[33]第二版 2006 年,針對的版本是 2.6.16,作者是 Thomas F. Herbert 。此書對於讀者的定位不明。雖然意圖以一個章節討論嵌入式系統中的 TCP/IP Stack,但 除了說明一般嵌入式系統需求外,缺乏實際有用資訊。 書籍想涵蓋各種 TCP/IP Stack 所涵蓋的項目,但章節設計雜亂,從基本的 Network Stack 開始介紹,對於 API 部分又缺乏系統性描述。既無法瞭解網路協定,或撰寫網路程 式或作業系統核心架構。 書中時常夾雜敘述與程式碼,令讀者難以連貫消化,讀者需要開啟原始程式碼才能領會作 者的。這是一本關於網路協定的原始碼註記,適合已具核心開發經驗的開發者參考使用, 考量其版本日期,書籍的功能可能比自行追蹤程式碼的效用還差。另外,若你想瞭解嵌入 式系統,這也不是你該買的書。 [34][0596005903] [35]Linux Device Drivers, 3rd Edition* 的作者是 [36]Jonathan Corbet ([37]LWN 的 [38]創辦人)、[39]Alessandro Rubini、[40]Greg Kroah-Hartman。即便 LDD3 已經出版 許久,還是所有想寫 Linux kernel driver 的第一優先入門參考書阿。此書有[41]中譯版 。 LDD3 務實的從實做範例開始,帶領讀者理解各種 subsystem,含括了入門操作與基本觀念 ,對於初次開發 lkm 的開發者提供了燈塔般的指引。 LDD3 授權採 [42]CC BY-SA 2.0,線上版可於此下載 [43]http://lwn.net/Kernel/LDD3/ 。但由於書籍年代較久,針對的核心版本為 2.6.10,書中範例需要一點調整才能正常運作 。已有同好改了幾份擺在 github ([44]jesstess, [45]martinezjavier). [46][0132396556] [47]Essential Linux Device Drivers 的作者是長期在 IBM 工作的 [48]Sreekrishnan Venkateswaran,參與 [49]Linux Watch, [50]PDA, [51]Nurse Call Systems, [52] Merlin Patient Care System 等等開發專案。有正體中譯版 [53]Linux驅動程式開發實戰 以及簡體中譯版 [54]精通Linux驅動程序開發。 這本書是作者的實務工程筆記,出版於 2008 年,針對核心為 2.6.23/2.6.24,透過此書 新手可以從中漫遊一個深具經驗的開發者,如何從原始碼迷霧之中理解 Linux device driver,老手或可從雜亂的描述中再次驗證自己的理解。 雖然篇幅高達 744 頁,卻被引用程式碼佔了許多頁面。這本書不足以提供開發者撰寫驅動 程式的基本觀念,也無法協助理解作業系統概觀。 作者另有一小冊 [55]Debugging Linux Systems 電子書短短九十頁,帶過幾個常見的核心 除錯工具與技巧,很有實務參考價值。 [56][0131181637] [57]《The Linux(R) Kernel Primer: A Top-Down Approach for x86 and PowerPC Architectures》出版於 2005 年,作者是 Claudia Salzberg Rodriguez, Gordon Fischer, Steven Smolski。有[58]中文版,但[59]評價頗差。 書名讓人非常期待總算有一本核心介紹書籍 x86 外的硬體平臺,畢竟 [60]RISC vs [61] CISC 架構的不同, [62]endianness, [63]alignment, [64]calling convention 等,應當 有許多寫核心驅動程式應該注意得事項。但是整本書只在 2.2 節稍微說一下寫 Assembly 時,PowerPC, x86 的指令差異,剩下的細節根本沒提! 整本書還是著重在一般核心的結構介紹。 而書中除了少量的插圖之外,根本沒有沒有多少邏輯上的說明跟描述。通篇拆解程式碼, 對資料結構作註解。這些資訊任何有點基礎的工程師都可自行閱讀程式碼及程式碼註解。 新入門工程師還可能因?書中解釋而疑惑。 除非你想寫沒有價值的書評,否則不建議購買。 [65][0131492470] [66]Linux(R) Debugging and Performance Tuning: Tips and Techniques 出版於 2005, 作者是 Steve Best。此書少見的從除了應用程式之外,還從核心切入的除錯、效能測試書 籍,因?這方面的技術資訊總是一下就超過保鮮期。 作者試著含括基本的 Profiling 實務開始,介紹 gdb, 應用程式記憶體管理,再講核心的 各種資訊界面。很可惜,以一本專講除錯與效能測試的書來說,範例與介紹過於粗淺,以 第十二章 Dynamic Probes 為例,其介紹深度可能還比不上 [67]Documents/kprobes.txt 中的概念介紹與 IBM developerWorks 的[68]範例介紹。 適合剛切換到 Linux 的開發者,可概略學得各種基本開發工具者的入門資訊。 2011-03-17 18:00 更新 增列相關中譯版本連接,感謝 [69]ansoncat 告知資訊。 References: [1] http://people.debian.org.tw/~chihchun [2] http://people.debian.org.tw/~chihchun/2011/03/17/10-linux-kernel-books/ [3] http://en.wikipedia.org/wiki/Amazon_Affiliates#Third-party_sellers [4] http://www.gnu.org/software/global/ [5] http://www.vim.org/ [6] http://lxr.linux.no/ [7] http://blog.rlove.org/ [8] http://www.kroah.com/linux/ [9] http://www.anobii.com/chihchun/books/?filterType=3&filterValue=7&tagPage=1&doScroll=true [10] http://www.amazon.com/gp/product/0596100795?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0596100795 [11] http://www.amazon.com/gp/product/0596100795?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0596100795 [12] http://creativecommons.org/licenses/by-sa/2.5/ [13] http://www.kroah.com/lkn/ [14] http://www.amazon.com/gp/product/0596005652?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0596005652 [15] http://www.amazon.com/gp/product/0596005652?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0596005652 [16] http://www.sprg.uniroma2.it/home/cesati/ [17] http://www.anobii.com/books/LINUX%E6%A0%B8%E5%BF%83%E8%A9%B3%E8%A7%A3%EF%BC%88%E4%B8%89%E7%89%88%EF%BC%89/9789867794833/01a1519d5282b63a4a/ [18] http://www.amazon.com/gp/product/0470343435?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0470343435 [19] http://www.amazon.com/gp/product/0470343435?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0470343435 [20] http://www.amazon.com/gp/product/0672329468?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0672329468 [21] http://rlove.org/ [22] http://www.amazon.com/gp/product/0672329468?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0672329468 [23] http://www.books.com.tw/exep/prod/china/chinafile.php?item=CN10623111 [24] http://www.anobii.com/books/Linux_%E6%A0%B8%E5%BF%83%E9%96%8B%E7%99%BC%E6%8C%87%E5%8D%97,_2e/9789867503084/01f52037ae93f55382/ [25] http://www.amazon.com/gp/product/0596002556?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0596002556 [26] http://www.amazon.com/gp/product/0596002556?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0596002556 [27] http://benve.info/ [28] http://www.netfilter.org/ [29] http://www.oreilly.com.tw/product2_linux.php?id=a204 [30] http://www.amazon.com/gp/product/1584504811?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=1584504811 [31] http://www.amazon.com/gp/product/1584504811?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=1584504811 [32] http://www.amazon.com/gp/product/1584502843?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=1584502843 [33] http://www.amazon.com/gp/product/1584504811?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=1584504811 [34] http://www.amazon.com/gp/product/0596005903?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0596005903 [35] http://www.amazon.com/gp/product/0596005903?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0596005903 [36] http://www.oreillynet.com/pub/au/592 [37] http://lwn.net/ [38] http://en.wikipedia.org/wiki/LWN.net [39] http://www.linux.it/~rubini/ [40] http://www.kroah.com/linux/ [41] http://www.oreilly.com.tw/product_linux.php?id=a184_toc [42] http://creativecommons.org/licenses/by-sa/2.0/ [43] http://lwn.net/Kernel/LDD3/ [44] https://github.com/jesstess/ldd3-examples/ [45] https://github.com/martinezjavier/ldd3 [46] http://www.amazon.com/gp/product/0132396556?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0132396556 [47] http://www.amazon.com/gp/product/0132396556?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0132396556 [48] http://elinuxdd.com/~elinuxdd/elinuxdd.docs/aboutme.html [49] http://www.research.ibm.com/WearableComputing/linuxwatch/linuxwatch.html [50] http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Device-Profile-CDL-Paron-secure-PDA/ [51] http://www.hill-rom.com/usa/NaviCare_NurseCall.htm [52] http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Device-Profile-Merlin-Patient-Care-System/ [53] http://www.anobii.com/books/Linux%E9%A9%85%E5%8B%95%E7%A8%8B%E5%BC%8F%E9%96%8B%E7%99%BC%E5%AF%A6%E6%88%B0/9789866348174/017600ce73d44ab65e/ [54] http://www.anobii.com/books/Essential_Linux_device_drivers/9787115206473/019c9e0bf8b5932e5f/ [55] http://www.anobii.com/books/Debugging_Linux_Systems/9780136123545/01c4d74310f48c2430/ [56] http://people.debian.org.tw/~chihchun/wp-content/uploads/2011/03/0131181637.jpg
[57] http://www.amazon.com/gp/product/0131181637/ref=as_li_ss_tl?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0131181637 [58] http://www.anobii.com/books/The_Linux_Kernel_Primer_%E4%B8%AD%E6%96%87%E7%89%88/9789867199614/013342e1203c95f23a/ [59] http://joyueng.twbbs.org/2006/12/31/the-linux-kernel-primer-chinese-edition/ [60] http://en.wikipedia.org/wiki/Reduced_instruction_set_computing [61] http://en.wikipedia.org/wiki/Complex_instruction_set_computing [62] http://en.wikipedia.org/wiki/Endianness [63] http://en.wikipedia.org/wiki/Data_structure_alignment [64] http://en.wikipedia.org/wiki/Calling_convention [65] http://www.amazon.com/gp/product/0131492470/ref=as_li_ss_tl?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0131492470 [66] http://www.amazon.com/gp/product/0131492470/ref=as_li_ss_tl?ie=UTF8&tag=rexsblahblahb-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0131492470 [67] http://www.kernel.org/doc/Documentation/kprobes.txt [68] http://www.ibm.com/developerworks/library/l-kprobes.html [69] http://blog.ansoncat.com/ -- http://people.debian.org.tw/~chihchun/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.53.166

03/17 20:10,
能看完這些書還寫書評真是太強大了..
03/17 20:10

03/17 21:05,
感激
03/17 21:05

03/17 22:30,
強大,我只看過The Linux Kernel Primer,這本真的不太推
03/17 22:30

03/17 22:37,
理由是它也只帶你看程式碼,沒有給個更具體的概念,難懂
03/17 22:37

03/18 00:25,
真的不推The Linux Kernel Primer +1
03/18 00:25

03/18 02:08,
太感謝了 最近剛好再找參考書
03/18 02:08
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.53.166

03/18 15:14,
感謝提供的資訊...
03/18 15:14

03/19 00:54,
讚...
03/19 00:54

03/20 00:00,
感恩
03/20 00:00
-- 我愛用UD 我希望Blizzard可以讓nec招換出來的骷髏兵強壯一點 最好身高一米九 一拳三百磅 不然骷髏兵實在太廢~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.117.169
文章代碼(AID): #1DXkj1Vy (SFFamily)