Linux设备驱动程序(第三版)
Linux设备驱动程序(第三版)
Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman
魏永明, 耿岳, 钟书毅 译
出版时间:2005年12月
页数:588
本书是经典著作《Linux设备驱动程序》的第三版。如果您希望在Linux操作系统上支持计算机外部设备,或者在Linux上运行新的硬件,或者只是希望一般性地了解Linux内核的编程,就一定要阅读本书。本书描述了如何针对各种设备编写驱动程序,而在过去,这些内容仅仅以口头形式交流,或者零星出现在神秘的代码注释中。
本书的作者均是Linux社区的领导者。Jonathan Corbet虽不是专职的内核代码贡献者,但他是备受关注的LWN.net新闻及信息网站的执行编辑。Alessandro Rubini是一名Linux代码贡献者,也是活跃的意大利Linux社区的灵魂人物。Greg Kroah-Hartman是目前内核中USB、PCI和驱动程序核心子系统(本书均有讲述)的维护者。
本书的这个版本已针对Linux内核的2.6.10版本彻底更新过了。内核的这个版本针对常见任务完成了合理化设计及相应的简化,如即插即用、利用sysfs文件系统和用户空间交互,以及标准总线上的多设备管理等等。
要阅读并理解本书,您不必首先成为内核黑客;只要您理解C语言并具有Unix系统调用的一些背景知识即可。您将学到如何为字符设备、块设备和网络接口编写驱动程序。为此,本书提供了完整的示例程序,您不需要特殊的硬件即可编译和运行这些示例程序。本书还在单独的章节中讲述了PCI、USB和tty(终端)子系统。对期望了解操作系统内部工作原理的读者来讲,本书也深入阐述了地址空间、异步事件以及I/O等方面的内容。
本书涵盖的主题包括:
● 完整的字符、块、tty(终端)及网络驱动程序
● 驱动程序的调试
● 中断
● 计时问题
● 并发、锁定和对称多处理器系统(SMP)
● 内存管理和DMA
● 驱动程序模型和sysfs
● 热插拔设备
● 对常见总线的描述,包括SCSI、PCI、USB和IEEE1394(火线)
  1. 前言
  2. 第一章 设备驱动程序简介
  3. 设备驱动程序的作用
  4. 内核功能划分
  5. 设备和模块的分类
  6. 安全问题
  7. 版本编号
  8. 许可证条款
  9. 加入内核开发社团
  10. 本书概要
  11. 第二章 构造和运行模块
  12. 设置测试系统
  13. Hello World模块
  14. 核心模块与应用程序的对比
  15. 编译和装载
  16. 内核符号表
  17. 预备知识
  18. 初始化和关闭
  19. 模块参数
  20. 在用户空间编写驱动程序
  21. 快速参考
  22. 第三章 字符设备驱动程序
  23. scull的设计
  24. 主设备号和次设备号
  25. 一些重要的数据结构
  26. 字符设备的注册
  27. open和release
  28. scull的内存使用
  29. read和write
  30. 试试新设备
  31. 快速参考
  32. 第四章 调试技术
  33. 内核中的调试支持
  34. 通过打印调试
  35. 通过查询调试
  36. 通过监视调试
  37. 调试系统故障
  38. 调试器和相关工具
  39. 第五章 并发和竞态
  40. scull的缺陷
  41. 并发及其管理
  42. 信号量和互斥体
  43. completion
  44. 自旋锁
  45. 锁陷阱
  46. 除了锁之外的办法
  47. 快速参考
  48. 第六章 高级字符驱动程序操作
  49. ioctl
  50. 阻塞型I/O
  51. poll和select
  52. 异步通知
  53. 定位设备
  54. 设备文件的访问控制
  55. 快速参考
  56. 第七章 时间、延迟及延缓操作
  57. 度量时间差
  58. 获取当前时间
  59. 延迟执行
  60. 内核定时器
  61. tasklet
  62. 工作队列
  63. 快速参考
  64. 第八章 分配内存
  65. kmalloc函数的内幕
  66. 后备高速缓存
  67. get_free_page和相关函数
  68. vmalloc及其辅助函数
  69. per-CPU变量
  70. 获取大的缓冲区
  71. 快速参考
  72. 第九章 与硬件通信
  73. I/O端口和I/O内存
  74. 使用I/O端口
  75. I/O端口示例
  76. 使用I/O内存
  77. 快速参考
  78. 第十章 中断处理
  79. 准备并口
  80. 安装中断处理例程
  81. 实现中断处理例程
  82. 顶半部和底半部
  83. 中断共享
  84. 中断驱动的I/O
  85. 快速参考
  86. 第十一章 内核的数据类型
  87. 使用标准C语言类型
  88. 为数据项分配确定的空间大小
  89. 接口特定的类型
  90. 其他有关移植性的问题
  91. 链表
  92. 快速参考
  93. 第十二章 PCI驱动程序
  94. PCI接口
  95. ISA回顾
  96. PC/104和PC/104+
  97. 其他的PC总线
  98. SBus
  99. NuBus
  100. 外部总线
  101. 快速参考
  102. 第十三章 USB驱动程序
  103. USB设备基础
  104. USB和Sysfs
  105. USB urb
  106. 编写USB驱动程序
  107. 不使用urb的USB传输
  108. 快速参考
  109. 第十四章 Linux设备模型
  110. kobject、kset和子系统
  111. 低层sysfs操作
  112. 热插拔事件的产生
  113. 总线、设备和驱动程序
  114. 各环节的整合
  115. 热插拔
  116. 处理固件
  117. 快速索引
  118. 第十五章 内存映射和DMA
  119. Linux的内存管理
  120. mmap设备操作
  121. 执行直接I/O访问
  122. 直接内存访问
  123. 快速参考
  124. 第十六章 块设备驱动程序
  125. 注册
  126. 块设备操作
  127. 请求处理
  128. 其他一些细节
  129. 快速参考
  130. 第十七章 网络驱动程序
  131. snull设计
  132. 连接到内核
  133. net_device结构细节
  134. 打开和关闭
  135. 数据包传输
  136. 数据包的接收
  137. 中断处理例程
  138. 不使用接收中断
  139. 链路状态的改变
  140. 套接字缓冲区
  141. MAC 地址解析
  142. 定制 ioctl 命令
  143. 统计信息
  144. 组播
  145. 其他知识点详解
  146. 快速参考
  147. 第十八章 TTY驱动程序
  148. 小型TTY驱动程序
  149. tty_driver函数指针
  150. TTY线路设置
  151. ioctls
  152. proc和sysfs对TTY设备的处理
  153. tty_driver结构详解
  154. tty_operations结构详解
  155. tty_struct结构详解
  156. 快速参考
  157. 参考书目
