《嵌入式Linux设备驱动开发详解》

图书作者:华清远见 丛书名称: 北京华清远见嵌入式培训中心教材 出版日期:2008年3月

编辑推荐理由

推荐评分:5.0分

多年嵌入式人才培养及项目研发经验总结

数百家企业嵌入式研发岗位人才需求汇总

数十所嵌入式专业大学院校教学现状调研

侧重实践及案例分析并辅以代码加以讲解

图书简介

嵌入式Linux设备驱动是嵌入式系统中十分重要的组成部分。本书详细讲解了嵌入式Linux的各种设备驱动,包括字符设备驱动、数字显示驱动、键盘驱动、A/D驱动、D/A驱动、LCD驱动、触摸屏驱动、CAN总线驱动、IIC总线驱动、音频总线驱动、IDE接口驱动、闪存芯片驱动、USB驱动、串口驱动、网络设备驱动等,并结合大量实例进行讲解,读者可以快速熟悉和掌握相关知识。 本书内容丰富,专业性和实用性强,适合嵌入式系统设计人员以及高校相关专业师生学习和使用。

图书目录

  • ※第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 USB设备驱动程序的分类 316
  •   14.3.2 USB驱动的骨架程序 317
  •   14.3.3 设备端USB驱动程序 327
  •   14.3.4 USB键盘飞梭的驱动程序 327
  •  14.4 USB驱动程序测试 331
  •   14.4.1 热插拔 331
  •   14.4.2 利用hotplug脚本实现设备的自动加载 332
  •  14.5 知识索引 333
  •  14.6 思考与练习 334
  • ※第15章 串口驱动程序 335

  •  本章目标 335
  •  15.1 串口概述 335
  •   15.1.1 同步串口的传输标准 335
  •   15.1.2 异步串口的传输标准 336
  •   15.1.3 串口的物理层标准 336
  •   15.1.4 串口的电平逻辑转换 341
  •  15.2 嵌入式处理器串口控制器 342
  •   15.2.1 嵌入式系统中常用的UART控制器 342
  •   15.2.2 S3C2410中的UART控制器 342
  •  15.3 嵌入式Linux串口驱动程序设计 346
  •   15.3.1 异步串口的工作流程 346
  •   15.3.2 串口的驱动程序结构 347
  •   15.3.3 串口驱动程序的注册 349
  •   15.3.4 ops中的串口操作函数 351
  •   15.3.5 串口驱动中与控制台有关的函数 360
  •  15.4 嵌入式Linux串口的应用程序设计 360
  •   15.4.1 串口编程需要用到的头文件 360
  •   15.4.2 串口的终端函数 361
  •   15.4.3 RS-485和RS-232的通信 363
  •  15.5 基于串口的GPRS应用实例 366
  •   15.5.1 GPRS简介 366
  •   15.5.2 GPRS的电路设计 367
  •   15.5.3 GPRS的程序分析 368
  •  15.6 基于串口的GPS应用实例 371
  •   15.6.1 GPS简介 371
  •   15.6.2 GPS应用程序设计 371
  •  15.7 知识索引 375
  •  15.8 思考与练习 376
  • ※第16章 网络设备驱动程序 377

  •  本章目标 377
  •  16.1 以太网概述 377
  •   16.1.1 以太网的连接 377
  •   16.1.2 以太网的工作原理 378
  •   16.1.3 以太网的帧结构 379
  •   16.1.4 TCP/IP网络协议 381
  •   16.1.5 嵌入式系统中常用的网络协议 382
  •  16.2 嵌入式处理器的以太网接口 383
  •   16.2.1 带有MAC层控制协议的处理器 383
  •   16.2.2 通过以太网芯片扩展网络接口 384
  •  16.3 以太网驱动程序体系结构 385
  •   16.3.1 网络驱动程序的结构 385
  •   16.3.2 网络设备初始化 386
  •   16.3.3 数据包的发送与接收 386
  •   16.3.4 网络设备的加载方式 387
  •   16.3.5 常用的系统支持 388
  •  16.4 网卡驱动程序实例 392
  •   16.4.1 NE2000的内核支持 392
  •   16.4.2 网络接口的初始化 392
  •   16.4.3 网络接口设备的打开和关闭 393
  •   16.4.4 数据包发送和接收 394
  •   16.4.5 网络驱动程序的基本操作 394
  •   16.4.6 编写嵌入式Linux网络驱动程序中需要注意的问题 398
  •  16.5 网络驱动程序的测试 399
  •   16.5.1 嵌入式Linux的网络配置 400
  •   16.5.2 NFS文件系统 401
  •   16.5.3 socket编程 403
  •   16.5.4 socket编程实例 405
  •  16.6 知识索引 415
  •  16.7 思考与练习 416