第1章 嵌入式系统基础 1
1.1 嵌入式系统 1
1.1.1 嵌入式系统基本概念 2
1.1.2 嵌入式系统的特点 3
1.1.3 嵌入式系统的分类 4
1.2 嵌入式系统的组成 4
1.2.1 嵌入式处理器 6
1.2.2 嵌入式外围设备 8
1.2.3 常见嵌入式系统平台 9
1.2.4 嵌入式操作系统 9
1.2.5 嵌入式应用软件 10
1.3 嵌入式系统学习开发入门 11
1.4 嵌入式系统的发展趋势 11
1.5 嵌入式系统设计流程 12
本章小结 12
第2章 ARM微处理器概述 13
2.1 ARM起源和发展 13
2.2 ARM微处理器的应用领域及特点 14
2.2.1 ARM微处理器的应用领域 14
2.2.2 ARM微处理器的特点 15
2.3 ARM微处理器系列 15
2.3.1 ARM7微处理器系列 17
2.3.2 ARM9微处理器系列 18
2.3.3 ARM9E微处理器系列 18
2.3.4 ARM10E微处理器系列 19
2.3.5 SecurCore微处理器系列 20
2.3.6 Intel的StrongARM微处理器系列 20
2.3.7 Intel的Xscale微处理器 20
2.4 ARM微处理器结构 21
2.4.1 RISC体系架构 21
2.4.2 ARM微处理器的寄存器结构 22
2.4.3 ARM微处理器的指令结构 22
2.5 ARM微处理器的应用选型 23
本章小结 23
第3章 ARM指令集 24
3.1 ARM处理器以及相对应的寄存器 24
3.2 ARM处理器的9种寻址方式 25
3.3 ARM指令集 27
3.3.1 一般格式 27
3.3.2 ARM存储器访问指令 29
3.3.3 ARM数据处理指令 32
3.3.4 ARM跳转指令 36
3.3.5 ARM协处理器指令 37
3.3.6 其他指令 38
3.3.7 ARM伪指令 40
3.4 Thumb指令集 42
3.4.1 Thumb指令集与ARM指令集的区别 42
3.4.2 数据处理指令 42
3.4.3 Thumb存储器访问指令 43
3.4.4 Thumb数据处理指令 45
3.5 伪指令 53
3.5.1 符号定义伪指令 53
3.5.2 数据定义伪指令 55
3.5.3 报告伪指令 59
3.5.4 汇编控制伪指令 61
3.5.5 其他伪指令 62
3.5.6 ARM伪指令 68
3.5.7 Thumb伪指令 69
本章小结 69
第4章 ARM开发板介绍与应用举例 70
4.1 S3C2410 70
4.1.1 S3C2410简介 70
4.1.2 嵌入式系统的程序设计方法 72
4.2 处理器工作模式 73
4.2.1 概述 73
4.2.2 指令和操作模式 74
4.2.3 寄存器 74
4.2.4 程序寄存器状态 75
4.3 看门狗 79
4.4 MMU——存储器管理单元 81
本章小结 87
第5章 ARM程序设计基础 88
5.1 ARM汇编器所支持的伪指令 88
5.1.1 符号定义(Symbol Definition)伪指令 88
5.1.2 数据定义(Data Definition)伪指令 90
5.1.3 汇编控制(Assembly Control)伪指令及宏指令 92
5.1.4 其他常用的伪指令 93
5.2 汇编语言的语句格式 98
5.2.1 在汇编语言程序中常用的符号 98
5.2.2 汇编语言程序中的表达式和运算符 99
5.3 汇编语言的程序结构 101
5.3.1 ARM汇编中的文件格式 101
5.3.2 ARM汇编语言语句格式 101
5.3.3 ARM汇编语言编程的重点 102
5.4 汇编语言的程序结构 102
5.4.1 汇编语言的子程序调用 103
5.4.2 汇编语言程序示例 103
5.5 嵌入式C语言程序设计基础 105
5.5.1 C语言“预处理伪指令”在嵌入式程序设计中的应用 105
5.5.2 嵌入式程序设计中的函数及函数库 106
5.5.3 汇编语言与C/C++语言的混合编程 106
5.5.4 C语言和ARM汇编程序间相互调用 107
本章小结 108
第6章 搭建交叉编译环境 109
6.1 嵌入式Linux开发环境构建 109
6.2 Cygwin简介 110
6.3 虚拟机 110
6.4 开发环境 111
6.4.1 Linux下的C语言开发环境 111
6.4.2 交叉编译工具 112
6.4.3 ELDK交叉编译环境简介 120
6.5 移植Linux至ARM嵌入式处理器 120
6.5.1 简介 121
6.5.2 移植 122
6.5.3 移植Linux到ARM平台 123
6.5.4 开机程序与系统初始化 125
6.6 基于ADS的开发环境与实验介绍 127
6.6.1 ADS1.2集成开发环境简介 127
6.6.2 利用Helloworld来学习使用ARMSYS 127
6.6.3 编写好源程序代码 128
6.6.4 使用CodeWarrior建立工程并进行编译 128
6.6.5 使用AXD进行仿真调试 132
6.6.6 USB口下载工具 133
6.6.7 代码固化 135
本章小结 136
第7章 Boot Loader与U-Boot 137
7.1 Boot Loader概述 137
7.1.1 Boot Loader概念 137
7.1.2 Boot Loader位置 137
7.1.3 Boot Loader启动过程 138
7.1.4 总结 138
7.2 常用的Boot Loader 138
7.2.1 Blob 138
7.2.2 Armboot 139
7.2.3 U-Boot简介 139
7.2.4 U-Boot源代码目录结构 140
7.2.5 U-Boot的特点 140
7.2.6 U-Boot结构 143
7.2.7 U-Boot移植相关文件 143
7.3 U-Boot启动分析 144
7.4 U-Boot常用命令 153
7.4.1 移植概念 153
7.4.2 Linux与移植相关内核结构 153
7.4.3 Linux内核的配置 154
7.5 嵌入式Linux操作系统移植 155
7.5.1 根目录 155
7.5.2 arch目录 155
7.5.3 arch/arm/boot目录 156
7.5.4 setup.c目录 156
7.5.5 外设及设备驱动移植 157
7.6 Linux启动分析 157
7.7 编译Linux内核 161
7.7.1 建立依存关系 161
7.7.2 建立内核 162
7.7.3 建立模块 162
7.7.4 安装内核 162
7.8 U-Boot在44B0X开发板上的移植以及代码分析 164
本章小结 173
第8章 内核移植 174
8.1 移植的含义 174
8.2 移植的具体实现 174
8.3 完整系统的构成 177
8.4 实际操作 177
本章小结 180
第9章 文件系统及其制作 181
9.1 文件系统(Filesystem) 181
9.1.1 简介 181
9.1.2 嵌入式文件系统 182
9.2 根文件系统 184
9.2.1 根文件系统的组成 184
9.2.2 创建包含所有文件的目录 188
9.2.3 生成一个ramdisk 190
9.3 用busybox制作嵌入式Linux的文件系统 191
9.3.1 busybox简介 191
9.3.2 编译busybox 192
9.3.3 完善文件系统 193
9.3.4 测试新的文件系统 194
9.4 相关的命令和操作 194
9.4.1 在已建好的文件系统上进行修改 194
9.4.2 自己建立根文件系统 195
9.4.3 自己建立根文件系统 196
本章小结 197
第10章 Makefile与内核配置实例 198
10.1 概述 198
10.2 手动建立Makefile简单实例解析 205
10.3 自己写Makefile 208
10.4 Makefile总述 213
10.4.1 Makefile的主要内容 214
10.4.2 Makefile的文件名 214
10.4.3 引用其他的Makefile 214
10.4.4 环境变量Makefiles 215
10.4.5 make的工作方式 215
10.5 书写规则 216
10.6 书写命令 222
10.7 使用变量 226
10.8 使用条件判断 233
10.9 使用函数 235
10.10 make的运行 242
10.11 隐含规则 247
10.11.1 使用隐含规则 248
10.11.2 隐含规则一览 249
10.11.3 隐含规则使用的变量 250
10.11.4 隐含规则链 251
10.11.5 定义模式规则 252
10.11.6 老式风格的“后缀规则” 255
10.11.7 隐含规则搜索算法 256
10.12 使用make更新函数库文件 257
本章小结 258
第11章 嵌入式Linux驱动开发 259
11.1 编写Linux设备驱动程序简介 259
11.1.1 Linux device driver的概念 259
11.1.2 编写Linux操作系统下的设备驱动程序实例分析 260
11.1.3 设备驱动程序中的一些具体问题 263
11.2 字符设备驱动编写 264
11.3 LCD驱动编写实例 267
11.3.1 LCD工作原理 267
11.3.2 LCD驱动实例 268
11.4 键盘驱动实现 275
11.4.1 键盘工作原理 275
11.4.2 键盘驱动综述 276
11.4.3 键盘驱动流程 277
11.5 驱动的移植 284
本章小结 289
第12章 基于PXA255开发平台的开发流程 290
12.1 平台的选择 290
12.1.1 软件平台的选择——操作系统 290
12.1.2 交叉编译与链接 290
12.1.3 远程调试 291
12.2 PXA255开发平台介绍 291
12.2.1 Xscale系统结构 291
12.2.2 PXA255处理器结构与特性 293
12.2.3 Xsbase255开发系统 295
12.2.4 开发环境 296
12.2.5 BootLoader与内核 298
12.2.6 实际操作 309
本章小结 315
参考文献 316