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