第1章Linux设备驱动概述 1
1.1设备驱动的作用 1
1.2 Linux设备驱动的分类 2
1.3内核空间与用户空间 3
1.4编译驱动程序 4
本章小结 7
第2章 开发环境的搭建 8
2.1目标系统的选择 8
2.2主机服务配置 10
2.2.1交叉编译环境的搭建 10
2.2.2网络服务配置 12
2.3 Makefile解析 16
本章小结 18
第3章Linux设备驱动开发基础 19
3.1字符设备驱动程序框架 19
3.1.1加载和卸载 19
3.1.2主、次设备号 21
3.1.3数据结构 24
3.1.4设备注册 28
3.1.5 open和release 30
3.1.6读和写 32
3.1.7 License问题 35
3.2竞争与并发 36
3.2.1竞争与并发概述 36
3.2.2并发控制机制原理 37
3.2.3信号量的实现 39
3.2.4 completion的实现 45
3.2.5其他并发控制机制简介 50
3.3阻塞和异步 52
3.3.1休眠 52
3.3.2 Demo驱动测试 56
3.3.3异步通知 60
3.4时间度量 66
3.4.1测量时间 66
3.4.2获取当前时间和延时 68
3.4.3内核定时器 70
3.4.4 Tasklets机制 76
3.4.5时间度量驱动实例 78
3.4.6驱动程序测试 81
3.5 LED驱动开发实例 82
3.5.1驱动代码分析 83
3.5.2驱动程序测试 90
本章小结 91
第4章Linux设备驱动调试 92
4.1 GDB调试器使用 92
4.2 Linux内核调试和内核打印 98
4.2.1内核中的调试支持 98
4.2.2打印调试信息 102
4.3监视工具 104
4.4内核调试器 110
4.5仿真器调试 116
4.6应用程序测试 117
本章小结 117
第5章 键盘驱动程序设计 118
5.1 Linux中断处理体系结构 118
5.1.1中断的初始化 121
5.1.2注册中断 121
5.1.3中断的处理过程 123
5.1.4中断处理函数卸载 125
5.2按键驱动程序实例 125
5.2.1 S3C2440A的中断控制器 125
5.2.2按键电路连接和工作原理 130
5.2.3驱动程序实现与分析 131
5.2.4测试程序情景分析 139
本章小结 141
第6章A/D驱动程序设计 142
6.1 AD7490介绍 142
6.2 S3C2440与AD7490的硬件连接 143
6.3 SPI通信原理 144
6.4 S3C2440的SPI控制器 145
6.4.1 SPI控制寄存器(SPCONn) 145
6.4.2 SPI状态寄存器(SPSTAn) 146
6.4.3 SPI引脚控制寄存器(SPPINn) 146
6.4.4 SPI波特率预分频寄存器(SPPREn) 147
6.4.5 SPI发送数据寄存器(SPTDATn) 148
6.4.6 SPI接收数据寄存器(SPRDATn) 148
6.5 AD驱动程序实例 149
6.5.1工作原理分析 149
6.5.2驱动程序源码与分析 149
6.5.3测试程序情景分析 154
本章小结 155
第7章 串口驱动程序设计 156
7.1 Linux中的终端设备 156
7.1.1 Linux中的终端设备分类 156
7.1.2 Linux中的终端设备驱动 157
7.1.3 Linux中的UART设备驱动移植 159
7.2串口驱动程序实例 173
7.2.1 S3C2440串口硬件 174
7.2.2 S3C2440串口驱动程序源码与分析 180
7.2.3 S3C2440串口测试程序情景分析 185
本章小结 187
第8章I2C驱动程序设计 188
8.1 I2C总线及其通信 188
8.1.1 I2C总线的特点 188
8.1.2 I2 C总线的通信 189
8.2 S3C2440的I2 C接口硬件原理 191
8.3 S3C2440 I2 C设备驱动程序设计实例 194
8.3.1 AT24C02硬件结构介绍 194
8.3.2 S3C2440与AT24C02的连接与分析 195
8.3.3 AT24C02驱动编写实例 197
8.3.4测试程序编写 203
本章小结 204
第9章RTC时钟驱动程序设计 205
9.1 Linux下的RTC时钟 205
9.1.1 Linux下的时钟系统简介 205
9.1.2 Linux对时间的表示 205
9.2 S3C2440中的RTC控制器 206
9.3 Linux中的RTC驱动功能实现分析 210
9.3.1 RTC平台设备 210
9.3.2 RTC平台设备驱动 212
9.4 S3C2440 RTC设备驱动程序设计实例 214
9.4.1 RTC驱动编写实例 214
9.4.2测试程序编写 220
本章小结 222
第10章 触摸屏设备驱动程序设计 223
10.1触摸屏结构和工作原理 223
10.1.1触摸屏设备概述 223
10.1.2触摸屏设备的工作原理 223
10.2 S3C2440触摸屏接口 226
10.2.1 S3C2440触摸屏接口概述 226
10.2.2 S3C2440触摸屏接口工作模式 227
10.2.3 S3C2440触摸屏接口寄存器 228
10.3 Linux的input子系统驱动架构 232
10.3.1 input子系统核心层 233
10.4 S3C2440触摸屏设备驱动实例 239
10.4.1硬件连接和驱动实现步骤 239
10.4.3测试实例 247
本章小结 250
第11章 网络设备驱动程序设计 251
11.1网络设备驱动简介 251
11.1.1网络结构模型简介 251
11.1.2 Linux下的网络设备概述 252
11.1.3 Linux网络设备驱动的关键数据结构 254
11.1.4 Linux网络设备驱动设计流程 264
11.2 DM9000驱动程序设计 267
11.2.1 DM9000介绍 267
11.2.2 DM9000和S3C2440接口电路设计 272
11.2.3 DM9000驱动程序实例 272
本章小结 289
第12章USB驱动程序设计 290
12.1 USB设备概述 290
12.1.1 USB规范 291
12.2 URB(USB数据传输块) 298
12.3 USB主机驱动 303
12.3.1 S3C2440中的USB主机驱动控制器 303
12.3.2 USB主机驱动结构 303
12.3.3 S3C2440的OHCI HCD实现 315
12.4 USB设备驱动 320
12.4.1 S3C2440中的USB设备驱动控制器 320
12.4.2 USB设备驱动结构 320
12.4.3 USB骨架程序 322
12.4.4 USB串口驱动分析 333
12.5 Linux中的USB驱动移植 336
本章小结 340
参考文献 341