-
《精通Linux 设备驱动程序开发》.(Sreekrishnan).pdf下载
资源介绍
基本信息
原书名: Essential Linux Device Drivers
原出版社: Prentice Hall
作者: (印)Sreekrishnan Venkateswaran
译者: 宋宝华 何昭然 史海滨 吴国成
丛书名: 图灵程序设计丛书 操作系统
出版社:人民邮电出版社
ISBN:9787115221674
出版日期:2010 年6月
页码:468
内容简介
本书是linux设备驱动程序开发领域的权威著作。全书基于2.6内核,不仅透彻讲解了基本概念和技术,更深入探讨了其他书没有涵盖或浅尝辄止的许多重要主题和关键难点,如pcmcia、i2c和usb等外部总线以及视频、音频、无线连网和闪存等驱动程序的开发,并讲解了相关的内核源码文件,给出了完整的开发实例。
本书适合中高级linux开发人员阅读。
目录
第1章 引言1
1.1 演进1
1.2 gnu copyleft2
1.3 kernel.org2
1.4 邮件列表和论坛3
1.5 linux发行版3
1.6 查看源代码4
1.7 编译内核7
1.8 可加载的模块8
1.9 整装待发9
第2章 内核11
2.1 启动过程11
2.1.1 bios-provided physical ram map12
2.1.2 758mb lowmem available14
2.1.3 kernel command line: ro
root=/dev/hda114
2.1.4 calibrating delay...1197.46
.bogomips (lpj=2394935)15
2.1.5 checking hlt instruction16
2.1.6 net: registered protocol family 217
2.1.7 freeing initrd memory: 387k freed17
2.1.8 io scheduler anticipatory
registered (default)18
2.1.9 setting up standard pci resources18
2.1.10 ext3-fs: mounted filesystem19
2.1.11 init: version 2.85 booting19
2.2 内核模式和用户模式20
2.3 进程上下文和中断上下文20
2.4 内核定时器21
2.4.1 hz和jiffies21
2.4.2 长延时22
2.4.3 短延时24
2.4.4 pentium时间戳计数器24
2.4.5 实时钟25
2.5 内核中的并发26
2.5.1 自旋锁和互斥体26
2.5.2 原子操作30
2.5.3 读—写锁31
2.5.4 调试32
2.6 proc文件系统32
2.7 内存分配33
2.8 查看源代码34
第3章 内核组件37
3.1 内核线程37
3.1.1 创建内核线程37
3.1.2 进程状态和等待队列41
3.1.3 用户模式辅助程序42
3.2 辅助接口43
3.2.1 链表44
3.2.2 散列链表49
3.2.3 工作队列49
3.2.4 通知链51
3.2.5 完成接口54
3.2.6 kthread辅助接口56
3.2.7 错误处理助手57
3.3 查看源代码58
第4章 基本概念61
4.1 设备和驱动程序介绍61
4.2 中断处理63
4.2.1 中断上下文63
4.2.2 分配irq号64
4.2.3 设备实例:导航杆65
4.2.4 softirq和tasklet68
4.3 linux设备模型71
4.3.1 udev71
4.3.2 sysfs、kobject和设备类73
4.3.3 热插拔和冷插拔76
4.3.4 微码下载76
4.3.5 模块自动加载77
4.4 内存屏障78
4.5 电源管理79
4.6 查看源代码79
第5章 字符设备驱动程序81
5.1 字符设备驱动程序基础81
5.2 设备实例:系统cmos82
5.2.1 驱动程序初始化83
5.2.2 打开与释放86
5.2.3 数据交换88
5.2.4 查找92
5.2.5 控制94
5.3 检测数据可用性95
5.3.1 轮询95
5.3.2 fasync98
5.4 和并行端口交互99
5.5 rtc子系统108
5.6 伪字符驱动程序109
5.7 混杂驱动程序110
5.8 字符设备驱动程序注意事项115
5.9 查看源代码115
第6章 串行设备驱动程序118
6.1 层次架构119
6.2 uart驱动程序121
6.2.1 设备实例:手机122
6.2.2 rs-485132
6.3 tty驱动程序132
6.4 线路规程134
6.5 查看源代码141
第7章 输入设备驱动程序143
7.1 输入事件驱动程序144
7.2 输入设备驱动程序150
7.2.1 serio150
7.2.2 键盘150
7.2.3 鼠标152
7.2.4 触摸控制器157
7.2.5 加速度传感器158
7.2.6 输出事件158
7.3 调试159
7.4 查看源代码160
第8章 i2c协议161
8.1 i2c/smbus是什么161
8.2 i2c核心162
8.3 总线事务164
8.4 设备实例:eeprom164
8.4.1 初始化165
8.4.2 探测设备167
8.4.3 检查适配器的功能169
8.4.4 访问设备169
8.4.5 其他函数170
8.5 设备实例:实时时钟171
8.6 i2c-dev174
8.7 使用lm-sensors监控硬件174
8.8 spi总线174
8.9 1-wire总线176
8.10 调试176
8.11 查看源代码176
第9章 pcmcia和cf179
9.1 pcmcia/cf是什么179
9.2 linux-pcmcia子系统181
9.3 主机控制器驱动程序183
9.4 pcmcia核心183
9.5 驱动程序服务183
9.6 客户驱动程序183
9.6.1 数据结构184
9.6.2 设备实例:pcmcia卡185
9.7 将零件组装在一起188
9.8 pcmcia存储189
9.9 串行pcmcia189
9.10 调试191
9.11 查看源代码191
第10章 pci193
10.1 pci系列193
10.2 寻址和识别195
10.3 访问pci198
10.3.1 配置区198
10.3.2 i/o和内存199
10.4 dma200
10.5 设备实例:以太网—调制解调器卡203
10.5.1 初始化和探测203
10.5.2 数据传输209
10.6 调试214
10.7 查看源代码214
第11章 usb216
11.1 usb体系架构216
11.1.1 总线速度218
11.1.2 主机控制器218
11.1.3 传输模式219
11.1.4 寻址219
11.2 linux-usb子系统220
11.3 驱动程序的数据结构221
11.3.1 usb_device结构体221
11.3.2 urb222
11.3.3 管道223
11.3.4 描述符结构223
11.4 枚举225
11.5 设备实例:遥测卡225
11.5.1 初始化和探测过程226
11.5.2 卡寄存器的访问230
11.5.3 数据传输233
11.6 类驱动程序236
11.6.1 大容量存储设备236
11.6.2 usb-串行端口转换器241
11.6.3 人机接口设备243
11.6.4 蓝牙243
11.7 gadget驱动程序243
11.8 调试244
11.9 查看源代码245
第12章 视频驱动程序247
12.1 显示架构247
12.2 linux视频子系统249
12.3 显示参数251
12.4 帧缓冲api252
12.5 帧缓冲驱动程序254
12.6 控制台驱动程序265
12.6.1 设备实例:手机266
12.6.2 启动logo270
12.7 调试270
12.8 查看源代码271
第13章 音频驱动程序273
13.1 音频架构273
13.2 linux声音子系统275
13.3 设备实例:mp3播放器277
13.3.1 驱动程序函数和结构体278
13.3.2 alsa编程287
13.4 调试288
13.5 查看源代码289
第14章 块设备驱动程序291
14.1 存储技术291
14.2 linux块i/o层295
14.3 i/o调度器295
14.4 块驱动程序数据结构和方法296
14.5 设备实例:简单存储控制器298
14.5.1 初始化299
14.5.2 块设备操作301
14.5.3 磁盘访问302
14.6 高级主题304
14.7 调试306
14.8 查看源代码306
第15章 网络接口卡308
15.1 驱动程序数据结构308
15.1.1 套接字缓冲区309
15.1.2 网络设备接口310
15.1.3 激活311
15.1.4 数据传输311
15.1.5 看门狗311
15.1.6 统计312
15.1.7 配置313
15.1.8 总线相关内容314
15.2 与协议层会话314
15.2.1 接收路径314
15.2.2 发送路径315
15.2.3 流量控制315
15.3 缓冲区管理和并发控制315
15.4 设备实例:以太网nic316
15.5 isa网络驱动程序321
15.6 atm321
15.7 网络吞吐量322
15.7.1 驱动程序性能322
15.7.2 协议性能323
15.8 查看源代码324
第16章 linux无线设备驱动326
16.1 蓝牙327
16.1.1 bluez328
16.1.2 设备实例:cf卡329
16.1.3 设备实例:usb适配器330
16.1.4 rfcomm331
16.1.5 网络332
16.1.6 hid334
16.1.7 音频334
16.1.8 调试334
16.1.9 关于源代码334
16.2 红外335
16.2.1 linux-irda335
16.2.2 设备实例:超级i/o芯片337
16.2.3 设备实例:ir dongle338
16.2.4 ircomm340
16.2.5 联网340
16.2.6 irda套接字341
16.2.7 lirc341
16.2.8 查看源代码342
16.3 wifi343
16.3.1 配置343
16.3.2 设备驱动程序346
16.3.3 查看源代码347
16.4 蜂窝网络347
16.4.1 gprs347
16.4.2 cdma349
16.5 当前趋势350
第17章 存储技术设备352
17.1 什么是闪存352
17.2 linux-mtd子系统353
17.3 映射驱动程序353
17.4 nor芯片驱动程序358
17.5 nand芯片驱动程序359
17.6 用户模块361
17.6.1 块设备模拟361
17.6.2 字符设备模拟361
17.6.3 jffs2362
17.6.4 yaffs2363
17.7 mtd工具363
17.8 配置mtd363
17.9 xip364
17.10 fwh364
17.11 调试367
17.12 查看源代码367
第18章 嵌入式linux369
18.1 挑战369
18.2 元器件选择370
18.3 工具链371
18.4 bootloader372
18.5 内存布局374
18.6 内核移植375
18.7 嵌入式驱动程序376
18.7.1 闪存377
18.7.2 uart377
18.7.3 按钮和滚轮378
18.7.4 pcmcia/cf378
18.7.5 sd/mmc378
18.7.6 usb378
18.7.7 rtc378
18.7.8 音频378
18.7.9 触摸屏379
18.7.10 视频379
18.7.11 cpld/fpga379
18.7.12 连接性379
18.7.13 专用领域电子器件380
18.7.14 更多驱动程序380
18.8 根文件系统380
18.8.1 nfs挂载的根文件系统381
18.8.2 紧凑型中间件382
18.9 测试基础设施383
18.10 调试383
18.10.1 电路板返工384
18.10.2 调试器385
第19章 用户空间的驱动程序386
19.1 进程调度和响应时间387
19.1.1 原先的调度器387
19.1.2 o(1)调度器387
19.1.3 cfs388
19.1.4 响应时间388
19.2 访问i/o区域390
19.3 访问内存区域393
19.4 用户模式scsi395
19.5 用户模式usb397
19.6 用户模式i2c400
19.7 uio401
19.8 查看源代码402
第20章 其他设备和驱动程序403
20.1 ecc报告403
20.2 频率调整407
20.3 嵌入式控制器408
20.4 acpi408
20.5 isa与mca410
20.6 火线410
20.7 智能输入/输出411
20.8 业余无线电411
20.9 voip411
20.10 高速互联412
20.10.1 infiniband413
20.10.2 rapidio413
20.10.3 光纤通道413
20.10.4 iscsi413
第21章 调试设备驱动程序414
21.1 kdb414
21.1.1 进入调试器415
21.1.2 kdb415
21.1.3 kgdb417
21.1.4 gdb420
21.1.5 jtag调试器421
21.1.6 下载423
21.2 内核探测器423
21.2.1 kprobe423
21.2.2 jprobe427
21.2.3 返回探针429
21.2.4 局限性431
21.2.5 查看源代码431
21.3 kexec与kdump431
21.3.1 kexec432
21.3.2 kdump与kexec协同工作432
21.3.3 kdump433
21.3.4 查看源代码437
21.4 性能剖析437
21.4.1 利用oprofile剖析内核性能438
21.4.2 利用gprof剖析应用程序性能440
21.5 跟踪441
21.6 ltp444
21.7 uml444
21.8 诊断工具444
21.9 内核修改配置选项444
21.10 测试设备445
第22章 维护与发布446
22.1 代码风格446
22.2 修改标记446
22.3 版本控制447
22.4 一致性检查447
22.5 构建脚本448
22.6 可移植代码450
第23章 结束语451
23.1 流程一览表451
23.2 下一步该做什么452
附录a linux汇编453
附录b linux与bios457
附录c seq文件461