第1章 嵌入式系统概述 1
1.1 嵌入式系统的发展史 2
1.1.1 嵌入式系统发展的4个阶段 2
1.1.2 嵌入式系统的发展趋势 2
1.2 嵌入式系统的定义、组成与特点 3
1.2.1 嵌入式系统的定义 3
1.2.2 嵌入式系统的组成 3
1.2.3 嵌入式系统的特征 3
第2章 嵌入式系统的设计方法 5
2.1 传统的软硬件分开设计方法 5
2.2 软硬件协同设计方法 6
2.3 嵌入式系统的测试技术 7
2.3.1 嵌入式软件的测试方法 7
2.3.2 嵌入式系统的测试策略 8
2.3.3 嵌入式软件的测试工具 9
2.4 小结 10
第3章 嵌入式系统硬件基础 11
3.1 嵌入式处理器 11
3.1.1 嵌入式处理器的基本特征 11
3.1.2 嵌入式处理器的分类 11
3.1.3 典型嵌入式处理器 12
3.1.4 嵌入式处理器的发展趋势 14
3.1.5 嵌入式处理器的选型方法 15
3.2 ARM处理器 16
3.2.1 ARM处理器系列 16
3.2.2 Cortex A8处理器 27
3.2.3 ARM公司的NEON技术 28
3.2.4 ARM+协处理器架构 30
3.2.5 ARM处理器的结构 32
3.2.6 ARM的指令集 43
3.2.7 ARM汇编程序设计基础 51
3.3 存储器 73
3.3.1 SDRAM 73
3.3.2 DDR 74
3.3.3 DDR2 74
3.3.4 DDR3 75
3.3.5 Nor Flash 78
3.3.6 Nand Flash 80
3.3.7 Nor Flash与Nand Flash的区别 81
第4章 嵌入式操作系统 82
4.1 嵌入式操作系统的特征 82
4.2 嵌入式实时操作系统 83
4.2.1 嵌入式实时操作系统的概念 83
4.2.2 嵌入式实时操作系统的发展过程 84
4.2.3 实时操作系统的几个评价指标 85
4.3 嵌入式软实时操作系统 86
4.4 嵌入式操作系统的种类 87
4.4.1 嵌入式Linux 87
4.4.2 VxWorks操作系统 88
4.4.3 Windows CE操作系统 89
4.4.4 μC/OS操作系统 91
4.4.5 PalmOs操作系统 93
第5章 嵌入式Linux系统开发环境 94
5.1 bash常用Shell命令 94
5.1.1 常用Shell命令 95
5.1.2 git版本控制 106
5.2 Shell脚本编程 119
5.2.1 执行Shell脚本的方式 120
5.2.2 Shell特殊字符 122
5.2.3 Shell变量 127
5.2.4 使用整数 129
5.2.5 分支语句 129
5.2.6 test测试语句 133
5.2.7 循环控制语句 136
5.3 GNU编译器GCC 141
5.3.1 预处理阶段 142
5.3.2 编译阶段 145
5.3.3 汇编阶段 145
5.3.4 链接阶段 145
5.3.5 GCC的编译选项 146
5.4 GNU调试器:GDB 147
5.5 GNU Makefile 158
5.5.1 GNU Make 158
5.5.2 Makefile语法规则 159
5.5.3 Makefile文件中变量的应用 159
5.6 交叉编译工具链及交叉调试器 162
5.6.1 交叉编译的基础知识 162
5.6.2 交叉编译器的生成步骤 163
5.6.3 远端调试 163
5.7 主机开发环境的搭建 167
第6章 嵌入式Linux系统的Bootloader 179
6.1 Bootloader的基本概念 179
6.2 Bootloader的种类 179
6.3 u-Boot的2种操作模式 180
6.4 u-Boot的启动过程 181
6.4.1 Bootloader的存储位置 181
6.4.2 u-Boot向Linux内核传递参数 182
6.5 u-Boot的命令解析器 182
6.5.1 旧的、简单的命令行分析器 182
6.5.2 hush Shell 182
6.5.3 命令解析器的具体实现 184
6.6 怎样给u-Boot添加命令 184
6.7 u-Boot的环境变量与常用命令 186
6.7.1 u-Boot的环境变量 186
6.7.2 u-Boot的常用命令 187
6.8 u-Boot引导Linux内核参数设置 191
第7章 Linux内核 193
7.1 Linux内核简介 193
7.1.1 Linux内核的功能 193
7.1.2 Linux内核的特点 195
7.2 Linux内核配置过程 196
7.2.1 Linux内核配置的菜单生成工具 201
7.2.2 Kconfig语法 202
7.3 Linux内核编译 207
7.4 Linux内核模块 212
7.4.1 外部内核模块的构建 213
7.4.2 Linux内核模块的调试 217
第8章 常用Linux文件系统 230
8.1 Linux文件系统概述 230
8.1.1 根文件系统 233
8.1.2 日志文件系统 236
8.1.3 Ramdisk 237
8.2 ext2文件系统 237
8.3 ext3文件系统 238
8.4 Reiserfs文件系统 239
8.5 JFFS2文件系统 240
8.6 YAFFS文件系统 241
8.7 CRAMFS文件系统 243
8.8 UBIFS文件系统 244
第9章 Linux设备驱动 245
9.1 设备驱动基本概念 245
9.1.1 Linux设备驱动的分类 245
9.1.2 Linux驱动中I/O端口和I/O内存的访问 247
9.2 字符设备驱动 252
9.2.1 struct cdev 252
9.2.2 字符设备的注册 254
9.3 Linux网络设备驱动 265
9.3.1 网络设备接口层 266
9.3.2 一个以太网设备驱动示例 284
9.3.3 小结 298
9.4 sysfs文件系统 298
9.4.1 udev 299
9.4.2 sysfs挂载点 299
9.4.3 sysfs文件系统的挂载 299
9.4.4 sysfs文件系统下的目录结构 300
9.4.5 sysfs的实现机制:kobject 302
9.4.6 sysfs的文件和目录的创建 309
9.5 Linux设备驱动基本模型 314
9.5.1 总线(bus_type) 314
9.5.2 device 321
9.5.3 device_driver 336
9.6 platform_bus_type 344
9.6.1 platform_bus_type 344
9.6.2 platform_device 345
9.6.3 platform driver 358
9.7 I2C总线及设备驱动 360
9.7.1 I2C总线工作原理 361
9.7.2 Linux中I2C驱动架构 362
9.7.3 Linux I2C驱动中的i2c_bus_type 362
9.7.4 Linux I2C驱动中的i2c_adapter 364
9.7.5 i2c_adapter的注册 367
9.7.6 i2c_client 374
9.7.7 I2C从设备的驱动注册 385
9.8 SPI总线及设备驱动 388
9.8.1 SPI接口协议 388
9.8.2 Linux驱动模型中的spi_bus_type 392
9.8.3 spi_master 393
9.8.4 spi_master的注册 397
9.8.5 spi_device 400
9.8.6 spi_device的实例化 403
9.8.7 spi_device的驱动spi_driver 407
9.9 Linux设备驱动的基本思想 408
9.9.1 隔离思想 408
9.9.2 面向对象的思想 410
9.10 实时时钟RTC驱动 410
9.10.1 RTC类的初始化 412
9.10.2 RTC类设备的注册 413
附录 EL-ARM-860型嵌入式实验开发系统 418