转自:http://www.openfoundry.org/index.php?option=com_content&task=view&id=8325&Itemid=4;isletter=1
2011-05-05
11:02作者是
Rex
我相信絕大部分 Linux 開發者都會告訴你,Driver 的開發比 Linux Application 容易許多,即便寫驅動程式聽起來莫名偉大,其實也不過是一段 C/assembly 的組合程式碼。有別於桌面應用程式,Linux kernel API 較少因爲不同的新軟硬體規格,而進行大幅度 API 更動,反倒是參數的簡化倒是十分常見。由於是傑出的軟體開發者撰寫的核心架構,穩定性已經十分可靠。
相較於 userland 高度複雜的設定機制,Linux Kernel 暴露的界面十分簡單,在硬體穩定的前提之下,你也很難碰到 API 反應與預期不符合的處境。一般開發者對於核心驅動程式上手的時間,應該不會比開發桌面軟體來的更久。花費的時間應該多是在研讀硬體手冊,以及因不嚴謹的開發習慣造成臭蟲而所需的除錯時間。
對於深具經驗的開發者,在學習開發 Linux kernel driver 時,最快的方法莫過於直接解開 Kernel tarball,切進欲開發的 subsystem 目錄,拿出 global, vim, LXR 直接把現成程式碼當作範例學習,很快就可以理解程式結構。不過,偶爾還是需要參考書來驗證對於架構的理解是否正確,另外接觸新的 subsystem 時先閱讀入門文章也可以減少無謂的撞牆期。
所幸,幾位 Linux kernel hacker 也同時是傑出的文件作者。在 Linux kernel source tree 中已有一些各子系統的架構、操作參考文件,涵蓋了基本的 coding style、設計哲學等。另外,像是 Robert Love, Greg Kroah-Hartman (GregKH, PCI, USB maintainer) 等開發者也出版了完整的書籍,很值得參考。
不過市面上針對 Linux kernel 開發的書籍也不少,那一本是適合你的呢?這類的技術書籍,通常針對不同的讀者而有不同的書寫內容,有的偏重知識,有的偏重操作實務。出版版次也會影響所介紹的 API 差異,造成無法編譯其範例,但是也並不因為是舊書,所談之理論就不正確。
以下分享筆者對於市面上 2005 年之後出版的核心開發書籍的評論,希望對於想擴充團隊圖書館的朋友提供些參考。
▲ 圖1《Linux
Kernel in a Nutshell》書籍封面
《Linux Kernel in a Nutshell》是 2006 年底發行,作者是 GregKH,使用核心為 2.6.18,部分操作方式或指令已經略有更改。GregKH 基於讓更多新手參與開發行列,針對的讀者是從未編譯過 Linux kernel,想瞭解下載、設定、編譯需求等等細節,適合剛從其他平臺進入 Linux 核心開發的朋友,可以較快熟悉核心編譯的操作程序。書內主要介紹通用性知識,因此未提到各 distro 間安裝 kernel 的細節 (如 initrd 建制方式)。
LKN 已採 CC BY-SA 2.5 授權。電子書可於 GregKH 的網頁下載。
▲ 圖2《Understanding
the Linux Kernel, Third Edition》書籍封面
《Understanding the Linux Kernel, Third Edition》這本由兩位博士 Daniel P. Bovet 與 Marco Cesati 所撰寫,從 2000 年底出版之後,到 2005 已經是第三版,介紹的核心是 2.6.24。有中譯版。
此書結構以流水帳方式帶過各個子系統,但稍嫌膚淺的僅僅介紹表面的細節,未能給予概觀性的理論說明,也未能直指程式核心。篇幅常用於註記資料結構或函式用途,適合想尋著麵包屑理解 Linux kernel 運作的探險家使用。
▲ 圖3《Professional
Linux Kernel Architecture》書籍封面
《Professional Linux Kernel Architecture》在 2008 年出版,作者是 Wolfgang Mauerer,作者的背景是量子物理學家。在沒有社群內知名開發者的背書與協助下,他完成了一本巨大的書籍,篇幅高達 1368 頁。
有別於 UTLK,也許是為了非科班出生的讀者,作者試著詳盡的敘述作業系統的基本概念,另外一方面也以程式碼告訴讀者 Linux 的運作模式。
如果你讀不下純粹理論導向的作業系統教科書,而想透過 Linux 理解一個作業系統的設計原理,這是適合你的書。本書基於 Linux kernel 2.6.24。
▲ 圖4《Linux
Kernel Development (3rd Edition)》書籍封面
身為知名的 kernal hacker,Robert Love 在《Linux Kernel Development (3rd Edition)》一書中為讀者拆解 Linux kernel source tree,直接從設計理念切入,酌以程式碼輔助,讀者需要有作業系統理論素養以及 Linux 開發經驗,才能消化理解筆者的解剖。最新第三版發表於 2010 年,書中 Linux kernal 則更新到 2.6.34。
簡體中譯版《Linux 内核设计与实现》翻譯自《Linux Kernel Development》第二版。正體中文版有維科圖書有限公司出版沈中庸, 沈彥男翻譯的《Linux 核心開發指南, 2/e》。
▲ 圖5《Linux
Network Internals》書籍封面
《Linux Network Internals》的作者是 Christian Benvenuti,發表於 2005 年。少數專談 Linux Network stacks 的書籍,作者循序的從設定工具、核心啟動開始,逐一介紹封包傳送接受、Bridging、IPv4、Neighboring Subsystem 與 Routing。
書中涵蓋了 Layer 2、Layer 3 等協定, 可惜遺漏了 IPv6、IGMP、PIM、Traffic Control、Netfilter、Virtual devices (802.1Q, bonding, IPIP, GRE) 等等重要元件。讀者需要基本開發能力與網路協定常識才好上手。此書有中譯版。
▲ 圖6《The
Linux TCP/IP Stack: Networking for Embedded Systems 第一版》書籍封面
《The Linux TCP/IP Stack: Networking for Embedded Systems 第一版》發表於 2004 年,最新第二版則於 2006 年發表,針對的版本是 2.6.16,作者是 Thomas F. Herbert。此書對於讀者的定位不明。雖然意圖以一個章節討論嵌入式系統中的 TCP/IP Stack,但除了說明一般嵌入式系統需求外,缺乏實際有用資訊。
書籍想涵蓋各種 TCP/IP Stack 所涵蓋的項目,但章節設計雜亂,從基本的 Network Stack 開始介紹,對於 API 部分又缺乏系統性描述。既無法瞭解網路協定,或撰寫網路程式或作業系統核心架構。
書中時常夾雜敘述與程式碼,令讀者難以連貫消化,讀者需要開啟原始程式碼才能領會作者的思路。這是一本關於網路協定的原始碼註記,適合已具核心開發經驗的開發者參考使用,考量其版本日期,書籍的功能可能比自行追蹤程式碼的效用還差。另外,若你想瞭解嵌入式系統,這也不是你該買的書。
▲ 圖7《Linux
Device Drivers, 3rd Edition》書籍封面
《Linux Device Drivers, 3rd Edition》的作者是 Jonathan Corbet(LWN 的創辦人)、Alessandro Rubini、GregKH。即便 LDD3 已經出版許久,還是所有想寫 Linux kernel driver 的第一優先入門參考書。此書有中譯版。
《LDD3》務實的從實做範例開始,帶領讀者理解各種 subsystem,含括了入門操作與基本觀念,對於初次開發 loadable kernel module (LKM) 的開發者提供了燈塔般的指引。
《LDD3》授權採 CC BY-SA 2.0,線上版可於此下載http://lwn.net/Kernel/LDD3/。但由於書籍年代較久,針對的核心版本為
2.6.10,書中範例需要一點調整才能正常運作。已有同好改了幾份擺在 github (jesstess, martinezjavier)。
▲ 圖8《Essential
Linux Device Drivers》書籍封面
《Essential Linux Device Drivers》的作者是長期在 IBM 工作的 Sreekrishnan Venkateswaran,參與 Linux Watch、PDA、Nurse Call Systems、Merlin Patient Care System 等等開發專案。有正體中譯版《Linux 驅動程式開發實戰》,以及簡體中譯版《精通 Linux 驅動程序開發》。
這本書是作者的實務工程筆記,出版於 2008 年,針對核心為 2.6.23/2.6.24,透過此書新手可以從中漫遊一個深具經驗的開發者,如何從原始碼迷霧之中理解 Linux device driver,老手或許可從雜亂的描述中再次驗證自己的理解。
雖然篇幅高達 744 頁,卻被引用程式碼佔了許多頁面。這本書不足以提供開發者撰寫驅動程式的基本觀念,也無法協助理解作業系統概觀。
作者另有一小冊 Debugging Linux Systems 電子書短短 90 頁,帶過幾個常見的核心除錯工具與技巧,很有實務參考價值。
▲ 圖9《The
Linux(R) Kernel Primer: A Top-Down Approach for x86 and PowerPC Architectures》書籍封面
《The Linux(R) Kernel Primer: A Top-Down Approach for x86 and PowerPC Architectures》出版於 2005 年,作者是 Claudia Salzberg Rodriguez, Gordon Fischer, Steven Smolski。有中文版,但評價頗差。
書名讓人非常期待總算有一本核心介紹書籍是講述 x86 外的硬體平臺,畢竟 RISC vs CISC 架構的不同,endianness、alignment、calling convention 等,應當有許多寫核心驅動程式應該注意的事項。但是整本書只在 2.2 節稍微說一下寫 Assembly 時,PowerPC、x86 的指令差異,剩下的細節根本沒提!
整本書還是著重在一般核心的結構介紹。
而書中除了少量的插圖之外,根本沒有多少邏輯上的說明跟描述。通篇拆解程式碼,對資料結構作註解。這些資訊任何有點基礎的工程師都可自行閱讀程式碼及程式碼註解。新入門工程師還可能因爲書中解釋而疑惑。
除非你想寫沒有價值的書評,否則不建議購買。
▲ 圖10《Linux(R)
Debugging and Performance Tuning: Tips and Techniques》書籍封面
《Linux(R) Debugging and Performance Tuning: Tips and Techniques》出版於 2005,作者是 Steve Best。此書以一般這類書籍少見的內容著手,內容除了應用程式之外,還包括從核心切入的除錯、效能測試,而這方面的技術資訊總是一下就過時了。
作者試著從基本的 Profiling 實務開始,介紹 gdb、應用程式記憶體管理,再講核心的各種資訊界面。很可惜,以一本專講除錯與效能測試的書來說,範例與介紹過於粗淺,以第十二章 Dynamic Probes 為例,其介紹深度可能還比不上 Documents/kprobes.txt 中的概念介紹與 IBM developerWorks 的範例介紹。
適合剛切換到 Linux 的開發者,從這本書可概略學得各種基本開發工具的入門資訊。
作者簡介
蔡志展 (Rex Tsai) 或網名 chihchun,現為自由工作者,從事開源軟體顧問或開發服務。倡議並推廣自由軟體與開放源碼,早期 KaLUG 成員,現常出席 Tossug、 HackingThursday 聚會,亦是開源人年會 (COSCUP) 籌備志工。長期 Debian、OpenWrt 使用者。關注議題甚廣,進一步資訊請參考http://people.debian.org.tw/~chihchun/。
分享到:
相关推荐
《Linux驱动开发》是一本专为想要深入了解Linux系统内核及驱动程序开发的读者而编写的书籍。这本书以其简单易懂的语言和丰富的实践案例,帮助初学者和有经验的开发者们快速掌握Linux驱动开发的核心技术。 Linux驱动...
本书《嵌入式Linux应用开发完全手册》是一部深入浅出、系统全面的嵌入式Linux开发教程,它详细介绍了嵌入式Linux系统的开发流程,包括了从基础的系统安装和工具配置到上层GUI应用开发的各个环节。 首先,书中对...
《Linux设备驱动开发详解》是一本深度探讨Linux内核驱动程序开发的专业书籍,它以Linux 4.0内核为背景,为驱动工程师提供了一条深入理解与实践Linux设备驱动的路径。这本书涵盖了许多关键的知识点,对于想要在Linux...
“序言.doc”通常会介绍书籍的编写目的、适用人群、内容概览以及作者对Linux驱动开发的理解。这部分可以帮助读者更好地定位自己,了解学习此主题所需的基础知识,并为后续的学习做好准备。 总的来说,Linux驱动开发...
本书的编排非常适合初学者,从最简单的点亮一个LED灯的实例开始,逐步引导读者深入了解嵌入式Linux系统的配置、移植、裁剪内核,编写驱动程序,移植GUI系统等核心开发技能。通过理论与代码相结合的方式,本书力求让...
### Linux开发者眼中的10本顶级书籍 #### 1. **《Linux:The Textbook》** - **概述**:这本书是Linux开发者的必备手册之一。它不仅深入浅出地讲解了Linux系统的基础架构,如进程、文件系统、存储管理和接口设备等...
《Linux设备驱动开发详解-基于最新的Linux4.0内核》是一本深入探讨Linux设备驱动程序开发的专业书籍,其源码提供了丰富的实践示例,帮助读者理解如何在Linux操作系统下编写和调试驱动程序。该书涵盖了从基础概念到...
这份"Linux下开发书籍大全"集合了多种资源,可以帮助开发者提升技能,理解Linux系统与编程语言的结合应用。以下将针对标题、描述及标签中的关键点进行详细解读。 1. **C语言函数速查**: C语言是编程的基础,特别...
《Linux设备驱动开发详解——基于最新的Linux4.0内核》是一本专注于嵌入式Linux系统中的设备驱动程序开发的专业书籍。这本书的核心内容是讲解如何为Linux操作系统编写和理解设备驱动,以实现硬件与操作系统之间的...
内存管理是操作系统的核心部分,这本书详细介绍了Linux内核中的内存分配函数,如kmalloc、vmalloc等,让读者理解如何有效地管理和优化系统的内存资源,这对于系统调优和内核开发至关重要。 4. **《Linux+C编程一站...
《Linux1.0核心游记》是一本深入探讨Linux操作系统早期版本——Linux1.0核心的书籍。在1994年,Linux1.0的发布标志着开源操作系统的一个重要里程碑,它不仅为开发者提供了一个免费的、可自由修改的操作系统内核,也...
嵌入式Linux驱动开发是一项涉及多个知识领域的技术工作,主要包括操作系统底层原理、硬件架构以及编程技能等。I.MX6U是NXP公司的一款高性能、低功耗的多核应用处理器,特别适用于嵌入式Linux操作系统。在开发I.MX6U...
《Linux驱动程序开发第三版》是一本深入探讨Linux内核驱动程序编程的权威书籍,针对的是英文读者。这本书详尽地介绍了如何为Linux操作系统编写和优化设备驱动,是Linux开发者和系统工程师的重要参考资料。 在Linux...
Linux设备驱动程序开发是Linux操作系统中一项非常核心的技术,涉及到底层硬件与操作系统之间的交互。精通这一技术,意味着可以开发出适合特定硬件设备的驱动程序,进而实现设备功能的充分发挥。本书《精通LINUX设备...
《嵌入式Linux系统开发技术详解--基于ARM》是一本深度探讨嵌入式系统开发的专业书籍,主要聚焦在使用Linux操作系统在ARM架构上的应用。ARM(Advanced RISC Machines)是广泛应用在嵌入式领域的处理器架构,以其高...
综合以上书籍,嵌入式Linux开发教程将帮助读者从硬件设计到软件编程,从底层操作系统到上层应用开发进行全面学习。掌握这些知识,不仅能够提升个人技能,也能在实际项目中解决各种复杂问题,对于想从事或已经在...