[book]十本 Linux 核心开发书籍介绍

179 views
Skip to first unread message

Zhang Wanming

unread,
May 15, 2011, 11:24:33 PM5/15/11
to cdlug_community
Hi cdlugers,

推荐几本 Linux Kernel 开发书籍.

from: http://www.openfoundry.org/tw/tech-column/8325--linux-

我相信绝大部分 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/。 
--
blog:  ox0spy.tk
gtalk: ox0...@gmail.com

B.Tag

unread,
May 16, 2011, 2:21:09 AM5/16/11
to cdlug_c...@googlegroups.com
赞!

--
You received this message because you are subscribed to the Google Groups "Chengdu Linux User Group" group.
To post to this group, send email to cdlug_c...@googlegroups.com.
To unsubscribe from this group, send email to cdlug_communi...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/cdlug_community?hl=en.



--
http://www.boolsir.com

allen young

unread,
May 16, 2011, 5:27:43 AM5/16/11
to cdlug_c...@googlegroups.com
收藏

2011/5/16 B.Tag <bb....@gmail.com>

Shawn

unread,
May 16, 2011, 8:14:44 AM5/16/11
to cdlug_c...@googlegroups.com
2011/5/16 Zhang Wanming <ox0...@gmail.com>

>
>
> ▲ 图4 《Linux Kernel Development (3rd Edition)》书籍封面
>
LKD适合入门了解LINUX内核.

>
> ▲ 图7 《Linux Device Drivers, 3rd Edition》书籍封面
>

这本书原著不错,据说中文版估计是用google翻译的

>
> ▲ 图8 《Essential Linux Device Drivers》书籍封面
>

写驱动的参考书

其他几本看起来也不错,有机会读读


--
GNU powered it...
GPL protect it...
God blessing it...

regards
Shawn

Reply all
Reply to author
Forward
0 new messages