第1章 Linux驱动程序基础 1
1.1 驱动程序的概念 1
1.2 Linux驱动程序模型 1
1.3 最基本的调试手段 5
1.4 导出符号的方法 5
1.5 动态加载驱动程序 6
1.6 在内核中加入新驱动 6
1.7 应用程序操作接口 7
1.8 第一个驱动 10
第2章 Linux驱动开发核心技术 17
2.1 同步机制 17
2.1.1 自旋锁 17
2.1.2 信号量 18
2.1.3 原子操作 18
2.1.4 读写锁(rwlock) 19
2.1.5 seqlock机制 21
2.1.6 RCU 22
2.2 完成事件 24
2.3 阻塞与非阻塞 25
2.4 时间 27
2.4.1 Linux下延迟 27
2.4.2 内核定时器 27
2.5 内存分配与映射 28
2.5.1 内存分配与释放 28
2.5.2 用户态和内核态内存交互 29
2.5.3 内存池 30
2.5.4 物理地址到虚拟地址的映射 31
2.5.5 内核空间到用户空间的映射 31
2.6 中断处理 32
2.6.1 硬件中断 32
2.6.2 软中断机制 35
2.7 /proc系统 36
2.8 工作队列 38
2.9 异步I/O 39
2.10 DMA 42
2.11 platform概念 43
2.12 简单驱动例程 45
2.12.1 信号量同步 45
2.12.2 阻塞式读写 46
2.12.3 定时器 48
2.12.4 内存映射 49
2.12.5 /proc访问 53
2.12.6 工作队列 55
第3章 GPIO驱动 57
3.1 ARM体系结构概述 57
3.1.1 RISC结构 57
3.1.2 处理器模式 58
3.1.3 寄存器组织 58
3.1.4 异常处理 60
3.2 S3C2410X处理器 61
3.3 S3C2410X I/O端口 63
3.4 最简单的设备驱动——LED灯驱动 64
3.5 S3C2410X GPIO键盘驱动 66
第4章 串行总线驱动 73
4.1 串行总线综述 73
4.1.1 I2C总线 73
4.1.2 SMBus总线 75
4.1.3 SPI总线 76
4.1.4 CAN总线 76
4.2 CAN接口芯片MCP2510 79
4.2.1 数据发送 79
4.2.2 数据接收 81
4.2.3 中断 83
4.2.4 波特率设置 84
4.2.5 工作模式 85
4.3 MCP2510驱动开发 86
4.4 Linux的I2C驱动架构 96
4.5 Linux I2C驱动开发 100
第5章 USB驱动程序 102
5.1 USB总线 102
5.1.1 USB总线概述 102
5.1.2 USB系统组成 102
5.1.3 USB传输模式 104
5.1.4 主机规范 105
5.1.5 USB设备描述符 105
5.1.6 HID类规范 110
5.2 Linux下的USB驱动框架 111
5.3 USB请求块urb 114
5.4 USB骨架程序 118
5.5 USB文件系统 126
5.6 USB摄像头驱动 127
5.6.1 USB摄像头原理 127
5.6.2 Video4Linux规范 128
5.6.3 OV511驱动分析与编译 132
5.6.4 spca5xx编译与使用 139
5.7 USB Gadget 140
5.7.1 USB设备控制器驱动 142
5.7.2 Gadget驱动 146
第6章 Linux Framebuffer驱动 150
6.1 LCD原理 150
6.2 Linux下LCD驱动架构 151
6.3 S3C2410X LCD控制器 157
6.4 S3C2410X LCD驱动开发 163
6.5 基于Framebuffer的界面系统开发 168
第7章 输入子系统驱动 174
7.1 Linux输入设备驱动 174
7.2 键盘输入设备驱动 179
7.3 在MiniGUI中加入键盘驱动 184
7.4 LED输入设备驱动 188
7.5 USB鼠标输入设备驱动 190
第8章 触摸屏驱动 196
8.1 触摸屏原理 196
8.2 S3C2410X触摸屏控制器 197
8.3 S3C2410X触摸屏驱动设计 200
8.4 校准原理及编程思路 204
8.4.1 线性校准原理 205
8.4.2 三点校准原理 205
8.5 利用tslib库校准 207
8.6 在MiniGUI中加入触摸屏驱动 211
第9章 块设备驱动 213
9.1 Linux块设备驱动 213
9.2 简单块设备驱动 217
9.3 Linux文件系统 221
9.4 MTD驱动分析 223
9.5 cramfs文件系统 224
9.6 NAND和NOR Flash 225
9.7 在系统中添加JFFS2分区 226
第10章 SD卡驱动 229
10.1 SD卡概述 229
10.2 SD卡的通信 231
10.3 SD卡寄存器 233
10.4 Linux对SD卡的支持 235
10.4.1 重要数据结构 236
10.4.2 MMC/SD卡块设备驱动 238
10.4.3 SD卡扫描 243
10.5 如何开发一个SD驱动 244
第11章 网络设备驱动 249
11.1 网络驱动基础 249
11.2 sk_buff 253
11.3 Linux网络设备驱动架构 256
11.4 一个虚拟网络设备驱动 259
11.5 DM9000网卡芯片 262
11.6 DM9000网卡驱动程序分析 265
第12章 红外设备驱动 276
12.1 红外通信协议规范 276
12.2 S3C2410X红外接口 277
12.3 S3C2410X红外设备驱动 279
12.4 Linux对红外网络通信的支持 282
12.5 红外SOCKET通信 285
第13章 音频设备驱动 291
13.1 Linux音频体系 291
13.2 UDA1341TS音频原理 292
13.3 S3C2410X的音频接口 294
13.4 UDA1341TS驱动开发 302
13.5 音频应用层编程 308
13.5.1 OSS音频编程接口 308
13.5.2 ALSA音频编程接口 310
附录:深圳优龙科技YL2410开发板简介 313
主要参考文献 316