第1章 嵌入式系统概论 1
1.1 嵌入式系统概述 1
1.1.1 嵌入式系统的历史 1
1.1.2 什么是嵌入式系统 2
1.1.3 嵌入式系统的特点 2
1.1.4 嵌入式处理器 2
1.1.5 嵌入式系统的应用领域 5
1.1.6 嵌入式系统的发展趋势 6
1.2 嵌入式系统开发 7
1.2.1 需求分析和概要设计 7
1.2.2 嵌入式系统中的硬件 8
1.2.3 嵌入式系统中的软件 12
1.2.4 嵌入式系统软件开发的一般过程 16
1.2.5 嵌入式应用程序的开发 17
1.3 嵌入式操作系统 21
1.3.1 嵌入式操作系统概述 21
1.3.2 嵌入式操作系统的分类 22
1.3.3 嵌入式操作系统的特点 24
1.3.4 典型的嵌入式操作系统 25
1.3.5 嵌入式操作系统的选择 29
1.4 Linux操作系统 29
1.4.1 Linux操作系统概述 29
1.4.2 Linux的重要性 31
1.4.3 嵌入式Linux系统开发平台 33
1.4.4 Linux的发展前景 33
1.5 思考题 35
第2章 Linux基础知识 36
2.1 认识Linux操作系统 37
2.1.1 Linux简明历史 37
2.1.2 Linux系统的特点和组成 39
2.1.3 Linux的开发过程 41
2.2 基本操作命令 43
2.2.1 字符界面简介 43
2.2.2 常用命令简介 44
2.3 Linux文件与目录系统 48
2.3.1 Linux文件系统类型介绍 48
2.3.2 Linux目录系统 51
2.4 Shell简介 53
2.5 网络服务简介 55
2.5.1 Linux支持的网络协议 55
2.5.2 Linux的网络服务 57
2.6 思考题 58
第3章 Linux编程环境 59
3.1 Linux编程环境介绍 59
3.1.1 系统平台环境 59
3.1.2 开发工具环境 59
3.1.3 基于文本模式的开发平台 60
3.1.4 集成开发平台Eclipse+CDT 60
3.1.5 文档帮助环境 62
3.2 常用编辑器 63
3.2.1 VIM编辑器 63
3.2.2 Emacs编辑器 66
3.3 gcc编译器的使用 69
3.3.1 gcc的主要选项 70
3.3.2 GNU C扩展简介 74
3.4 GNU make管理项目 75
3.4.1 make简介 75
3.4.2 编写Makefile文件的规则 76
3.5 GDB调试 80
3.5.1 GDB命令介绍 80
3.5.2 GDB调试例程 83
3.5.3 基于GDB的图形界面调试工具 86
3.6 思考题 87
第4章 Linux外壳程序编程 88
4.1 创建和运行外壳程序 88
4.1.1 创建外壳程序 88
4.1.2 运行外壳程序 89
4.2 使用外壳变量 90
4.2.1 给变量赋值 90
4.2.2 读取变量的值 90
4.2.3 位置变量和其他系统变量 91
4.2.4 引号的作用 91
4.3 数值运算命令 92
4.4 条件表达式 94
4.4.1 if表达式 94
4.4.2 case表达式 95
4.5 循环语句 97
4.5.1 for语句 97
4.5.2 while语句 98
4.5.3 until语句 99
4.6 shift命令 99
4.7 select语句 100
4.8 repeat语句 101
4.9 函数 101
4.10 Shell应用举例 103
4.11 思考题 107
第5章 构建嵌入式Linux开发平台 108
5.1 GNU跨平台开发工具链 108
5.2 嵌入式Linux内核 115
5.3 嵌入式Linux根文件系统 116
5.4 BootLoader简介 117
5.5 思考题 118
第6章 ARM调试环境 119
6.1 ARM调试工具简介 119
6.1.1 JTAG仿真器 119
6.1.2 Multi-ICE Server 120
6.2 ADS软件调试工具 121
6.2.1 使用Metrowork Code Warrior for ARM Developer Suite 122
6.2.2 使用RealView Debugger 124
6.2.3 使用AXD Debugger 126
第7章 嵌入式BootLoader技术 132
7.1 BootLoader的基本概念 132
7.1.1 BootLoader所支持的CPU和嵌入式板 132
7.1.2 BootLoader的安装点和启动过程 133
7.1.3 BootLoader的模式 133
7.1.4 BootLoader与主机之间的通信方式 134
7.2 BootLoader典型结构框架 135
7.2.1 BootLoader总体流程 135
7.2.2 BootLoader的stage1 135
7.2.3 BootLoader的stage2 137
7.3 典型BootLoader分析和移植 145
7.3.1 U-Boot 145
7.3.2 Blob 152
7.4 其他BootLoader介绍 155
7.4.1 Redboot 155
7.4.2 ARMBoot 156
7.4.3 PPCBoot 156
7.4.4 ViVi 156
7.4.5 Yamon 156
7.5 思考题 156
第8章 Linux内核配置 157
8.1 内核概述 157
8.2 嵌入式Linux内核代码结构 158
8.3 内核开发的特点 160
8.3.1 没有libc库 160
8.3.2 GNU C 160
8.3.3 没有内存保护机制 162
8.3.4 不要轻易在内核中使用浮点数 162
8.3.5 容积小而固定的栈 162
8.3.6 同步和并发 162
8.3.7 可移植性的重要性 163
8.4 嵌入式Linux内核的配置 163
8.4.1 Makefile 163
8.4.2 配置文件 168
8.4.3 Linux内核配置选项 171
8.5 配置举例 177
8.6 思考题 179
第9章 ARM-Linux内核分析和移植 180
9.1 ARM微处理器 180
9.1.1 RISC体系结构 180
9.1.2 ARM微处理器的类型 181
9.1.3 ARM微处理器的寄存器结构 183
9.1.4 ARM微处理器的指令结构 185
9.2 ARM-Linux内存管理 186
9.2.1 内存管理单元MMU 186
9.2.2 ARM-Linux的存储管理机制 186
9.2.3 ARM-Linux存储机制的建立 186
9.2.4 ARM-Linux对进程虚拟空间的管理 191
9.3 ARM-Linux进程管理与调度 195
9.3.1 task_struct数据结构 195
9.3.2 Linux进程的创建、执行和消亡 204
9.3.3 ARM_Linux的进程调度 210
9.4 ARM-Linux中断与中断处理 217
9.4.1 Linux处理中断概述 217
9.4.2 ARM体系程序的执行流程 221
9.4.3 ARM的异常中断种类 221
9.4.4 ARM处理器对异常中断的响应及返回过程 222
9.5 ARM-Linux系统启动与初始化 224
9.5.1 内核数据结构的初始化 225
9.5.2 外设初始化 230
9.5.3 init进程和linittab文件 231
9.5.4 rc启动脚本 232
9.5.5 Shell的启动 232
9.6 Linux驱动程序简介 233
9.6.1 设备的分类 234
9.6.2 设备号 234
9.6.3 设备节点 235
9.6.4 用户空间和内核空间 235
9.7 Linux模块化机制 235
9.7.1 Linux的模块化 235
9.7.2 模块的载入 237
9.7.3 模块的卸载 238
9.8 ARM-Linux内核裁减 238
9.9 嵌入式Linux的移植 240
9.9.1 移植准备 240
9.9.2 移植步骤 240
9.9.3 配置内核选项 241
9.9.4 修改Kernel文件系统部分代码 242
9.10 思考题 244
第10章 嵌入式文件系统 245
10.1 Linux文件系统结构与特征 245
10.1.1 Linux文件系统概述 245
10.1.2 Linux文件系统布局 245
10.1.3 Linux支持的文件系统 252
10.2 嵌入式文件系统简介 253
10.2.1 NOR Flash与NAND Flash介绍 254
10.2.2 MTD介绍 254
10.2.3 cramfs文件系统简介 256
10.2.4 romfs文件系统简介 257
10.2.5 嵌入式文件系统JFFS简介 259
10.2.6 嵌入式文件系统YAFFS简介 260
10.3 构建根文件系统 261
10.4 根文件系统设置 263
10.5 BusyBox 265
10.5.1 BusyBox简介 265
10.5.2 使用BusyBox构建根文件系统 267
10.6 嵌入式文件系统的设计 269
10.6.1 文件系统格式的选型的基本策略 269
10.6.2 混合型文件系统的设计 269
10.7 思考题 270
第11章 嵌入式Web服务器设计 271
11.1 TCP/IP协议 271
11.1.1 TCP/IP协议栈 271
11.1.2 TCP/IP协议栈的数据流向 272
11.1.3 TCP协议与UDP协议 273
11.2 HTTP协议 274
11.2.1 HTTP协议的方法 274
11.2.2 HTTP协议消息头 276
11.2.3 HTTP协议使用举例 277
11.2.4 内核网络服务 278
11.3 Socket编程基础 278
11.3.1 Socket描述 278
11.3.2 Socket描述符 279
11.4 嵌入式Web服务器系统结构 280
11.4.1 协议标准 280
11.4.2 瘦Web服务器 280
11.4.3 嵌入式应用接口技术 281
11.4.4 实现形式 282
11.4.5 EMIT 282
11.4.6 RomPager 282
11.5 Web服务器构建 283
11.6 思考题 286
第12章 嵌入式Linux的GUI 287
12.1 嵌入式GUI简介 287
12.1.1 MiniGUI 288
12.1.2 Qt/Embedded 288
12.1.3 Nano-X 289
12.1.4 OpenGUI 289
12.2 MiniGUI程序设计基础 290
12.2.1 MiniGUI V1.3.3软件包 290
12.2.2 MiniGUI的特点 291
12.2.3 窗口处理过程 293
12.2.4 MiniGUI的线程机制 294
12.2.5 MiniGUI的体系结构 295
12.2.6 MiniGUI的底层引擎 296
12.2.7 MiniGUI的三种运行模式 297
12.2.8 MiniGUI移植 298
12.3 Qt/Embedded程序设计基础 299
12.3.1 Qt/Embedded的图形引擎实现基础 301
12.3.2 Qt/Embedded的事件驱动基础 303
12.3.3 Qt/Embedded底层支持分析 304
12.3.4 Qt/Embedded的移植 304
12.4 思考题 309
参考文献 310