第1章 嵌入式系统接口技术概述 1
1.1 嵌入式系统的架构与I/O接口的连接方式 1
1.1.1 嵌入式系统的基本结构 1
1.1.2 嵌入式SOC处理器与片上I/O接口 2
1.1.3 嵌入式系统的I/O接口的扩展 3
1.2 接口的基本功能 4
1.3 I/O接口及其编址方式 5
1.4 I/O接口扩展方法 6
1.5 I/O设备的控制方法 12
第2章 Linux内核设备驱动原理 15
2.1 基本原理 15
2.1.1 Linux操作系统的架构 15
2.1.2 嵌入式系统的开发模式与嵌入式Linux设备驱动 16
2.1.3 Linux设备的分类 17
2.1.4 Linux设备的标识 18
2.2 内核模块 18
2.2.1 什么是内核模块 18
2.2.2 内核模块的框架 19
2.2.3 内核模块的编译 21
2.3 Linux内核编程常见操作 25
2.4 设备驱动程序的结构 30
2.4.1 虚拟文件系统与硬件驱动的接口 31
2.4.2 简单字符设备的驱动 32
2.5 Linux 2.6内核的中断处理 37
2.5.1 Linux中断处理流程 37
2.5.2 外部中断的描述与处理 41
2.5.3 中断处理程序的注册与释放 45
2.5.4 中断处理程序的编写 46
2.6 Linux 2.6内核的工作推后执行的机制 46
2.6.1 软中断 47
2.6.2 Tasklet 47
2.6.3 工作队列 49
2.7 Linux 2.6内核设备模型 52
2.7.1 Linux 2.6设备模型概述 52
2.7.2 内核设备驱动模型的组件 54
2.7.3 sysfs文件系统、udev和Linux内核设备模型 58
2.7.4 平台总线设备 61
本章小结 66
习题与思考题 67
第3章 最小硬件系统设计与底层软件移植 68
3.1 最小硬件系统设计 68
3.1.1 系统存储器接口 69
3.1.2 串行通信接口电路原理 73
3.2 最小硬件系统的配置 74
3.2.1 处理器的配置 74
3.2.2 FLASH & SDRAM的配置 76
3.2.3 GPIO和串口的配置 79
3.3 最小硬件系统与Bootloader 81
3.3.1 U-boot启动阶段1的处理过程 82
3.3.2 U-boot启动阶段2的处理过程 87
3.3.3 U-boot移植原理 88
3.3.4 基于U-boot的硬件调试 94
3.4 Linux 2.6内核移植原理 96
3.4.1 外部中断初始化 97
3.4.2 DMA接口 101
3.4.3 系统时钟接口 103
3.4.4 片上设备I/O地址空间的静态映射 106
3.4.5 片上I/O设备的定义 108
3.5 最小硬件系统与Linux 2.6内核移植 109
3.5.1 建立开发板平台描述文件 109
3.5.2 编写硬件include文件 111
3.5.3 修改内核配置文件 111
本章小结 112
习题与思考题 112
第4章 小键盘接口设计与Linux驱动开发 113
4.1 硬件原理 113
4.1.1 接口设计 114
4.1.2 电路原理 114
4.2 软件驱动原理 116
4.2.1 内核模块的加载和卸载函数 117
4.2.2 虚拟文件系统与硬件驱动的接口 118
4.2.3 设备打开操作接口函数 118
4.2.4 设备读取操作接口函数 119
4.2.5 设备关闭操作接口函数 119
4.2.6 攫取键值子函数 120
4.2.7 读缓冲区子函数 121
4.2.8 定时器在程序查询式I/O控制方式中的应用 122
4.2.9 利用等待队列实现阻塞型I/O 123
4.2.10 poll()系统调用接口函数 124
4.2.11 信号驱动的异步I/O操作的支持 126
4.3 键盘信息读取应用程序 127
4.3.1 打开键盘设备 127
4.3.2 读取键值 128
4.3.3 关闭键盘设备 129
本章小结 129
习题与思考题 129
第5章 实时时钟接口与Linux驱动开发 130
5.1 实时时钟接口电路设计 130
5.1.1 处理器与RTC-4513接口设计 130
5.1.2 RTC-4513电路原理 131
5.1.3 RTC-4513操作参数 134
5.1.4 RTC-4513的串行操作流程 136
5.2 RTC软件驱动原理 140
5.2.1 内核模块的加载和卸载 140
5.2.2 虚拟文件系统与硬件驱动的接口 140
5.2.3 设备打开操作接口函数 141
5.2.4 ioctl方法 141
5.2.5 设备关闭操作接口函数 145
5.2.6 读时钟寄存器子函数 146
5.2.7 写时钟寄存器子函数 146
5.3 RTC操作应用程序 147
5.4 基于Linux内核实时时钟子系统的RTC驱动 149
5.4.1 RTC设备驱动接口 150
5.4.2 实时时钟子系统的rtc-dev模块与上层API 152
本章小结 154
习题与思考题 154
第6章 触摸屏接口设计与Linux驱动开发 156
6.1 触摸屏的工作原理 156
6.2 ADS7843触摸屏控制器简介 157
6.3 处理器与ADS7843的接口设计 160
6.3.1 接口电路设计 160
6.3.2 Microwire数据帧结构 161
6.4 软件驱动原理 162
6.4.1 Linux输入设备子系统 162
6.4.2 触摸屏硬件操控原理 167
6.4.3 触摸屏驱动与输入设备子系统的接口 169
6.4.4 中断处理 173
6.5 基于触摸屏驱动的应用示例 175
本章小结 177
习题与思考题 178
第7章 以太网电路设计与Linux驱动开发 179
7.1 CS8900A以太网芯片简介 179
7.1.1 功能介绍 179
7.1.2 引脚定义 180
7.2 处理器与以太网接口电路设计 180
7.3 CS8900A片内寄存器介绍 182
7.3.1 总线接口寄存器组 182
7.3.2 状态与控制寄存器组 183
7.3.3 发送初始化寄存器组 191
7.3.4 地址过滤寄存器组 192
7.4 CS8900A的操作方法 193
7.4.1 CS8900的初始化 193
7.4.2 CS8900A的I/O模式寄存器 194
7.4.3 读写CS8900A的片内寄存器 194
7.5 软件驱动原理 195
7.5.1 Linux网络设备驱动框架 195
7.5.2 Linux网络协议栈与驱动间的接口 196
7.5.3 Linux网络设备接口 201
7.5.4 CS8900A驱动中的网络设备操作接口实现 203
7.5.5 数据接收与中断处理 207
7.5.6 利用平台总线设备封装网络驱动 212
本章小结 217
习题与思考题 217
第8章 PCMCIA外围电路设计和Linux驱动开发 218
8.1 基于PXA2XX处理器的PCMCIA接口 218
8.1.1 PCMCIA和CF接口简介 218
8.1.2 PCMCIA存储器映射 219
8.1.3 PCMCIA外部接口设计 220
8.2 外围电路驱动原理 220
8.2.1 双向收发器74LCX245的使用 220
8.2.2 CF卡插入检测 224
8.2.3 “卡读(写)使能”信号 224
8.2.4 PCMCIA接口的Socket Select 224
8.2.5 PCMCIA接口的电源管理 226
8.3 GPIO连接原理 227
8.3.1 存储控制单元的GPIO连接原理 227
8.3.2 与中断相关的GPIO连接原理 228
8.4 PCMCIA软件驱动原理 229
8.4.1 PCMCIA驱动程序体系 229
8.4.2 PCMCIA工作流程 230
8.4.3 插口驱动设计 231
8.5 PCMCIA Card Services软件包 233
8.5.1 软件包的安装 233
8.5.2 特定卡驱动 234
8.5.3 CF存储卡的使用 235
本章小结 237
习题与思考题 237
第9章 AC97音频处理电路设计与Linux驱动开发 238
9.1 PXA2XX AC97硬件工作原理 238
9.1.1 PXA2XX AC97音频处理电路设计 238
9.1.2 PXA2XX AC97控制单元 239
9.1.3 CS4299音频编解码器 245
9.2 Linux ALSA音频设备驱动原理 249
9.2.1 ALSA简介 249
9.2.2 ALSA声卡驱动架构 250
9.2.3 ALSA驱动中的声卡描述对象与音频设备组件管理 251
9.2.4 ALSA驱动的PCM中间层 254
9.2.5 ALSA驱动的AC97编解码器中间层 256
9.3 PXA2XX AC97的ALSA驱动 259
9.3.1 硬件初始化与声卡描述对象的创建和注册 260
9.3.2 PCM接口及其底层硬件操作接口的实现 262
9.3.3 AC97的底层硬件操作接口实现 266
本章小结 270
习题与思考题 270
参考文献 271