标题：嵌入式Linux设备驱动开发详解
 内容提要 

嵌入式Linux设备驱动是嵌入式系统中十分重要的组成部分。本书详细讲解了嵌入式Linux的各种设备驱动，包括字符设备驱动、数字显示驱动、键盘驱动、A/D驱动、D/A驱动、LCD驱动、触摸屏驱动、CAN总线驱动、IIC总线驱动、音频总线驱动、IDE接口驱动、闪存芯片驱动、USB驱动、串口驱动、网络设备驱动等，并结合大量实例进行讲解，读者可以快速熟悉和掌握相关知识。
 编辑推荐 

本书特色：本书系统地介绍了嵌入式Linux设备驱动开发的相关知识和实例，主要包括：
数码管驱动程序；键盘驱动程序；A/D、D/A驱动程序；LCD驱动程序；触摸屏驱动程序；CAN总线驱动程序；I2C总线驱动程序；音频总线驱动程序；IDE驱动程序；NAND Flash和NOR Flash驱动程序；USB设备驱动程序；串口驱动程序；网络设备驱动程序。
实例丰富、讲解细致、代码分析详尽，嵌入式Linux设备驱动开发的理想参考用书。
 目录 

第1章　嵌入式系统与驱动程序　1
本章目标　1
1.1　嵌入式系统概述　1
1.1.1　嵌入式系统的概念　1
1.1.2　嵌入式系统的特点　2
1.1.3　嵌入式系统的体系结构　2
1.2　嵌入式处理器介绍　4
1.2.1　嵌入式处理器分类　4
1.2.2　ARM概述　5
1.2.3　ARM系列芯片简介　5
1.3　嵌入式操作系统介绍　7
1.3.1　主流嵌入式操作系统　7
1.3.2　嵌入式系统的发展状况　8
1.3.3　嵌入式Linux介绍　8
1.3.4　嵌入式系统开发环境的建立　9
1.3.5　嵌入式软件开发　10
1.4　嵌入式Linux驱动程序　12
1.4.1　嵌入式Linux的内核空间和用户空间　12
1.4.2　嵌入式Linux的文件系统　12
1.4.3　嵌入式Linux的设备管理　14
1.4.4　嵌入式Linux的驱动程序　16
1.5　知识索引　20
1.6　思考与练习　21
第2章　简单的字符设备驱动程序　23
本章目标　23
2.1　嵌入式Linux字符设备的驱动程序结构　23
2.1.1　嵌入式Linux驱动程序常用的头文件　24
2.1.2　File_operations结构体　24
2.1.3　字符设备驱动程序的入口　25
2.1.4　驱动程序的设备注册　26
2.2　设备驱动程序中的具体问题　27
2.2.1　I/O端口　28
2.2.2　内存操作　29
2.2.3　中断处理　29
2.3　LED的驱动程序实例及测试　30
2.3.1　LED I/O端口设置　30
2.3.2　LED硬件电路设计　32
2.3.3　LED驱动程序设计　33
2.3.4　LED测试程序设计　36
2.4　嵌入式Linux中断处理驱动程序及测试　37
2.4.1　中断处理过程　37
2.4.2　中断向量表　39
2.4.3　中断的处理模式　39
2.4.4　中断的优先级　40
2.4.5　中断的嵌套　40
2.4.6　中断源的扩展　40
2.4.7　中断控制寄存器的设置　41
2.5　按键中断的驱动程序实例　45
2.5.1　按键中断的电路设计　45
2.5.2　按键中断的驱动程序设计　45
2.6　知识索引　48
2.7　思考与练习　49
第3章　数字显示驱动程序　50
本章目标　50
3.1　数字显示器　50
3.1.1　数码管简介　50
3.1.2　数码管的分类　51
3.1.3　数码管显示原理　51
3.2　数码管显示电路的硬件设计　52
3.2.1　译码器的使用　52
3.2.2　数码管的驱动方式　53
3.2.3　串/并变换的译码设计　55
3.3　数码管驱动程序实例　56
3.3.1　驱动程序的初始化和卸载模块　56
3.3.2　文件操作结构模块　57
3.3.3　数码管的打开模块　57
3.3.4　数码管的读写模块　58
3.3.5　数码管的I/O控制模块　58
3.3.6　数码管的退出模块　58
3.3.7　驱动程序的模块加载和卸载　59
3.4　数码管显示电路测试程序设计　60
3.4.1　数码管测试设计　60
3.4.2　数码管测试程序　60
3.4.3　数码管测试效果　61
3.5　知识索引　61
3.6　思考与练习　62
第4章　键盘驱动程序　63
本章目标　63
4.1　键盘接口概述　63
4.1.1　键盘的分类　63
4.1.2　键盘的防抖　65
4.1.3　键盘的扫描　65
4.1.4　键盘的缓冲算法　67
4.2　键盘的驱动设计实例　67
4.2.1　锁存器和缓冲器扩展键盘　67
4.2.2　锁存器和缓冲器的接口　68
4.2.3　锁存器和缓冲器扩展键盘驱动程序设计　69
4.2.4　锁存器和缓冲器扩展键盘测试程序设计　71
4.3　智能控制芯片HD7279扩展键盘　72
4.3.1　HD7279的电路设计　72
4.3.2　HD7279的指令介绍　73
4.3.3　HD7279的串行接口　74
4.3.4　HD7279的驱动程序设计　75
4.3.5　HD7279的测试程序设计　84
4.4　知识索引　85
4.5　思考与练习　85
第5章　A/D驱动程序　86
本章目标　86
5.1　A/D转换的过程　86
5.1.1　采样和保持　86
5.1.2　量化和编码　88
5.1.3　ADC的分类　89
5.2　A/D转换器的基本原理　89
5.2.1　逐次逼近型A/D转换器　89
5.2.2　双积分型A/D转换器　90
5.2.3　V/F和F/V型转换器　93
5.2.4　其他A/D转换器　95
5.3　A/D转换器接口技术　97
5.3.1　ADC的主要参数及意义　97
5.3.2　ADC的电路选择方法　98
5.3.3　ADC实际应用中的问题　99
5.4　S3C2410 A/D转换驱动设计实例　99
5.4.1　S3C2410的A/D转换电路　99
5.4.2　S3C2410X的A/D转换控制寄存器　100
5.4.3　S3C2410X的A/D转换数据寄存器　101
5.4.4　S3C2410X中A/D转换驱动程序的设计　102
5.4.5　S3C2410X中A/D转换测试程序的设计　105
5.5　知识索引　106
5.6　思考与练习　107
第6章　D/A驱动程序　108
本章目标　108
6.1　D/A的原理介绍　108
6.1.1　D/A转换的概念及基本原理　108
6.1.2　电子模拟开关　109
6.1.3　D/A转换器的基本结构　110
6.1.4　D/A转换的静态参数　114
6.1.5　D/A转换的动态参数　115
6.2　D/A转换的硬件电路设计　116
6.2.1　D/A转换的接口技术　116
6.2.2　D/A转换芯片介绍　117
6.2.3　D/A转换的电路设计　118
6.3　D/A转换器的驱动程序实例　118
6.3.1　D/A驱动程序中的宏定义　118
6.3.2　D/A的模块加载　118
6.3.3　D/A转换器的文件操作模块　119
6.3.4　D/A转换器的读写控制模块　120
6.3.5　D/A转换器的打开、退出模块　120
6.4　测试程序的设计　120
6.4.1　D/A测试程序中的宏定义　121
6.4.2　D/A测试程序的主函数　121
6.4.3　D/A测试程序中的功能函数　122
6.4.4　D/A测试程序中的功能打印函数　123
6.4.5　D/A测试程序中的波形生成函数　123
6.4.6　D/A测试程序的效果　124
6.5　知识索引　125
6.6　思考与练习　125
第7章　LCD驱动程序　126
本章目标　126
7.1　LCD显示器概述　126
7.1.1　液晶　126
7.1.2　LCD显示屏的背光　127
7.1.3　LCD显示器的分类　127
7.1.4　LCD的显示原理　127
7.1.5　LCD的驱动方式　130
7.1.6　LCD的常用指标　131
7.2　LCD的显示接口　131
7.2.1　灰度STN的时序　132
7.2.2　彩色STN的时序　133
7.2.3　TFT的时序　134
7.3　嵌入式处理器的LCD控制器　136
7.3.1　LCD控制器　136
7.3.2　LCD控制器的设置　137
7.3.3　LCD的字符显示缓存　139
7.4　LCD的驱动程序设计　140
7.4.1　LCD驱动程序相关的宏定义　140
7.4.2　LCD驱动程序的底层操作函数　142
7.4.3　LCD驱动程序提供的API　145
7.4.4　LCD驱动程序的模块化加载　151
7.4.5　LCD的测试程序　152
7.5　基于Framebuffer的LCD驱动程序实例　155
7.5.1　Framebuffer概述　155
7.5.2　LCD的电路连接　155
7.5.3　Framebuffer设备驱动程序的结构　156
7.5.4　Framebuffer设备驱动程序的设计　159
7.5.5　Framebuffer设备测试程序的设计　164
7.5.6　嵌入式Linux常用的GUI　166
7.6　知识索引　166
7.7　思考与练习　167
第8章　触摸屏驱动程序　168
本章目标　168
8.1　触摸屏概述　168
8.2　触摸屏的分类　168
8.2.1　电阻技术触摸屏　168
8.2.2　表面声波技术触摸屏　169
8.2.3　电容电感技术触摸屏　170
8.2.4　红外线技术触摸屏　170
8.3　触摸屏的特性　171
8.3.1　透明度和色彩失真　171
8.3.2　反光性　171
8.3.3　清晰度　171
8.3.4　漂移　172
8.3.5　检测和定位　172
8.4　触摸屏的硬件电路设计　172
8.4.1　电阻式触摸屏的电路原理　172
8.4.2　电阻式触摸屏原点的定位　173
8.4.3　电阻式触摸屏的电路连接　174
8.5　触摸屏的驱动程序实例　176
8.5.1　触摸屏接口的模式　176
8.5.2　A/D转换和触摸屏寄存器的设置　177
8.5.3　触摸屏的坐标　179
8.5.4　触摸屏的电路连接　180
8.5.5　触摸屏的驱动程序接口　181
8.6　测试程序的设计　182
8.6.1　触摸屏的数据定义　183
8.6.2　触摸屏的数据处理　183
8.6.3　触摸屏的运行测试　185
8.7　知识索引　186
8.8　思考与练习　187
第9章　CAN总线驱动程序　188
本章目标　188
9.1　CAN总线接口设计　188
9.1.1　CAN总线概述　188
9.1.2　CAN的工作特点及主要优点　189
9.1.3　CAN总线的电气特征和MAC帧结构　189
9.2　嵌入式处理器上CAN总线接口的扩展　190
9.2.1　SJA1000简介　190
9.2.2　SJA1000扩展　191
9.3　SJA1000扩展CAN总线接口的设计　192
9.3.1　CAN 控制器SJA1000的操作模式　192
9.3.2　CAN控制器SJA1000的特征功能　193
9.3.3　CAN 控制器SJA1000的Basic CAN模式设置　194
9.4　SJA1000扩展CAN总线接口的通信　196
9.4.1　通过CAN总线建立通信的步骤　196
9.4.2　SJA1000的初始化　196
9.4.3　驱动程序的结构设计　198
9.4.4　驱动程序init、exit、open、close函数的实现　200
9.4.5　驱动程序read、write函数的实现　201
9.4.6　驱动程序interrupt、ioctl函数实现　202
9.4.7　测试程序的编写　202
9.5　驱动程序的加载　204
9.6　知识索引　204
9.7　思考与练习　205
第10章　IIC总线驱动程序　206
本章目标　206
10.1　IIC总线概述　206
10.1.1　IIC总线介绍　206
10.1.2　IIC总线引入的原因　206
10.1.3　IIC总线的特点　206
10.1.4　IIC总线的基本结构　207
10.1.5　IIC总线的术语　207
10.1.6　IIC总线的工作　208
10.1.7　IIC总线的竞争仲裁　209
10.1.8　IIC总线的工作流程　210
10.2　嵌入式处理器的IIC接口　211
10.2.1　IIC总线控制寄存器　212
10.2.2　IIC总线控制/状态寄存器　213
10.2.3　IIC总线地址寄存器　214
10.2.4　IIC总线移位数据寄存器　214
10.2.5　S3C2410中与IIC对应的I/O端口　215
10.3　基于IIC的键盘芯片应用　216
10.3.1　ZLG7290的功能　217
10.3.2　ZLG7290的控制方式　218
10.3.3　ZLG7290的寄存器　218
10.3.4　ZLG7290的通信接口　219
10.3.5　ZLG7290的指令介绍　219
10.4　IIC总线驱动程序实例　221
10.4.1　ZLG7290的电路连接　221
10.4.2　ZLG7290的通信流程　223
10.4.3　ZLG7290驱动中变量的定义　225
10.4.4　ZLG7290驱动中实时时钟的改变　226
10.4.5　ZLG7290和IIC寄存器的初始化　227
10.4.6　ZLG7290驱动程序的模块化　228
10.4.7　ZLG7290的文件操作结构　228
10.5　IIC总线的测试程序　230
10.6　知识索引　231
10.7　思考与练习　231
第11章　音频总线驱动程序　232
本章目标　232
11.1　音频总线接口概述　232
11.1.1　音频的采样精度　233
11.1.2　音频编码　233
11.2　IIS音频总线接口　233
11.2.1　IIS总线的物理连接　233
11.2.2　IIS的总线协议　234
11.2.3　IIS总线的硬件设计　235
11.2.4　IIS总线的寄存器　236
11.3　AC97音频总线接口　239
11.4　IIS总线的驱动程序设计　240
11.4.1　音频设备基础知识　240
11.4.2　音频设备文件　241
11.4.3　WAV声音文件　243
11.4.4　音频设备和驱动程序的通信　243
11.4.5　设备的初始化和加载　244
11.4.6　DMA的操作和宏定义　246
11.4.7　audio设备文件的操作　248
11.4.8　mixer设备文件的操作　260
11.5　音频驱动程序的测试　262
11.6　知识索引　262
11.7　思考与练习　263
第12章　IDE接口驱动程序　264
本章目标　264
12.1　IDE接口概述　264
12.1.1　硬盘知识介绍　264
12.1.2　IDE接口标准　267
12.1.3　IDE接口的传输模式　269
12.1.4　IDE接口寄存器　269
12.2　IDE接口驱动程序的移植　271
12.2.1　嵌入式Linux下IDE驱动程序接口　271
12.2.2　嵌入式Linux下IDE驱动程序　272
12.2.3　IDE硬盘的读/写操作　274
12.3　IDE驱动程序测试　282
12.3.1　磁盘文件系统简介　283
12.3.2　IDE分区测试　283
12.4　知识索引　285
12.5　思考与练习　285
第13章　闪存芯片的驱动程序　286
本章目标　286
13.1　闪存芯片概述　286
13.1.1　闪存芯片的物理特性　286
13.1.2　嵌入式文件系统概述　289
13.1.3　MTD体系介绍　289
13.1.4　Flash专有名词　291
13.2　NAND Flash　291
13.2.1　NAND Flash的结构　291
13.2.2　NAND Flash的操作　292
13.2.3　NAND Flash控制器　294
13.2.4　NAND Flash的时序　296
13.2.5　NAND Flash的驱动程序实例　297
13.3　NOR Flash　301
13.3.1　NOR Flash的结构　301
13.3.2　NOR Flash的操作　302
13.3.3　NOR Flash的驱动程序实例　303
13.4　基于闪存的文件系统　307
13.5　知识索引　309
13.6　思考与练习　310
第14章　USB 设备驱动程序　311
本章目标　311
14.1　USB接口概述　311
14.1.1　USB系统　311
14.1.2　USB的电气特性　312
14.1.3　USB总线的拓扑结构　313
14.1.4　USB的通信协议　313
14.2　嵌入式系统中USB的使用　315
14.2.1　OHCI概述　315
14.2.2　Host接口硬件设计　316
14.3　嵌入式系统中USB设备的驱动程序设计　316
14.3.1