书名:Linux设备驱动程序(第三版)
译者:魏永明, 耿岳, 钟书毅 译
国内出版社:中国电力出版社
出版时间:2005年12月
页数:588
书号:7-5083-3863-4
原版书出版商:O'Reilly Media
Jonathan Corbet
 
Jonathan Corbet早在1981年就开始接触BSD Unix的源代码。那时,科罗拉多大 学的一名讲师让他“修正”其中的分页算法。从那时起直到现在,他深入研究了他 所遇到的每一个系统,其中包括VAX、Sun、Ardent以及x86系统的驱动程序。他 在 1993年第一次接触Linux系统,从此以后一直从事Linux的开发。Corbet先生是 《Linux Weekly News》(http://LWN.net)的创始人和执行主编。他和妻子及两个孩子生活在科罗拉多州的玻尔得市(Boulder)。
 
 
Alessandro Rubini
 
Alessandro Rubini在获得电子工程师资格后不久,他就安装了Linux 0.99.14版 本。后来,他在Pavia大学获得了计算机科学博士学位。但很快他就离开了大学, 因为他实在不想写文章。现在,他是一名自由撰稿人,编写有关设备驱动程序方面的文章(这也许是命运的安排)。在他的小孩出世之前,他曾是一名年轻的黑客,而现在他是一位老练、偏爱非PC计算机平台开发的自由软件鼓吹者。
 
 
Greg Kroah-Hartman
 
Greg Kroah-Hartman has been building the Linux kernel since 1996 and started
writing Linux kernel drivers in 1999. He is currently the maintainer of the USB,
PCI,driver core,and sysfs subsystems in the kernel source tree and is also one half of the -stable kernel release team. He created the udev program and maintains the Linux hotplug userspace project. He is a Gentoo Linux developer as well as the coauthor of the third edition of Linux Device Drivers (O'Reilly) and a contributing editor to Linux Journal. He also created and maintains the Linux Device Driver Kit. He currently works for SUSE Labs/Novell,doing various Linux kernelrelated tasks.

Greg Kroah-Hartman has been writing Linux kernel drivers since 1999 and is currently the maintainer for the USB, PCI, I2C, driver core, and sysfs kernel subsystems. He is also the maintainer of the udev and hotplug userspace programs, as well as a Gentoo kernel maintainer, ensuring that his inbox is never empty. He is a contributing editor to Linux Journal magazine.
 
 
本书封面上的动物是一匹脱缰的烈马。这副图的彩色版可见 William Thayer所著的《Marvels of the New West: A Vivid Portrayal of the Stupendous Marvels in the Vast Wonderland West of the Missouri River》(The Henry Bill Publishing Co., Norwich, CT,1888)。Thayer援引一名仓库管理员的话详细描述了一匹脱缰的烈马:“当马受惊时,它会将自己的头放在两条前腿中间,弓起它的后背,就像一只发怒的猫,然后,它跃向空中,并发出一声可怕的嘶鸣。有时,它会不停地跳跃,直到完全疲惫为止。如果骑手还在马鞍上,那么他也会一样疲惫。当然,骑在受惊的马身上而不被甩下来是很困难的,尤其当那马是一匹真正训练有素的烈马时,它每跳一下,骑手都会往旁边倾斜一次。这种墨西哥式的马鞍上有两条肚带,这样就能牢牢拴住马鞍,但是两条肚带经常会使马受惊 ,而只有一条肚带时却不会。有时候,不把马惹急了就没办法系好侧肚带。”