第1章 嵌入式系统概述 1
1.1 嵌入式系统基础 2
1.1.1 嵌入式技术的发展历史 2
1.1.2 嵌入式系统的定义与特点 3
1.1.3 嵌入式系统的分类与组成结构 4
1.1.4 嵌入式系统的应用领域 6
1.1.5 嵌入式技术发展趋势 6
1.2 嵌入式系统的硬件系统 9
1.2.1 嵌入式处理器 9
1.2.2 嵌入式外围设备与接口 11
1.2.3 典型嵌入式处理器与开发板介绍 12
1.3 嵌入式系统的软件系统 15
1.3.1 嵌入式软件的基本特点与分类 15
1.3.2 嵌入式软件开发环境 17
1.3.3 嵌入式软件开发基本流程 18
1.3.4 嵌入式软件开发的要点 19
1.3.5 嵌入式操作系统 20
1.4 小结 23
第2章 ARM微处理器概述 25
2.1 ARM微处理器的技术特点 26
2.1.1 ARM微处理器体系结构及其发展历程 26
2.1.2 ARM微处理器体系结构 33
2.1.3 ARM微处理器的技术特点 34
2.1.4 ARM微处理器的应用与选型 34
2.2 ARM微处理器系列介绍 35
2.2.1 ARM7微处理器系列 36
2.2.2 ARM9微处理器系列 36
2.2.3 ARM9E微处理器系列 36
2.2.4 ARM10E微处理器系列 37
2.2.5 SecurCore微处理器系列 37
2.2.6 Intel的Xscale系列与StrongARM系列 37
2.3 ARM微处理器的编程模型 38
2.3.1 ARM微处理器的数据类型 38
2.3.2 ARM微处理器的工作状态 38
2.3.3 ARM微处理器模式 38
2.3.4 ARM微处理器的寄存器组织 39
2.3.5 ARM体系中的存储系统 45
2.3.6 异常(Exceptions) 48
2.4 小结 53
第3章 ARM程序设计基础 55
3.1 ARM预定义的寄存器和协处理器 56
3.2 ARM的指令系统介绍 56
3.2.1 ARM指令系统概要 56
3.2.2 ARM寻址方式介绍与示例 59
3.2.3 指令系统分类 63
3.2.4 ARM指令集介绍与使用范例 63
3.2.5 Thumb指令集介绍 76
3.3 ARM汇编语言体系 77
3.3.1 ARM汇编开发环境 77
3.3.2 基于ADS/STD环境的ARM伪指令系统 77
3.4 ARM汇编语言程序设计规范 79
3.4.1 汇编语言中常用的符号 80
3.4.2 汇编语言中的表达式与运算符 81
3.5 ARM汇编语言程序设计范例 84
3.5.1 ARM汇编语言的程序结构与设计方法 84
3.5.2 ARM汇编语言与C语言混合编程 86
3.6 基于GNU的ARM汇编开发环境介绍 87
3.6.1 Linux汇编环境中的基本定义 88
3.6.2 Linux下ARM汇编的常用伪操作 89
3.6.3 Linux下ARM汇编程序示例 91
3.6.4 两种汇编环境之间代码的移植 92
3.7 小结 93
第4章 嵌入式Linux操作系统 95
4.1 Linux操作系统基础 96
4.1.1 Linux简介 96
4.1.2 Linux与其他操作系统 97
4.1.3 Linux与UNIX和GNU 97
4.1.4 Linux操作系统的优良特性 99
4.1.5 Linux的应用 101
4.2 Linux内核概述 101
4.2.1 Linux内核 101
4.2.2 进程调度 104
4.2.3 内存管理 111
4.2.4 文件系统管理 116
4.2.5 Linux中设备管理 121
4.3 嵌入式Linux操作系统 124
4.3.1 Linux作为嵌入式操作系统的优势与不足 124
4.3.2 嵌入式Linux引导过程 124
4.3.3 典型嵌入式Linux操作系统 127
4.4 实时操作系统与Linux的实时化改造 130
4.4.1 实时操作系统 130
4.4.2 Linux系统的实时化改造 132
4.5 小结 135
第5章 ARM9开发环境与开发工具 137
5.1 嵌入式应用程序开发——交叉开发、调试 138
5.1.1 嵌入式开发环境概述 138
5.1.2 GNU Tools开发工具集 139
5.1.3 嵌入式系统调试技术介绍 140
5.1.4 ARM应用开发系统总体框架 142
5.1.5 使用NFS调试ARM嵌入式应用程序 143
5.2 编译工具gcc与调试工具gdb 146
5.2.1 gcc编译工具与编译过程 146
5.2.2 gdb调试工具与调试示例 150
5.2.3 使用gdb实现嵌入式交叉调试 153
5.3 GNU Make与Makefile的编写 154
5.3.1 什么是Make、Makefile 155
5.3.2 Makefile初步 156
5.3.3 Makefile概述 158
5.3.4 规则的书写 160
5.3.5 规则的命令书写 164
5.3.6 Makefile中的变量 167
5.3.7 条件判断 173
5.4 小结 174
第6章 嵌入式Linux操作系统移植 175
6.1 如何获得Linux源代码 176
6.2 Linux内核源代码目录结构概述 177
6.3 Linux Kernel Makefile的规则 178
6.3.1 哪些人需要使用内核Makefile 178
6.3.2 kbuild Makefile 179
6.3.3 编译中宿主机需要使用的文件 182
6.3.4 kbuild中的clean 184
6.3.5 Arch Makefiles 185
6.3.6 kbuild变量 191
6.4 配置、编译Linux内核 192
6.4.1 最小硬件系统 192
6.4.2 开发板平台描述文件分析 192
6.4.3 修改内核添加对板载NAND Flash闪存的支持 195
6.4.4 为NAND闪存系统添加YAFFS文件系统 196
6.4.5 修改编译器及启动镜像生成工具 202
6.4.6 编译内核 202
6.5 小结 203
第7章 Boot Loader和文件系统详解 205
7.1 Boot Loader简介 206
7.2 几种常见的Boot Loader 206
7.3 U-Boot的板级移植 207
7.3.1 U-Boot的启动流程 207
7.3.2 U-Boot源代码结构分析及导读 209
7.3.3 U-Boot的板级移植 215
7.4 嵌入式文件系统 226
7.4.1 文件系统的概念 226
7.4.2 根文件系统的基本结构 228
7.4.3 根文件系统的基本结构——/usr目录 231
7.4.4 根文件系统目录结构——/var目录 234
7.5 YAFFS文件系统详解 238
7.5.1 选择文件系统 238
7.5.2 Flash闪存简介 239
7.5.3 YAFFS文件系统 240
7.6 创建根文件系统 242
7.6.1 必要的命令、工具——/bin、/sbin目录 243
7.6.2 建立Busybox工具 244
7.6.3 设备文件:/dev目录 246
7.6.4 链接库文件:/lib目录 247
7.6.5 系统启动配置:/etc目录 249
7.6.6 生成rootfs.yaffs文件系统映像 250
7.7 小结 250
第8章 设备驱动开发入门 251
8.1 Linux设备驱动基础 252
8.1.1 Linux设备驱动概述 252
8.1.2 设备类型分类 253
8.1.3 设备节点、文件节点、设备文件 254
8.1.4 主设备号和辅设备号 255
8.1.5 加载和删除驱动程序 255
8.2 设备驱动程序模块化编程 256
8.2.1 内核空间与用户空间 257
8.2.2 一个简单的内核模块 257
8.2.3 简单驱动程序模块实例 259
8.3 字符设备驱动程序入门 262
8.3.1 字符设备定义与常见字符设备 262
8.3.2 驱动程序中的关键数据结构分析 262
8.3.3 驱动程序中的基本函数分析 266
8.4 字符设备驱动程序编写范例分析 269
8.4.1 一个最简单的字符设备驱动程序 269
8.4.2 S3C2440A片上A/D采样设备驱动程序编写范例 274
84.3 S3C2440A触摸屏接口驱动程序实例分析 283
8.5 块设备驱动入门 296
8.5.1 块设备与块设备驱动 296
8.5.2 驱动程序中的关键数据结构分析 297
8.5.3 驱动程序中的基本函数分析 299
8.6 块设备驱动程序编写范例分析 301
8.6.1 最简单的块设备驱动程序设计与分析 301
8.6.2 NAND Flash K9F 1208(块设备)驱动编写实例 303
8.7 小结 317
第9章 常用设备驱动 319
9.1 UART串口驱动与通信实现 320
9.1.1 异步串行通信介绍 320
9.1.2 S3C2440 UART相关寄存器 321
9.1.3 UART驱动程序设计分析 324
9.1.4 Linux下串口通信编程范例 328
9.2 LCD驱动程序设计与实现 335
9.2.1 嵌入式系统中LCD驱动程序实现原理 335
9.2.2 LCD驱动程序关键数据结构分析 337
9.2.3 LCD驱动程序的实现 342
9.2.4 Linux显示应用程序设计简介 343
9.3 USB驱动程序开发 344
9.3.1 USB驱动与Linux下USB系统文件节点 344
9.3.2 USB驱动程序结构分析 345
9.3.3 USB主机驱动程序的实现 346
9.4 网络控制芯片(DM9000)与驱动设计 353
9.4.1 DM9000以太网控制芯片 353
9.4.2 网络控制器驱动设计 356
9.4.3 DM9000网络芯片驱动程序分析 362
9.5 小结 378
第10章 嵌入式系统图形界面设计 379
10.1 嵌入式图形用户界面(GUI)简介 380
10.1.1 嵌入式GUI工作模式 380
10.1.2 嵌入式GUI的分层结构 381
10.2 常见的嵌入式GUI 382
10.2.1 MiniGUI 382
10.2.2 MicroWindows 384
10.2.3 OpenGUI 385
10.2.4 Qt/Embedded 385
10.2.5 几款嵌入式GUI的比较与选择 385
10.3 Qt/Embedded图形用户界面系统 386
10.3.1 Qt/Embedded简介 386
10.3.2 Qt/Embedded嵌入式图形引擎实现 389
10.3.3 Qt/Embedded的Server/Client模型 391
10.3.4 Qt/Embedded中鼠标与键盘的控制 393
10.3.5 Qt/Embedded应用程序的图形显示 397
10.4 Qt/Embedded应用程序的开发 399
10.4.1 Qt/Embedded应用程序开发流程 399
10.4.2 Qt/Embedded开发工具(qmake、qvfb)的使用 401
10.4.3 Qt/Embedded开发环境创建 406
10.4.4 将Qt/Embedded程序加载至目标板 407
10.5 Qt/Embedded应用程序开发示例 408
10.5.1 Qt与Qt/Embedded的主要类 408
10.5.2 使用C++编写Qt/Embedded应用程序示例 412
10.5.3 Qt/Embedded应用程序开发实例 415
10.5.4 使用Qt Designer开发Qt/Embedded应用程序 421
10.6 小结 422
第11章 嵌入式系统开发模式 423
11.1 嵌入式系统的开发过程 424
11.1.1 确定系统的要求 424
11.1.2 设计系统的体系结构 424
11.1.3 开发平台与开发工具 425
11.1.4 软、硬件联调 426
11.1.5 系统测试与评估 426
11.2 嵌入式Linux开发模式 426
11.2.1 引导加载程序 427
11.2.2 Linux内核 427
11.2.3 文件系统的装载 428
11.2.4 图形用户界面 428
11.2.5 应用程序开发 429
11.3 小结 430
第12章 嵌入式网络与嵌入式Web服务 431
12.1 嵌入式网络通信 432
12.1.1 嵌入式Internet技术 432
12.1.2 嵌入式网络通信协议TCP/IP 435
12.2 嵌入式Web服务 440
12.2.1 嵌入式Web服务器架构 440
12.2.2 Web服务中的超文本传输协议(HTTP) 444
12.2.3 嵌入式CGI 448
12.2.4 实现动态数据Web页面 456
12.2.5 实现交互式输入Web页面 457
12.3 嵌入式Web服务器设计与应用 459
12.3.1 远程重构概述与网络拓扑结构 460
12.3.2 嵌入式重构Web服务器端软件模块设计 461
12.4 小结 464
附录A 嵌入式开发网络资源 465
附录B Linux常见命令 467
附录C GNU GPL——GNU通用公共许可证 474
参考文献 479