O'REILLY系列 LINUX设备驱动程序 (第3版)作者:(美)科波特(Corbet, J.)著;魏永明等译 出版时间:2006丛编项: O'REILLY系列内容简介 本书是经典著作《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第一章 设备驱动程序简介 9设备驱动程序的作用 10内核功能划分 12设备和模块的分类 14安全问题 15版本编号 17许可证条款 18加入内核开发社团 19本书概要 19第二章 构造和运行模块 21设置测试系统 21Hello World模块 22核心模块与应用程序的对比 24编译和装载 28内核符号表 33预备知识 35初始化和关闭 36模块参数 40在用户空间编写驱动程序 42快速参考 44第三章 字符设备驱动程序 46scull的设计 46主设备号和次设备号 47一些重要的数据结构 53字符设备的注册 59open和release 62scull的内存使用 64read和write 67试试新设备 74快速参考 74第四章 调试技术 76内核中的调试支持 76通过打印调试 78通过查询调试 85通过监视调试 94调试系统故障 96调试器和相关工具 102第五章 并发和竞态 109scull的缺陷 109并发及其管理 110信号量和互斥体 111completion 116自旋锁 118锁陷阱 123除了锁之外的办法 125快速参考 132第六章 高级字符驱动程序操作 137ioctl 137阻塞型I/O 149poll和select 163异步通知 168定位设备 172设备文件的访问控制 173快速参考 179第七章 时间、延迟及延缓操作 183度量时间差 183获取当前时间 188延迟执行 190内核定时器 196tasklet 202工作队列 204快速参考 208第八章 分配内存 213kmalloc函数的内幕 213后备高速缓存 217get_free_page和相关函数 221vmalloc及其辅助函数 225per-CPU变量 228获取大的缓冲区 230快速参考 231第九章 与硬件通信 235I/O端口和I/O内存 235使用I/O端口 239I/O端口示例 245使用I/O内存 248快速参考 254第十章 中断处理 258准备并口 259安装中断处理例程 259实现中断处理例程 269顶半部和底半部 274中断共享 278中断驱动的I/O 281快速参考 285第十一章 内核的数据类型 287使用标准C语言类型 287为数据项分配确定的空间大小 289接口特定的类型 289其他有关移植性的问题 291链表 294快速参考 298第十二章 PCI驱动程序 300PCI接口 300ISA回顾 317PC/104和PC/104+ 319其他的PC总线 319SBus 320NuBus 321外部总线 321快速参考 322第十三章 USB驱动程序 324USB设备基础 326USB和Sysfs 329USB urb 331编写USB驱动程序 342不使用urb的USB传输 352快速参考 356第十四章 Linux设备模型 359kobject、kset和子系统 361低层sysfs操作 368热插拔事件的产生 372总线、设备和驱动程序 374类 384各环节的整合 388热插拔 394处理固件 401快速索引 403第十五章 内存映射和DMA 408Linux的内存管理 408mmap设备操作 418执行直接I/O访问 429直接内存访问 435快速参考 453第十六章 块设备驱动程序 458注册 459块设备操作 464请求处理 468其他一些细节 484快速参考 487第十七章 网络驱动程序 491snull设计 492连接到内核 495net_device结构细节 499打开和关闭 508数据包传输 510数据包的接收 514中断处理例程 516不使用接收中断 518链路状态的改变 521套接字缓冲区 521MAC 地址解析 525定制 ioctl 命令 527统计信息 528组播 529其他知识点详解 533快速参考 534第十八章 TTY驱动程序 538小型TTY驱动程序 540tty_driver函数指针 545TTY线路设置 551ioctls 555proc和sysfs对TTY设备的处理 557tty_driver结构详解 558tty_operations结构详解 560tty_struct结构详解 562快速参考 564参考书目 567 上一篇: 爱上Arduino 第3版(美)MASSIMO BANZI,MICHAEL SHILOH著 下一篇: 图灵计算机科学丛书 UNIX环境高级编程 第二版(美)W.Richard著