第1部分 嵌入式基础 3
1 嵌入式系统概述 3
1.1 嵌入式系统的主流应用 5
1.2 嵌入式系统的特点 6
1.3 嵌入式系统基本组成 8
1.4 嵌入式处理器 9
1.4.1 嵌入式处理器分类 9
1.4.2 嵌入式微处理器介绍 11
1.5 嵌入式软件 12
1.5.1 嵌入式处理器分类 12
1.5.2 嵌入式微处理器介绍 14
1.6 嵌入式系统特性分析 14
1.6.1 嵌入式软件的分类 14
1.6.2 嵌入式软件发展趋势 15
1.7 嵌入式系统发展趋势 17
1.8 小结 18
1.9 习题 18
2 嵌入式系统基本设计方法 19
2.1 嵌入式系统设计概述 19
2.1.1 嵌入式系统设计的内容 19
2.1.2 嵌入式系统设计的技术背景 19
2.1.3 嵌入式系统设计方法的分类 20
2.1.4 嵌入式开发环境 22
2.2 嵌入式系统软硬件协同设计概述 22
2.2.1 软硬件协同设计的发展背景与过程 23
2.2.2 软硬件协同设计流程 24
2.3 需求分析和概要设计 25
2.3.1 用户需求分析和确定项目约束条件 25
2.3.2 系统硬件和软件功能划分 26
2.3.3 概要设计 26
2.4 详细设计 27
2.4.1 确定系统体系结构 27
2.4.2 硬件与软件的选型 27
2.4.3 微处理器选型和外围接口电路设计 29
2.4.4 嵌入式操作系统的选择 30
2.5 实现阶段 32
2.5.1 软件与硬件系统的实现 32
2.5.2 嵌入式系统的调试 33
2.6 测试阶段 35
2.6.1 嵌入式软件测试方法 35
2.6.2 嵌入式软件测试工具 36
2.6.3 嵌入式软件测试过程 37
2.7 小结 38
2.8 习题 38
3 嵌入式微处理器ARM 39
3.1 ARM微处理器系列 39
3.1.1 ARM微处理器简介 39
3.1.2 ARM体系结构及发展 39
3.1.3 ARM微处理器系列 40
3.2 ARM微处理器体系结构 43
3.2.1 ARM微处理器的工作状态 43
3.2.2 ARM微处理器的存储格式 43
3.2.3 ARM微处理器的指令流水线 45
3.2.4 ARM微处理器的处理器模式 44
3.2.5 ARM微处理器ARM状态下寄存器组织 45
3.2.6 ARM的异常处理 48
3.3 ARM典型微处理器 49
3.3.1 Samsung S3C2410X简介 50
3.3.2 S3C2410X功能结构框图 50
3.4 ARM指令系统 51
3.4.1 指令格式 51
3.4.2 条件码 52
3.4.3 ARM的寻址方式 52
3.4.4 ARM指令集简介 55
3.5 ARM伪指令及汇编程序设计简介 68
3.5.1 符号定义伪指令 68
3.5.2 数据定义伪指令 69
3.5.3 汇编控制伪指令 71
3.5.4 ARM伪指令 72
3.5.5 其他伪指令 73
3.5.6 汇编语言编程 75
3.6 小结 76
3.7 习题 77
4 嵌入式系统存储器和常用接口 78
4.1 嵌入式系统存储器分类 78
4.1.1 易失性存储器 78
4.1.2 非易失性寄存器 79
4.2 嵌入式系统存储器管理 80
4.3 S3C2410X存储系统 81
4.3.1 S3C2410X存储系统的特征 81
4.3.2 BankO总线宽度 81
4.3.3 存储器(SROM/SDRAM)地址引脚连接 82
4.4 通用UART 83
4.4.1 概述 84
4.4.2 UART操作 84
4.4.3 中断/DMA请求产生器 86
4.4.4 波特率发生器 87
4.4.5 UART寄存器 87
4.5 LCD控制 91
4.5.1 LCD简介 91
4.5.2 LCD控制器介绍 91
4.5.3 TFT LCD控制器操作 93
4.5.4 LCD寄存器介绍 97
4.6 以太网接口 102
4.6.1 以太网通信原理介绍 102
4.6.2 CS8900A以太网芯片简介 103
4.6.3 CS8900A的PacketPage结构 104
4.7 其他I/O 112
4.7.1 CAN总线模块 112
4.7.2 I2C总线 113
4.7.3 PCMCIA接口 113
4.7.4 USB接口 113
4.7.5 红外线通信接口 113
4.7.6 A/D&D/A转换器 113
4.8 小结 114
4.9 习题 114
5 嵌入式系统构件 115
5.1 嵌入式系统软件构件技术 115
5.1.1 基本概念 115
5.1.2 实例 117
5.2 LCD显示构件 118
5.2.1 模型 118
5.2.2 接口函数 118
5.2.3 模块实现 120
5.3 小结 124
5.4 习题 124
第2部分 嵌入式Linux操作系统 124
6 嵌入式Linux基础 127
6.1 嵌入式Linux系统概述 127
6.1.1 嵌入式Linux的优势和挑战 127
6.1.2 常见的嵌入式Linux系统简介 129
6.2 嵌入式Linux开发环境 130
6.2.1 嵌入式Linux开发的步骤 130
6.2.2 环境的建立 131
6.3 小结 136
6.4 习题 136
7 嵌入式Linux的Bootloader 137
7.1 Bootloader简介 137
7.1.1 Bootloader的概念 137
7.1.2 Bootloader的启动 138
7.1.3 Bootloader的种类 140
7.2 常用Bootloader的介绍 141
7.2.1 ARMboot 141
7.2.2 U-Boot 142
7.2.3 Blob 144
7.2.4 vivi 144
7.3 Bootloader的统写和使用 145
7.3.1 Bootloader的烧写 145
7.3.2 Bootloader的使用 146
7.4 初始化引导代码实例 146
7.4.1 U-Boot源码结构 147
7.4.2 启动流程分析 148
7.4.3 main& c文件 176
7.5 小结 178
7.6 习题 179
8 嵌入式Linux内核 180
8.1 Linux内核概述 180
8.1.1 Linux内核和功能结构 180
8.1.2 Linux内核源代码布局 182
8.1.3 内核的移植 184
8.2 Linux内核模块 185
8.2.1 进程管理模块 185
8.2.2 存储管理模块 187
8.3 Linux的编译和定制 189
8.3.1 Linux内核编译概述 189
8.3.2 编译内核前的准备工作 189
8.3.3 编译内核第一步:配置内核 190
8.3.4 编译内核第二步:编译内核 191
8.3.5 编译内核后生成的文件 191
8.4 Linux系统调用举例 193
8.4.1 Linux系统调用介绍 193
8.4.2 给内核增加新的系统调用的实例 194
8.5 小结 196
8.6 习题 196
9 嵌入式Linux文件系统 197
9.1 Linux文件系统结构 197
9.1.1 Linux文件系统的特点 197
9.1.2 Mount命令 198
9.1.3 文件的类型 199
9.1.4 Linux常见的文件系统 200
9.1.5 VFS 200
9.2 MTD 201
9.3 嵌入式Linux专用文件系统 202
9.3.1 JFFS/JFFS 2202
9.3.2 YAFFS/YAFFS 2203
9.3.3 Cramfs 204
9.4 如何构造根文件系统 205
9.4.1 根文件系统的基本结构 205
9.4.2 为嵌入式系统建立一个完整的文件系统 206
9.5 小结 210
9.6 习题 210
10 嵌入式Linux设备驱动程序 211
10.1 Linux设备介绍 211
10.1.1 Linux设备分类 211
10.1.2 设备文件 211
10.1.3 设备号 212
10.2 Linux设备驱动程序 212
10.3 Linux设备驱动程序模块结构 215
10.4 Linnux设备驱动程序的编写举例 215
10.4.1 主要数据结构和全局变量 220
10.4.2 主要接口函数 221
10.4.3 模块加载函数 223
10.4.4 模块加载和驱动安装 224
10.5 小结 226
10.6 习题 226
11 嵌入式Linux系统应用程序开发 227
11.1 Linux应用程序开发概述 227
11.2 Vi编辑器 228
11.3 使用gcc进行Linux应用程序开发 228
11.4 GNU的make和Makefile 229
11.4.1 GNU Make概述 229
11.4.2 Makefile介绍 229
11.4.3 GNU make的主要预定义变量 232
11.4.4 make的命令行选项 232
11.5 嵌入式Linux 的GUI 233
11.5.1 概述 233
11.5.2 常见的嵌入式Linux GUI简介 233
11.5.3 MiniGui 235
11.6 小结 238
11.7 习题 238
第3部分 Windows CE. NET操作系统 238
12 Windows CE. NET体系结构 241
12.1 Windows CE简介 241
12.1.1 Windows CE概述 241
12.1.2 Windows CE. NET概述 241
12.1.3 Windows CE的发展 242
12.1.4 Windows CE的应用 243
12.2 Windows CE. NET系统架构 244
12.2.1 Windows CE. NET系统特征 244
12.2.2 Windows CE. NET体系结构 246
12.2.3 Windows CE. NET内核 247
12.2.4 Windows CE. NET实时特性 250
12.3 Windows CE. NET系统调度 251
12.3.1 Windows CE. NET进程的描述和控制 251
12.3.2 Windows CE. NET进程的同步 255
12.3.3 Windows CE. NET进程间通信 257
12.4 Windows CE. NET内存管理 259
12.4.1 Windows CE. NET内存体系结构 259
12.4.2 Windows CE. NET进程地址空间 260
12.4.3 物理内存 262
12.4.4 虚拟内存 264
12.4.5 内存分配方式 266
12.5 Windows CE. NET存储管理与文件系统 268
12.5.1 对象存储 269
12.5.2 文件系统 269
12.5.3 存储管理器 270
12.5.4 注册表 270
12.6 Windows CE. NET设备管理 271
12.7 Windows CE.NET用户界面与图形子系统 272
12.8 小结 273
12.9 习题 273
13 Windows CE. NET系统定制 274
13.1 Windows CE开发平台的构建与配置 274
13.1.1 基于Windows CE的嵌入式产品的开发流程 274
13.1.2 开发平台的搭建及使用 275
13.1.3 Platform Builder集成开发环境 277
13.2 Windows CE. NET内核定制 280
13.2.1 平台开发周期 280
13.2.2 定制Windows CE操作系统的过程 282
13.2.3 在Platform Builder中添加自定义特性 287
13.2.4 内核镜像的两种运行环境 290
13.3 内核镜像的创建原理 297
13.3.1 源代码配置文件 297
13.3.2 镜像配置文件 299
13.3.3 内核镜像的生成原理 301
13.4 小结 305
13.5 习题 305
14 Windows CE. NET系统开发 306
14.1 Windows CE. NET开发 306
14.1.1 Windows CE. NET开发概述 306
14.1.2 Windows CE. NET开发过程 309
14.2 BSP开发概述 312
14.2.1 BSP概述 312
14.2.2 BSP基本结构 312
14.2.3 BSP开发 313
14.3 驱动程序开发 315
14.3.1 驱动开发概述 315
14.3.2 Windows CE. NET的驱动模型 315
14.3.3 Windows CE. NET驱动程序的中断机制 318
14.3.4 流接口驱动程序工作原理 322
14.3.5 流接口驱动程序开发过程 323
14.3.6 流接口驱动程序开发实例 325
14.4 Bootloader开发 329
14.4.1 Bootloader概述 329
14.4.2 Eboot 331
14.4.3 Bootloader开发概述 334
14.5 OAL开发 335
14.5.1 OAL概述 335
14.5.2 Windows CE操作系统的启动过程 336
14.5.3 OAL基本开发 337
14.6 小结 339
14.7 习题 339
15 Windows CE. NET应用开发 340
15.1 应用开发概述 340
15.1.1 Windows CE应用程序开发流程 340
15.1.2 Windows CE编程特性 341
15.2 Windows CE的应用编程接口 342
15.2.1 Win 32 API 343
15.2.2 MFC 344
15.2.3 .NET Compact Framework 344
15.2.4 各种编程接口的比较 346
15.3 Windows CE应用开发工具 347
15.3.1 Windows CE应用程序开发的选择 347
15.3.2 Windows CE应用程序开发工具概述 349
15.3.3 EVC集成开发环境 350
15.3.4 Visual Studio. NET 353
15.3.5 开发软件的依赖关系 356
15.4 Embedded Visual C++4.O应用开发概述 357
15.4.1 MFC应用程序的建立 357
15.4.2 应用程序功能的添加 360
15.5 Windows CE通信开发实例 362
15.5.1 Windows CE串行通信原理 362
15.5.2 功能描述 363
15.5.3 关键代码分析 363
15.5.4 源代码剖析 365
15.6 小结 371
15.7 习题 371
参考文献 372