LINUX设备驱动程序(第二版)
LINUX设备驱动程序(第二版)
Alessandro Rubini, Jonathan Corbet
魏永明, 骆刚, 姜君 译
出版时间:2002年11月
页数:584
本书面向的读者是那些想在Linux操作系统下支持各种计算机外设,或者想开发新的硬件并在Linux下运行的人们。Linux是Unix市场中增长最快的部分,并且在许多应用领域获得了广泛的支持。现在,人们越来越清楚地认识到Linux是嵌入式系统的一个极佳平台,本书第二版已经成为该领域的经典之作。本书作者将以往那些口述式的经验和知识、或者隐晦的源代码注释上升为系统地讲述各种设备驱动程序编写方法的著作。
Linux内核的2.4版在设备驱动程序方面发生了重大变化,它简化了许多工作,但同时提供了许多精细的新功能,可让驱动程序更加高效、灵活。本书第二版透彻地讲述了这些变化,并介绍了许多新的处理器和总线结构。
要阅读和欣赏本书,并不要求您是一名内核黑客,您所需要具备的只是对C语言和一些Unix系统调用的背景知识的了解。本书循序渐进地讲述了字符设备、块设备和网络接口的驱动程序,并且给出了功能完善的示例驱动程序。这些示例驱动程序说明了驱动程序设计中的许多问题以及解决方法,并且不需要任何特定的硬件就可以运行。本书第二版的重要修订包括:对对称多处理器(SMP)系统和锁机制的讨论、对新CPU以及新近支持的总线的讨论等等。
如果您对操作系统完成其任务的方式感兴趣,那么本书还提供了对地址空间、异步事件和I/O的深入讨论。
可移植性是本书的一个主要关注点。尽管本书主要讲述2.4版本,但在可能的情况下,我们也讲述了2.4版本以前直到2.0版本的相关内容。本书还介绍了如何在各种硬件平台上实现最大程度的可移植性。示例驱动程序已经在IA32(PC)和IA64、PowerPC、SPARC和SPARC64、Alpha、ARM以及MIPS等平台上经过了测试。
  1. 前言
  2. 第一章 设备驱动程序简介
  3. 设备驱动程序的作用
  4. 内核功能划分
  5. 设备和模块分类
  6. 安全问题
  7. 版本编号
  8. 许可证条款
  9. 加入内核开发社团
  10. 本书概要
  11. 第二章 构建和运行模块
  12. 核心模块与应用程序的对比
  13. 编译和装载
  14. 内核符号表
  15. 初始化和关闭
  16. 使用资源
  17. 自动和手动配置
  18. 在用户空间编写驱动程序
  19. 向后兼容性
  20. 快速参考
  21. 第三章 字符设备驱动程序
  22. scull的设计
  23. 主设备号和次设备号
  24. 文件操作
  25. file结构
  26. open和release
  27. scull的内存使用
  28. 竞态简介
  29. read和write
  30. 试试新设备
  31. 设备文件系统
  32. 向后兼容性
  33. 快速参考
  34. 第四章 调试技术
  35. 通过输出调试
  36. 通过查询调试
  37. 通过监视调试
  38. 调试系统故障
  39. 调试程序和相关工具
  40. 第五章 增强的字符驱动程序操作
  41. ioctl
  42. 阻塞型I/O
  43. poll 和 select
  44. 异步通知
  45. 定位设备
  46. 设备文件的访问控制
  47. 向后兼容性
  48. 快速参考
  49. 第六章 时间流
  50. 内核中的时间间隔
  51. 获取当前时间
  52. 延迟执行
  53. 任务队列
  54. 内核定时器
  55. 向后兼容性
  56. 快速参考
  57. 第七章 获取内存
  58. kmalloc函数的内幕
  59. 后备高速缓存
  60. get_free_page 和相关函数
  61. vmalloc与相关函数
  62. 引导时的内存分配
  63. 向后兼容性
  64. 快速参考
  65. 第八章 硬件管理
  66. I/O端口和I/O内存
  67. 使用I/O端口
  68. 使用数字I/O端口
  69. 使用I/O内存
  70. 向后兼容性
  71. 快速参考
  72. 第九章 中断处理
  73. 中断的整体控制
  74. 准备并口
  75. 安装中断处理程序
  76. 实现中断处理程序
  77. tasklet和底半部处理
  78. 中断共享
  79. 中断驱动的I/O
  80. 竞态
  81. 向后兼容性
  82. 快速参考
  83. 第十章 合理使用数据类型
  84. 使用标准C语言类型
  85. 为数据项分配确定的空间大小
  86. 接口特定的类型
  87. 其他有关移植性的问题
  88. 链表
  89. 快速参考
  90. 第十一章 kmod和高级模块化
  91. 按需加载模块
  92. 模块间通信
  93. 模块中的版本控制
  94. 向后兼容性
  95. 快速参考
  96. 第十二章 装载块设备驱动程序
  97. 注册驱动程序
  98. 头文件 blk.h
  99. 请求处理简介
  100. 请求处理详解
  101. 挂装和卸装是如何工作的
  102. ioctl方法
  103. 可移动设备
  104. 可分区设备
  105. 中断驱动的块设备驱动程序
  106. 向后兼容性
  107. 快速参考
  108. 第十三章 mmap和DMA
  109. Linux的内存管理
  110. mmap设备操作
  111. kiobuf接口
  112. 直接内存访问和总线主控
  113. 向后兼容性
  114. 快速参考
  115. 第十四章 网络驱动程序
  116. snull的设计
  117. 连接到内核
  118. net_device结构的细节
  119. 打开和关闭
  120. 数据包传输
  121. 数据包的接收
  122. 中断处理程序
  123. 链路状态的改变
  124. 套接字缓冲区
  125. MAC 地址解析
  126. 定制ioctl命令
  127. 统计信息
  128. 组播
  129. 向后兼容性
  130. 快速参考
  131. 第十五章 外设总线综述
  132. PCI接口
  133. ISA回顾
  134. PC/104和PC/104+
  135. 其他的PC总线
  136. SBus
  137. NuBus
  138. 外部总线
  139. 向后兼容性
  140. 快速参考
  141. 第十六章 内核源代码的物理布局
  142. 引导内核
  143. 引导之前
  144. init进程
  145. kernel目录
  146. fs目录
  147. mm目录
  148. net目录
  149. ipc和lib
  150. include和arch
  151. drivers目录
  152. 参考文献
  153. 词汇表
