第1章 嵌入式系统开发技术基础 1
1.1 嵌入式系统概述 1
1.1.1 嵌入式系统的定义、分类与特点 2
1.1.2 嵌入式系统的组成 4
1.1.3 嵌入式系统的应用领域及发展趋势 5
1.2 嵌入式处理器 8
1.2.1 嵌入式处理器的分类与特点 8
1.2.2 ARM微处理器简介 10
1.2.3 ARM微处理器基础 12
1.2.4 ARM微处理器的指令系统 25
1.2.5 ARM内存管理单元 48
1.3 嵌入式操作系统 49
1.3.1 嵌入式操作系统的种类、特点与发展 50
1.3.2 嵌入式Linux概述 54
1.4 嵌入式系统的结构、开发流程、开发要点 56
1.4.1 嵌入式系统的结构 56
1.4.2 开发模式及开发流程 57
1.4.3 嵌入式Linux系统开发要点 59
本章小结 60
习题1 60
第2章 嵌入式系统开发环境 62
2.1 嵌入式系统开发环境简介 62
2.2 OK2440-Ⅱ开发平台介绍 63
2.2.1 OK2440-Ⅱ开发板构成 63
2.2.2 OK2440-Ⅱ开发板硬件资源 64
2.2.3 实例——OK2440-Ⅱ开发板的基本使用 66
2.2.4 实例——引导Windows CE 80
2.2.5 实例——引导Linux 83
2.3 交叉编译的基本知识 88
2.3.1 ARM编译环境 89
2.3.2 ARM交叉编译工具链 89
2.3.3 嵌入式软件开发流程 90
2.4 实例——创建交叉编译环境 92
2.5 实例——QEMU、GDB的安装及简单使用 97
2.5.1 QEMU的安装 98
2.5.2 GDB的安装 98
2.5.3 运行ARM汇编程序 99
2.5.4 调试ARM汇编程序 99
2.6 SkyEye的安装及简单使用 102
2.6.1 SkyEye简介 103
2.6.2 实例——安装SkyEye-1.2.6 105
2.6.3 实例——使用SkyEye-1.2.6 110
2.7 实例——TFTP服务器的搭建 115
2.8 实例——NFS服务器的搭建 117
本章小结 119
习题2 120
第3章 嵌入式软件开发基础 121
3.1 Linux C语言程序设计基础知识 121
3.1.1 程序安装目录、头文件、库文件 121
3.1.2 gcc编译器 123
3.1.3 实例——使用gcc编译器 129
3.1.4 GNU make工具和Makefile文件 133
3.1.5 实例——使用make及Makefile文件 136
3.1.6 glibc 156
3.1.7 gdb 156
3.1.8 实例——使用gdb调试器 158
3.1.9 Binutils工具包 165
3.2 汇编分类 169
3.2.1 AT&T与Intel汇编语言的比较 170
3.2.2 ARM ASM与GNU ARM ASM 173
3.3 GNU ARM汇编语法 174
3.3.1 简单的GNU ARM汇编源程序举例 175
3.3.2 GNU ARM汇编程序中的语句格式 177
3.3.3 GNU ARM汇编源程序中的标号 178
3.3.4 GNU ARM汇编程序中的分段 179
3.3.5 GNU ARM汇编程序中定义入口点 180
3.3.6 GNU ARM汇编程序中的宏定义 180
3.3.7 GNU ARM汇编程序中的常数 181
3.3.8 GNU ARM汇编程序中的常用伪操作 181
3.3.9 GNU ARM汇编程序中的特殊字符和语法 183
3.3.10 ATPCS 184
3.4 ARM汇编&C语言混合编程 186
3.4.1 C内联ARM汇编 186
3.4.2 模块化程序设计 194
3.4.3 ARM汇编&C语言混合编程 195
3.5 x86汇编&C语言混合编程 199
3.6 ELF文件的格式 201
3.6.1 目标文件的格式 203
3.6.2 可执行文件的格式 208
3.7 GNU-ld链接脚本 213
本章小结 216
习题3 217
第4章 引导加载程序BootLoader的移植 219
4.1 BootLoader 219
4.1.1 BootLoader概述 220
4.1.2 BootLoader的工作流程 221
4.2 常见BootLoader介绍 225
4.3 U-Boot-1.1.4源代码分析 227
4.3.1 U-Boot的代码结构 228
4.3.2 U-Boot的启动流程 229
4.3.3 cpu/arm920t/start.S 229
4.3.4 lowlevel_init.S 238
4.3.5 lib_arm/board.c 241
4.3.6 init_sequence[] 247
4.3.7 common/main.c 256
4.4 移植U-Boot-1.1.4到S3C2440A平台 260
4.4.1 U-Boot的配置与编译 260
4.4.2 实例——移植U-Boot到S3C2440A平台 273
4.4.3 实例——烧写U-Boot到FLASH 274
4.5 实例——使用U-Boot 275
4.5.1 U-Boot的常用命令 277
4.5.2 U-Boot的环境变量 283
4.5.3 U-Boot与内核的关系 284
4.5.4 添加U-Boot命令 290
4.6 实例——基于SkyEye的移植三部曲之一:BootLoader 293
本章小结 310
习题4 311
第5章 Linux在ARM平台的移植 312
5.1 Linux内核 312
5.1.1 Linux内核简介 312
5.1.2 Linux内核源代码结构 315
5.1.3 Linux内核源代码的配置 316
5.1.4 Makefile、Kconfig与.config的关系 317
5.2 Linux内核的移植 318
5.3 zImage内核映像的生成过程 322
5.4 实例——基于SkyEye的移植三部曲之二:Kernel 326
5.5 Linux内核启动流程分析 342
本章小结 342
习题5 343
第6章 根文件系统 344
6.1 嵌入式Linux的文件系统 344
6.1.1 基于FLASH的文件系统 345
6.1.2 基于RAM的文件系统 350
6.1.3 网络文件系统NFS 351
6.1.4 Linux根文件系统 353
6.1.5 Linux根文件系统的目录结构 354
6.2 Linux系统的引导过程 355
6.3 建立根文件系统 363
6.3.1 实例——用BusyBox建立文件系统 363
6.3.2 实例——建立JFFS2根文件系统 370
6.3.3 实例——建立Ramdisk文件系统 374
6.3.4 实例——建立Cramfs文件系统 381
6.3.5 实例——建立romfs文件系统 382
6.3.6 实例——建立YAFFS2根文件系统 384
6.4 实例——基于SkyEye的移植三部曲之三:RootFS 387
本章小结 393
习题6 393
第7章 嵌入式Linux设备驱动程序开发 395
7.1 Linux设备驱动程序的相关知识 395
7.1.1 设备驱动程序的概念 396
7.1.2 设备类型 396
7.1.3 Linux设备驱动程序概述 397
7.1.4 设备驱动程序中关键的数据结构 398
7.2 Linux设备驱动程序设计 401
7.2.1 实例——动态加载模块 401
7.2.2 实例——简单字符驱动程序 405
本章小结 411
习题7 411
第8章 嵌入式Linux的图形用户接口 412
8.1 嵌入式Linux中的GUI简介 412
8.2 Qt/Embedded 412
8.3 MicroWindows 414
8.4 MiniGUI 416
8.5 OpenGUI 418
本章小结 419
习题8 419
附录 资源及学习网站 420
参考文献 421