目录 1
第一章 设备驱动程序简介 11
设备驱动程序的作用 12
内核功能划分 14
设备和模块分类 16
安全问题 18
版本编号 20
许可证条款 21
本书概要 23
加入内核开发社团 23
第二章 构建和运行模块 25
核心模块与应用程序的对比 27
编译和装载 32
内核符号表 38
初始化和关闭 40
使用资源 46
自动和手动配置 53
在用户空间编写驱动程序 56
向后兼容性 58
快速参考 62
第三章 字符设备驱动程序 65
scull的设计 65
主设备号和次设备号 67
文件操作 75
file结构 79
open和release 81
scull的内存使用 86
竞态简介 88
read和write 91
试试新设备 98
设备文件系统 98
向后兼容性 105
快速参考 108
第四章 调试技术 111
通过输出调试 111
通过查询调试 117
通过监视调试 123
调试系统故障 125
调试程序和相关工具 136
第五章 增强的字符驱动程序操作 145
ioctl 146
阻塞型I/O 158
poll和select 171
异步通知 176
定位设备 180
设备文件的访问控制 182
向后兼容性 189
快速参考 195
第六章 时间流 199
内核中的时间间隔 199
获取当前时间 202
延迟执行 204
任务队列 207
内核定时器 219
向后兼容性 223
快速参考 224
kmalloc函数的内幕 227
第七章 获取内存 227
后备高速缓存 231
get_free_page和相关函数 234
vmalloc与相关函数 237
引导时的内存分配 240
向后兼容性 243
快速参考 244
第八章 硬件管理 246
I/O端口和I/O内存 246
使用I/O端口 249
使用数字I/O端口 255
使用I/O内存 259
向后兼容性 268
快速参考 269
第九章 中断处理 272
中断的整体控制 273
准备并口 274
安装中断处理程序 274
实现中断处理程序 286
tasklet和底半部处理 290
中断共享 296
中断驱动的I/O 300
竞态 301
向后兼容性 311
快速参考 312
第十章 合理使用数据类型 316
使用标准C语言类型 317
为数据项分配确定的空间大小 318
接口特定的类型 319
其他有关移植性的问题 320
链表 324
快速参考 327
第十一章 kmod和高级模块化 329
按需加载模块 329
模块间通信 336
模块中的版本控制 339
向后兼容性 343
快速参考 344
第十二章 装载块设备驱动程序 346
注册驱动程序 347
头文件blk.h 354
请求处理简介 356
请求处理详解 361
挂装和卸装是如何工作的 375
ioctl方法 376
可移动设备 379
可分区设备 382
中断驱动的块设备驱动程序 389
向后兼容性 391
快速参考 393
第十三章 mmap和DMA 397
Linux的内存管理 397
mmap设备操作 410
kiobuf接口 424
直接内存访问和总线主控 429
向后兼容性 448
快速参考 451
第十四章 网络驱动程序 455
snull的设计 457
连接到内核 460
net_device结构的细节 465
打开和关闭 474
数据包传输 476
数据包的接收 480
中断处理程序 482
链路状态的改变 483
套接字缓冲区 484
MAC地址解析 487
定制ioctl命令 490
统计信息 491
组播 492
向后兼容性 496
快速参考 499
第十五章 外设总线综述 502
PCI接口 502
ISA回顾 526
其他的PC总线 529
PC/104和PC/104+ 529
SBus 531
NuBus 532
外部总线 532
向后兼容性 535
快速参考 536
第十六章 内核源代码的物理布局 539
引导内核 540
引导之前 543
init进程 545
kernel目录 546
fs目录 546
mm目录 547
net目录 549
ipc和lib 550
include和arch 551
drivers目录 551
参考文献 561
词汇表 563