书名:LINUX设备驱动程序(第二版)
译者:魏永明, 骆刚, 姜君 译
国内出版社:中国电力出版社
出版时间:2002年11月
页数:584
书号:7-5083-1294-5
原版书出版商:O'Reilly Media
Alessandro Rubini
 
Alessandro Rubini在获得电子工程师资格后不久,他就安装了Linux 0.99.14版 本。后来,他在Pavia大学获得了计算机科学博士学位。但很快他就离开了大学, 因为他实在不想写文章。现在,他是一名自由撰稿人,编写有关设备驱动程序方面的文章(这也许是命运的安排)。在他的小孩出世之前,他曾是一名年轻的黑客,而现在他是一位老练、偏爱非PC计算机平台开发的自由软件鼓吹者。
 
 
Jonathan Corbet
 
Jonathan Corbet早在1981年就开始接触BSD Unix的源代码。那时,科罗拉多大 学的一名讲师让他“修正”其中的分页算法。从那时起直到现在,他深入研究了他 所遇到的每一个系统,其中包括VAX、Sun、Ardent以及x86系统的驱动程序。他 在 1993年第一次接触Linux系统,从此以后一直从事Linux的开发。Corbet先生是 《Linux Weekly News》(http://LWN.net)的创始人和执行主编。他和妻子及两个孩子生活在科罗拉多州的玻尔得市(Boulder)。
 
 
本书封面上的动物是一匹脱缰的烈马。这副图的彩色版可见 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援引一名仓库管理员的话,详细描述了一匹脱缰的烈马:“当马受惊时,它会将自己的头放在两条前腿中间,弓起它的后背,就像一只发怒的猫,然后,它跃向空中,并发出一声可怕的嘶鸣。有时,它会不停地跳跃,直到完全疲惫为止。如果骑手还在马鞍上,那么他也会一样疲惫。当然,骑在受惊的马身上而不被甩下来是很困难的,尤其当那马是一匹真正训练有素的烈马时,它每跳一下,骑手都会往旁边倾斜一次。这种墨西哥式的马鞍上有两条肚带,这样就能牢牢拴住马鞍,但是两条肚带经常会使马受惊 ,而只有一条肚带时却不会。有时候,不把马惹急了就没办法系好侧肚带。”