Linux设备驱动程序第三版.pdf
目录 1. Linux 设备驱动第三版 .................................................................................................................... 5 2. 第 1 章 设备驱动简介 .............................................................................................................. 15 2.1 1.1. 驱动程序的角色 ......................................................................................................... 17 2.2 1.2. 划分内核 ..................................................................................................................... 17 2.3 1.3. 设备和模块的分类 ..................................................................................................... 20 2.4 1.4. 安全问题 ..................................................................................................................... 21 2.5 1.5. 版本编号 ..................................................................................................................... 23 2.6 1.6. 版权条款 ..................................................................................................................... 24 2.7 1.7. 加入内核开发社团 ..................................................................................................... 25 2.8 1.8. 本书的内容 ................................................................................................................. 25 3. 第 2 章 建立和运行模块 .......................................................................................................... 26 3.1 2.1. 设置你的测试系统 ..................................................................................................... 28 3.2 2.2. Hello World 模块 ......................................................................................................... 28 3.3 2.3. 内核模块相比于应用程序 ......................................................................................... 30 3.4 2.4. 编译和加载 ................................................................................................................. 34 3.5 2.5. 内核符号表 ................................................................................................................. 39 3.6 2.6. 预备知识 ..................................................................................................................... 40 3.7 2.7. 初始化和关停 ............................................................................................................. 41 3.8 2.8. 模块参数 ..................................................................................................................... 46 3.9 2.9. 在用户空间做 ............................................................................................................. 48 3.10 2.10. 快速参考 ................................................................................................................. 50 4. 第 3 章 字符驱动 ...................................................................................................................... 52 4.1 3.1. scull 的设计 ................................................................................................................. 54 4.2 3.2. 主次编号 ..................................................................................................................... 54 4.3 3.3. 一些重要数据结构 ..................................................................................................... 59 4.4 3.4. 字符设备注册 ............................................................................................................. 66 4.5 3.5. open 和 release .......................................................................................................... 69 4.6 3.6. scull 的内存使用 ......................................................................................................... 72 4.7 3.7. 读和写 ......................................................................................................................... 74 4.8 3.8. 使用新设备 ................................................................................................................. 82 4.9 3.9. 快速参考 ..................................................................................................................... 82 5. 第 4 章 调试技术 ...................................................................................................................... 84 5.1 4.1. 内核中的调试支持 ..................................................................................................... 87 5.2 4.2. 用打印调试 ................................................................................................................. 87 5.3 4.3. 用查询来调试 ............................................................................................................. 94 5.4 4.4. 使用观察来调试 ....................................................................................................... 103 5.5 4.5. 调试系统故障 ........................................................................................................... 105 5.6 4.6. 调试器和相关工具 ................................................................................................... 111 6. 第 5 章 并发和竞争情况 ........................................................................................................ 118 6.1 5.1. scull 中的缺陷 ........................................................................................................... 119 Linux 设备驱动 第三版 - [JJJ] 2 6.2 5.2. 并发和它的管理 ....................................................................................................... 119 6.3 5.3. 旗标和互斥体 ........................................................................................................... 121 6.4 5.4. Completions 机制 ...................................................................................................... 126 6.5 5.5. 自旋锁 ....................................................................................................................... 128 6.6 5.6. 锁陷阱 ....................................................................................................................... 133 6.7 5.7. 加锁的各种选择 ....................................................................................................... 135 6.8 5.8. 快速参考 ................................................................................................................... 142 7. 第 6 章 高级字符驱动操作 .................................................................................................... 146 7.1 6.1. ioctl 接口 ................................................................................................................... 159 7.2 6.2. 阻塞 I/O .................................................................................................................... 159 7.3 6.3. poll 和 select ............................................................................................................. 175 7.4 6.4. 异步通知 ................................................................................................................... 181 7.5 6.5. 移位一个设备 ........................................................................................................... 184 7.6 6.6. 在一个设备文件上的存取控制 ............................................................................... 186 7.7 6.7. 快速参考 ................................................................................................................... 193 8. 第 7 章 时间, 延时, 和延后工作 .......................................................................................... 196 8.1 7.1. 测量时间流失 ........................................................................................................... 202 8.2 7.2. 获知当前时间 ........................................................................................................... 202 8.3 7.3. 延后执行 ................................................................................................................... 204 8.4 7.4. 内核定时器 ............................................................................................................... 210 8.5 7.5. Tasklets 机制.............................................................................................................. 216 8.6 7.6. 工作队列 ................................................................................................................... 219 8.7 7.7. 快速参考 ................................................................................................................... 223 9. 第 8 章 分配内存 .................................................................................................................... 227 9.1 8.1. kmalloc 的真实故事 .................................................................................................. 232 9.2 8.2. 后备缓存 ................................................................................................................... 232 9.3 8.3. get_free_page 和其友 ............................................................................................... 237 9.4 8.4. 每-CPU 的变量 ......................................................................................................... 243 9.5 8.5. 获得大量缓冲 ........................................................................................................... 246 9.6 8.6. 快速参考 ................................................................................................................... 247 10. 第 9 章 与硬件通讯 .............................................................................................................. 250 10.1 9.1. I/O 端口和 I/O 内存 .............................................................................................. 254 10.2 9.2. 使用 I/O 端口 ........................................................................................................ 254 10.3 9.3. 一个 I/O 端口例子 ................................................................................................ 260 10.4 9.4. 使用 I/O 内存 ........................................................................................................ 264 10.5 9.5. 快速参考 ................................................................................................................. 271 11. 第 10 章 中断处理 ................................................................................................................ 273 11.1 10.1. 准备并口 ............................................................................................................... 275 11.2 10.2. 安装一个中断处理 ............................................................................................... 275 11.3 10.3. 前和后半部 ........................................................................................................... 291 11.4 10.4. 中断共享 ............................................................................................................... 294 11.5 10.5. 中断驱动 I/O ........................................................................................................ 297 11.6 10.6. 快速参考 ............................................................................................................... 302 12. 第 11 章 内核中的数据类型 ................................................................................................ 304 Linux 设备驱动 第三版 - [JJJ] 3 12.1 11.1. 标准 C 类型的使用 ............................................................................................. 306 12.2 11.2. 安排一个明确大小给数据项 ............................................................................... 306 12.3 11.3. 接口特定的类型 ................................................................................................... 307 12.4 11.4. 其他移植性问题 ................................................................................................... 308 12.5 11.5. 链表 ....................................................................................................................... 312 12.6 11.6. 快速参考 ............................................................................................................... 316 13. 第 12 章 PCI 驱动 ................................................................................................................. 318 13.1 12.1. PCI 接口 ................................................................................................................. 335 13.2 12.2. 回顾: ISA ................................................................................................................ 335 13.3 12.3. PC/104 和 PC/104+ ............................................................................................... 337 13.4 12.4. 其他的 PC 总线 ................................................................................................... 338 13.5 12.5. SBus ........................................................................................................................ 339 13.6 12.6. NuBus 总线 ............................................................................................................ 340 13.7 12.7. 外部总线 ............................................................................................................... 340 13.8 12.8. 快速参考 ............................................................................................................... 340 14. 第 13 章 USB 驱动 ............................................................................................................... 342 14.1 13.1. USB 设备基础知识 ................................................................................................ 348 14.2 13.2. USB 和 sysfs .......................................................................................................... 348 14.3 13.3. USB 的 Urbs .......................................................................................................... 350 14.4 13.4. 编写一个 USB 驱动 ............................................................................................. 362 14.5 13.5. 无 urb 的 USB 传送 ........................................................................................... 373 14.6 13.6. 快速参考 ............................................................................................................... 377 15. 第 14 章 Linux 设备模型 ...................................................................................................... 379 15.1 14.1. Kobjects, Ksets 和 Subsystems ............................................................................. 390 15.2 14.2. 低级 sysfs 操作 .................................................................................................... 390 15.3 14.3. 热插拔事件产生 ................................................................................................... 394 15.4 14.4. 总线, 设备, 和驱动 ............................................................................................. 396 15.5 14.5. 类 ........................................................................................................................... 407 15.6 14.6. 集成起来 ............................................................................................................... 412 15.7 14.7. 热插拔 ................................................................................................................... 418 15.8 14.8. 处理固件 ............................................................................................................... 426 15.9 14.9. 快速参考 ............................................................................................................... 428 16. 第 15 章 内存映射和 DMA .................................................................................................. 432 16.1 15.1. Linux 中的内存管理 .............................................................................................. 442 16.2 15.2. mmap 设备操作 .................................................................................................... 442 16.3 15.3. 进行直接 I/O ........................................................................................................ 455 16.4 15.4. 直接内存存取 ....................................................................................................... 461 16.5 15.5. 快速参考 ............................................................................................................... 480 17. 第 16 章 块驱动 .................................................................................................................... 485 17.1 16.1. 注册 ....................................................................................................................... 492 17.2 16.2. 块设备操作 ........................................................................................................... 492 17.3 16.3. 请求处理 ............................................................................................................... 496 17.4 16.4. 一些其他的细节 ................................................................................................... 514 17.5 16.5. 快速参考 ............................................................................................................... 516 Linux 设备驱动 第三版 - [JJJ] 4 18. 第 17 章 网络驱动 ................................................................................................................ 520 18.1 17.1. snull 是如何设计的 ............................................................................................... 526 18.2 17.2. 连接到内核 ........................................................................................................... 529 18.3 17.3. net_device 结构的详情 ........................................................................................ 533 18.4 17.4. 打开与关闭 ........................................................................................................... 542 18.5 17.5. 报文传送 ............................................................................................................... 544 18.6 17.6. 报文接收 ............................................................................................................... 549 18.7 17.7. 中断处理 ............................................................................................................... 551 18.8 17.8. 接收中断缓解 ....................................................................................................... 553 18.9 17.9. 连接状态的改变 ................................................................................................... 556 18.10 17.10. Socket 缓存........................................................................................................ 557 18.11 17.11. MAC 地址解析 .................................................................................................. 561 18.12 17.12. 定制 ioctl 命令 ................................................................................................ 563 18.13 17.13. 统计信息 ........................................................................................................... 564 18.14 17.14. 多播 ................................................................................................................... 566 18.15 17.15. 几个其他细节 ................................................................................................... 569 18.16 17.16. 快速参考 ........................................................................................................... 571 19. 第 18 章 TTY 驱动 ................................................................................................................ 574 19.1 18.1. 一个小 TTY 驱动 ................................................................................................. 583 19.2 18.2. tty_driver 函数指针 .............................................................................................. 583 19.3 18.3. TTY 线路设置 ........................................................................................................ 590 19.4 18.4. ioctls 函数 .............................................................................................................. 594 19.5 18.5. TTY 设备的 proc 和 sysfs 处理 .......................................................................... 598 19.6 18.6. tty_driver 结构的细节 .......................................................................................... 599 19.7 18.7. tty_operaions 结构的细节 .................................................................................... 601 19.8 18.8. tty_struct 结构的细节 .......................................................................................... 604 19.9 18.9. 快速参考 ............................................................................................................... 606
下载地址
用户评论
谢谢楼主分享资料
这本书很不错。
感谢分享。