第1章 绪论 1
1.1 嵌入式系统的概念 1
1.2 嵌入式系统的分类 1
目录 1
1.3 嵌入式系统的组成 2
1.4 嵌入式系统的设计流程 3
1.5 嵌入式技术的发展趋势 5
习题与思考题 7
2.1.1 RISC体系结构 8
第2章 ARM与XScale体系结构简介 8
2.1 ARM处理器介绍 8
2.1.2 ARM系列处理器 9
2.2 ARM体系结构的一些重要概念 11
2.2.1 处理器工作状态 11
2.2.2 处理器模式 11
2.2.3 ARM寄存器 12
2.2.4 异常 15
2.3 XScale体系结构 16
2.3.1 XScale超级流水线 17
2.3.2 协处理器 18
2.3.3 无线MMX指令单元 19
2.3.4 内存管理 19
2.3.5 指令快存 20
2.3.6 数据快存 20
2.3.9 性能监视 21
2.3.10 电源管理 21
2.3.11 调试 21
2.3.8 写缓冲器 21
2.3.7 转移目标缓冲器BTB 21
2.4 PXA系列处理器 22
2.4.1 PXA255处理器 22
2.4.2 PXA27x处理器 24
2.5 XScale开发平台 26
2.5.1 XSBase255开发平台 26
2.5.2 XSBase270开发平台 29
本章小结 31
习题与思考题 31
3.2 操作系统的发展过程 32
3.1 操作系统的概念 32
第3章 操作系统基础 32
3.3 嵌入式操作系统 34
3.3.1 嵌入式操作系统的演化及其发展趋势 35
3.3.2 常见的嵌入式操作系统 36
3.3.3 嵌入式操作系统的选择 39
3.4 操作系统的功能 41
3.4.1 进程管理 41
3.4.2 存储器管理 44
3.4.4 文件管理 48
3.4.3 设备管理 48
本章小结 49
习题与思考题 49
第4章 Linux概述 50
4.1 Linux的历史 50
4.2 Linux常见发行版简介 51
4.3 Linux操作系统的构成 51
4.3.1 总体结构 51
4.3.2 Linux内核 52
4.3.3 根文件系统目录树结构 53
4.3.5 Linux文件 55
4.3.4 Shell简介 55
4.4 Linux的基本操作 56
4.4.1 Linux命令的使用 56
4.4.2 vi编辑器的使用 74
4.4.3 Linux配置与管理的相关命令 75
4.5 嵌入式Linux简介 78
4.5.1 自制嵌入式Linux 78
4.5.2 商业版嵌入式Linux 79
4.5.3 NMT RT-Linux 79
4.5.4 RTAI 80
4.5.5 μClinux 81
本章小结 82
习题与思考题 82
第5章 Linux程序开发简介 83
5.1 GNU Compiler Collection简介 83
5.1.1 用GCC编译简单程序 84
5.1.2 GCC使用简介 84
5.2 GNU make与Makefile编写 87
5.2.1 Makefile的编写 88
5.2.3 Makefile的变量 89
5.2.2 Makefile的处理过程 89
5.2.4 Phony目标 91
5.2.5 利用隐含规则简化Makefile 92
5.2.6 make的命令行参数 93
5.2.7 Makefile示例 93
5.3 Autoconf和Automake简介 94
5.3.1 使用前的准备 95
5.3.2 自动生成Makefile的方法 95
5.3.3 Makefile.am的编写 97
5.3.4 自动处理复杂软件包 98
5.4 GDB/Insight调试器的使用 100
5.4.1 GDB调试工具简介 100
5.4.2 GDB图形前端Insight简介 111
5.5 Linux下集成开发工具的使用 118
本章小结 122
习题与思考题 122
第6章 嵌入式Linux开发入门 123
6.1 嵌入式系统的开发模式 123
6.2 嵌入式Linux系统的开发流程 124
6.3.1 开发环境的安装 125
6.3 嵌入式Linux的构造 125
6.3.2 内核裁剪与编译 126
6.3.3 Busybox与根文件系统的构造 131
6.4 在开发板上运行嵌入式Linux 137
6.4.1 Bootloader简介 137
6.4.2 U-boot烧写与使用 138
6.4.3 用U-boot启动嵌入式Linux 143
6.5 嵌入式硬件仿真环境SkyEye 150
6.5.1 SkyEye安装 151
6.5.2 在SkyEye中运行嵌入式Linux 152
6.5.3 在图形化的SkyEye-Insight下调试Linux内核 156
6.6 嵌入式应用程序开发调试 158
6.6.1 将应用程序加入嵌入式Linux系统 158
6.6.2 应用程序的移植 159
6.6.3 通过NFS调试嵌入式应用程序 161
6.6.4 通过Cross-gdb调试应用程序 163
本章小结 166
习题与思考题 166
7.1 基本原理 168
7.1.1 设备分类 168
第7章 Linux 2.6内核驱动原理 168
7.1.2 设备号 169
7.2 内核模块 169
7.2.1 内核模块的概念 169
7.2.2 内核模块的框架 170
7.2.3 2.6系列内核模块的编译和加载 170
7.3 设备驱动程序的结构 174
7.3.1 虚拟文件系统与硬件驱动的接口 174
7.3.2 简单字符设备的驱动 176
7.4.1 Linux2.6设备模型概述 178
7.4 Linux2.6内核设备模型 178
7.4.2 移植到新的驱动模式 180
7.5 Linux 2.6内核的中断处理 182
7.5.1 中断处理程序的注册与释放 183
7.5.2 中断处理程序的编写 184
7.6 Linux 2.6内核的工作推后执行的机制 184
7.6.1 软中断 185
7.6.2 Tasklet 185
7.6.3 工作队列 187
习题与思考题 190
本章小结 190
第8章 处理器核心电路设计和底层软件移植 191
8.1 最小硬件系统设计 191
8.1.1 系统存储器接口 191
8.1.2 串口电路原理 194
8.2 最小硬件系统的配置 195
8.2.1 处理器的配置 195
8.2.2 Flash SDRAM的配置 196
8.2.3 GPIO和串口的配置 199
8.3 最小硬件系统与Bootloader 201
8.3.1 U-boot启动阶段1的处理过程 202
8.3.2 U-boot启动阶段2的处理过程 207
8.3.3 U-boot移植原理 208
8.3.4 基于U-boot的硬件调试 214
8.4 最小硬件系统与Linux 2.6内核移植 216
8.4.1 建立开发板平台描述文件 217
8.4.2 编写硬件include文件 219
8.4.3 修改内核配置文件 219
本章小结 219
习题与思考题 220
9.1 Keypad硬件原理 221
9.1.1 Keypad接口设计 221
第9章 Keypad接口设计与驱动开发 221
9.1.2 Keypad电路原理 222
9.2 Keypad软件驱动原理 224
9.2.1 内核模块的注册和撤销 224
9.2.2 虚拟文件系统与硬件驱动的接口 225
9.2.3 设备打开操作接口函数 225
9.2.4 设备读取操作接口函数 226
9.2.6 获取键值子函数 227
9.2.5 设备关闭操作接口函数 227
9.2.7 读缓冲区子函数 229
9.2.8 内核定时器的使用 229
9.2.9 利用等待队列实现阻塞型I/O 230
9.2.10 poll系统调用操作接口函数 231
9.2.11 在设备驱动中实现异步通知 233
9.3 键盘信息读取应用实例 234
本章小结 236
习题与思考题 236
10.1 RTC电路设计 237
10.1.1 处理器与RTC-4513接口设计 237
第10章 RTC接口电路设计与驱动开发 237
10.1.2 RTC-4513电路原理 238
10.1.3 RTC-4513操作参数 240
10.1.4 RTC-4513的串行操作流程 243
10.2 RTC软件驱动原理 246
10.2.1 内核模块的注册和撤销 247
10.2.2 虚拟文件系统与硬件驱动的接口 247
10.2.3 设备打开操作接口函数 248
10.2.4 使用ioctl()方法 248
10.2.6 读时钟寄存器子函数 252
10.2.5 设备关闭操作接口函数 252
10.2.7 写时钟寄存器子函数 253
10.3 RTC操作应用实例 253
本章小结 256
习题与思考题 256
第11章 触摸屏电路设计与驱动开发 257
11.1 触摸屏的工作原理 257
11.2 ADS7843触摸屏控制器简介 258
11.3 处理器与ADS7843的接口设计 260
11.3.1 电路接口设计 260
11.3.2 Micrwoire数据帧结构 261
11.4.1 Linux内核输入设备子系统驱动架构 263
11.4.2 硬件操控原理 263
11.4 触摸屏软件驱动原理 263
11.4.3 输入设备驱动接口的使用 266
11.4.4 中断处理 268
11.5 基于触摸屏驱动的应用实例 270
本章小结 272
习题与思考题 272
12.1.1 功能介绍 273
12.1.2 引脚定义 273
第12章 以太网电路设计与驱动开发 273
12.1 CS8900A以太网芯片简介 273
12.2 处理器与以太网芯片接口设计 274
12.3 CS8900A片内寄存器介绍 275
12.3.1 总线接口寄存器组 275
12.3.2 状态与控制寄存器组 276
12.3.3 发送初始化寄存器组 285
12.4 CS8900A的操作方法 286
12.4.1 CS8900A的初始化 286
12.3.4 地址过滤寄存器组 286
12.4.2 CS8900A的I/O模式寄存器 287
12.4.3 CS8900A片内寄存器的读/写 287
12.5 Linux网络设备软件驱动原理 288
12.5.1 Linux网络设备驱动框架 288
12.5.2 Linux网络设备接口 289
12.5.3 网络驱动程序的实现 294
本章小结 303
习题与思考题 303
13.1.1 PCMCIA和CF接口简介 304
第13章 PCMCIA外围电路设计与驱动开发 304
13.1 PXA2XX处理器的PCMCIA接口 304
13.1.2 PXA2XX处理器的PCMCIA存储器映射 305
13.1.3 PCMCIA外部接口设计 305
13.2 外围电路驱动原理 307
13.2.1 双向收发器74LCX245的使用 307
13.2.2 CF卡插入检测 308
13.2.3 “卡读(写)使能”信号 310
13.2.4 PCMCIA接口的Socket Select 311
13.2.5 PCMCIA接口的电源管理 311
13.3.1 存储控制单元的GPIO连接原理 313
13.3 GPIO连接原理 313
13.3.2 与中断相关的GPIO连接原理 314
13.4 PCMCIA软件驱动原理 315
13.4.1 PCMCIA设备驱动体系结构 315
13.4.2 PCMCIA工作流程 316
13.4.3 插口驱动设计 316
13.5 PCMCIA Card Services软件包 319
13.5.1 软件包的安装 319
13.5.2 Ture IDE模式的CF卡驱动 320
13.5.3 CF存储卡的使用 321
本章小结 323
习题与思考题 323
第14章 AC97音频处理电路设计与驱动开发 324
14.1 PXA255 AC97硬件工作原理 324
14.1.1 PXA255 AC97音频处理电路设计 324
14.1.2 PXA255 AC97控制单元 324
14.1.3 CS4299音频编解码器 331
14.2 AC97软件驱动原理 335
14.2.1 音频设备的注册及初始化 335
14.2.2 DSP设备 338
14.2.3 混音器设备 340
14.3 音频应用实例 342
本章小结 346
习题与思考题 347
第15章 图形用户界面设计 348
15.1 PXA255显示驱动 348
15.1.1 LCD接口原理 348
15.1.2 LCD驱动流程 351
15.2 常见的嵌入式图形用户界面简介 358
15.3 QT/E和Qtopia移植 360
15.4 免费的GUI——Tiny-X 364
本章小结 366
习题与思考题 367
第16章 嵌入式Linux网络应用开发 368
16.1 TCP/IP和Linux网络简介 368
16.2 Linux套接字编程接口介绍 370
16.3 基于IPv4协议Socket编程 371
16.3.1 基于TCP的Socket编程 371
16.3.2 基于TCP Socket的应用实例——猜数字游戏 374
16.3.3 基于UDP的Socket编程 378
16.3.4 基于UDP Socket的应用实例——服务查询 379
16.4 IPv6网络应用程序开发 382
16.4.1 IPv6简介 382
16.4.2 IPv4程序移植到IPv6的方法 384
16.5 IPv4到IPv6程序移植实例 390
16.5.1 基于TCP Socket的猜数字游戏程序移植 390
16.5.2 基于UDP Socket的服务查询程序移植 393
本章小结 399
习题与思考题 399
17.1 嵌入式软件优化方法概述 400
第17章 嵌入式系统软件优化方法简介 400
17.2 基于Intel IPP/GPP库的软件优化 401
17.2.1 Intel IPP库简介 401
17.2.2 Intel GPP图形库简介 404
17.3 Intel VTune可视化性能分析工具 404
17.3.1 VTune概要 404
17.3.2 VTune实验 407
本章小结 413
习题与思考题 413
18.1 数字身份认证系统 414
18.1.1 系统原理 414
第18章 PXA处理器应用解决方案 414
18.1.2 系统设计 415
18.1.3 硬件设计 417
18.1.4 软件设计 418
18.2 智能家庭监控系统 423
18.2.1 系统原理 423
18.2.2 系统设计 424
18.2.3 硬件设计 425
18.2.4 软件设计 428
18.3.1 系统设计 430
18.3 支持NGI与自动目标跟踪的数字视频监控系统 430
18.3.2 硬件设计 431
18.3.3 软件设计 432
18.4 PMP便携式媒体播放器 435
18.4.1 方案选择 435
18.4.2 Intel PXA27x解决方案的优势 436
18.4.3 硬件设计 437
18.4.4 软件设计 439
本章小结 439
附录 基于μClinux的嵌入式开发 440
参考文献 452