第一篇 入门篇 1
第1章 嵌入式系统 1
1.1嵌入式系统简介 1
1.1.1嵌入式系统的特点 1
1.1.2嵌入式系统的应用领域 2
1.1.3嵌入式系统的发展趋势 3
1.2嵌入式系统的组成 5
1.2.1嵌入式平台的硬件结构 5
1.2.2板级支持包和嵌入式系统 6
1.2.3嵌入式系统上的应用程序 6
1.3嵌入式系统中的处理器 6
1.3.1微处理器 7
1.3.2微控制器 7
1.3.3数字信号处理器 7
1.3.4嵌入式片上系统 8
1.4嵌入式系统的一般设计流程和方法 8
1.4.1嵌入式系统的一般设计流程 8
1.4.2嵌入式系统的一般设计方法 9
1.5实践拓展 10
1.6习题 11
第2章 ARM微处理器结构 12
2.1ARM公司简介 12
2.2ARM微处理器系列 12
2.3ARM体系结构的版本及命名方法 15
2.3.1 ARM体系结构的版本 16
2.3.2 ARM体系结构的变种 18
2.3.3 ARM/Thumb体系结构的命名格式 19
2.4 ARM微处理器模式 20
2.5 ARM寄存器介绍 21
2.5.1通用寄存器 22
2.5.2程序状态寄存器 23
2.6 ARM体系的异常中断 24
2.6.1ARM中异常中断的种类 25
2.6.2ARM处理器对异常中断的响应过程 25
2.6.3从异常中断处理程序中返回 26
2.7 ARM体系中的存储系统 26
2.7.1ARM体系中的存储空间 26
2.7.2ARM体系结构的存储器格式 26
2.7.3非对齐的存储访问操作 27
2.7.4ARM指令预取和自修改代码 27
2.8实践拓展 28
2.9习题 29
第3章 ARM微处理器指令系统 30
3.1ARM指令系统简介 30
3.1.1ARM指令的分类 30
3.1.2ARM指令的一般编码格式 30
3.1.3ARM指令的条件码域 31
3.2 ARM指令寻址方式 32
3.2.1数据处理指令的操作数的寻址方式 32
3.2.2字及无符号字节的Load/Store指令的寻址方式 36
3.2.3杂类Load/Store指令的寻址方式 39
3.2.4批量Load/Store指令的寻址方式 41
3.2.5协处理器Load/Store指令的寻址方式 42
3.3 ARM指令集详解 43
3.3.1 跳转指令 44
3.3.2数据处理指令 45
3.3.3乘法指令与乘加指令 49
3.3.4程序状态寄存器访问指令 51
3.3.5加载/存储指令 52
3.3.6批量数据加载/存储指令 53
3.3.7数据交换指令 54
3.3.8移位指令 55
3.3.9协处理器指令 56
3.3.10异常产生指令 57
3.4 ARM程序设计示例 58
3.5 实践拓展 61
3.6 习题 63
第二篇 基础篇 64
第4章 构建嵌入式开发环境 64
4.1交叉开发环境简介 64
4.1.1交叉开发环境模型 65
4.1.2Linux的常用版本 65
4.2宿主机与目标板的连接方式 66
4.2.1串行通信接口 66
4.2.2以太网接口 67
4.2.3USB接口 68
4.2.4JTAG接口 68
4.3建立主机开发环境 69
4.3.1Fedora的安装 69
4.3.2Minicom的安装配置 82
4.3.3TFTP服务的安装配置 85
4.3.4NFS的安装配置 86
4.3.5建立交叉工具链 87
4.4实践拓展 89
4.5习题 90
第5章 S3C2410X硬件结构及功能 91
5.1 S3C2410X简介 91
5.1.1S3C2410X处理器 91
5.1.2S3C2410X引脚描述 92
5.1.3S3C2410X内核结构 95
5.2 S3C2410X的存储器映射 96
5.2.1存储器的控制寄存器 96
5.2.2 Nand Flash及其控制器 99
5.3 DMA控制器 103
5.3.1DMA工作原理 103
5.3.2DMA控制器的相关寄存器 105
5.4时钟和电源管理 109
5.4.1时钟 110
5.4.2电源管理 112
5.4.3专用寄存器 114
5.4.4S3C2410X时钟及电源管理应用 117
5.5中断 118
5.5.1中断控制器专用寄存器 119
5.5.2中断实例 122
5.6输入/输出端口 124
5.6.1端口寄存器及其引脚配置 124
5.6.2外中断实例 133
5.7定时器 135
5.7.1结构与工作原理 135
5.7.2定时器专用寄存器 138
5.7.3定时器的使用 139
5.7.4定时器应用实例 140
5.8实践拓展 141
5.9习题 144
第6章S3C2410X的外部接口 145
6.1 UART接口 145
6.1.1串行口结构和工作原理 145
6.1.2 UART专用寄存器 149
6.1.3 UART应用实例 152
6.2 IIC总线接口 153
6.2.1 IIC总线接口的工作模式 154
6.2.2 IIC总线接口的特殊功能寄存器 158
6.2.3 IIC应用实例 160
6.3 SPI接口 162
6.3.1 SPI结构与工作原理 163
6.3.2 SPI专用寄存器 164
6.3.3 SPI应用方法 166
6.3.4 SPI应用实例 167
6.4 A/D转换与触摸屏接口 169
6.4.1 A/D转换器结构与工作原理 170
6.4.2 A/D转换和触摸屏专用寄存器 172
6.5实践拓展 174
6.6习题 176
第7章 嵌入式操作系统 177
7.1常见的嵌入式操作系统 177
7.2嵌入式Linux的基本结构和工作原理 179
7.2.1嵌入式Linux的基本结构 179
7.2.2嵌入式Linux的工作原理 182
7.3实践拓展 183
7.4习题 185
第三篇 提高篇 186
第8章 S3C2410X平台Bootloader 186
8.1 Bootloader的操作模式 186
8.2 Bootloader的启动流程 187
8.3 Bootloader之vivi 188
8.3.1 vivi的配置与编译 189
8.3.2 vivi第一阶段的代码 190
8.3.3 vivi第二阶段的代码 201
8.4 Bootloader之U-Boot 217
8.4.1 U-Boot的主要目录结构 218
8.4.2 U-Boot支持的主要功能 218
8.4.3 U-Boot的原理分析 219
8.4.4 U-Boot在S3 C2410上的移植 231
8.5自行开发Bootloader 239
8.6实践拓展 239
8.7习题 241
第9章 移植嵌入式操作系统 242
9.1 Linux内核 242
9.1.1Linux内核的组成结构 243
9.1.2Linux源码结构 244
9.2移植Linux内核 245
9.2.1给内核打补丁 245
9.2.2配置内核 247
9.2.3编译内核 257
9.3移植根文件系统 257
9.3.1安装Busybox 258
9.3.2配置Busybox 259
9.3.3向Busybox添加新命令 260
9.3.4编译和安装Busybox 262
9.3.5构造根文件系统 262
9.3.6创建根文件系统映像文件 264
9.4下载内核 264
9.4.1使用U-Boot制作、下载内核 264
9.4.2启动Linux内核 266
9.5使用U-Boot加载根文件系统映像 266
9.6实践拓展 267
9.7习题 268
第10章 嵌入式系统的设备管理及驱动 269
10.1 Linux设备管理和驱动 269
10.1.1Linux设备的分类 269
10.1.2设备驱动程序的作用 269
10.1.3访问设备的实现 270
10.1.4Linux设备控制方式 270
10.2 Linux设备驱动开发流程 272
10.2.1构造和运行模块 272
10.2.2字符设备驱动编写 273
10.2.3字符设备驱动实例 276
10.2.4并发控制 278
10.2.5阻塞与非阻塞 284
10.2.6select和poll 288
10.2.7中断处理 290
10.2.8内存与1/0操作 292
10.3块设备驱动编写 296
10.3.1块设备的I/o操作特点 296
10.3.2block_device_operations结构体 296
10.3.3gendisk结构体 297
10.3.4request结构体 299
10.3.5request操作函数 302
10.3.6bio结构体 304
10.3.7注册与注销 305
10.3.8加载与卸载 306
10.3.9打开与释放 308
10.3.10 ioctl函数 308
10.3.11 I/0请求处理 309
10.4设备驱动实例——RAMDISK驱动 312
10.5实践拓展 317
10.6习题 319
第11章 嵌入式LinuxC语言开发工具 320
11.1编辑器VIM 320
11.1.1VIM的编辑模式 320
11.1.2VIM的进入与退出 322
11.1.3光标的移动 322
11.1.4删除、撤销和重复 323
11.1.5复制和粘贴 324
11.1.6查找和替换 324
11.1.7帮助系统和网络资源 324
11.2编译器GCC 326
11.2.1GCC的编译流程 326
11.2.2GCC的常用编译选项 328
11.2.3应用实例 331
11.3调试器GDB 333
11.3.1GDB的使用流程 335
11.3.2GdbServer远程调试 338
11.4工程管理Make 339
11.4.1Makefile文件介绍 340
11.4.2Makefile的规则 341
11.4.3Makefile的变量 343
11.4.4Make命令的使用 345
11.4.5使用自动工具生成Makefile 346
11.5集成开发环境Eclipse 347
11.5.1下载和安装Eclipse 348
11.5.2Eclipse的界面 348
11.6实践拓展 350
11.7习题 351
第12章 嵌入式C语言开发流程 352
12.1命令行模式下的开发流程 352
12.1.1编写代码 352
12.1.2编译程序 354
12.1.3运行程序 355
12.1.4交叉编译 355
12.1.5编写Makefile 356
12.2基于Eclipse的开发流程 358
12.2.1新建工程 358
12.2.2编写代码 359
12.2.3编译工程 359
12.2.4运行程序 361
12.3实践拓展 362
12.4习题 363
第四篇 精通篇 364
第13章 ADS集成开发环境 364
13.1命令行开发工具 364
13.1.1 armcc编译器 365
13.1.2 armlink的使用方法 366
13.1.3 ARM运行时库 367
13.1.4 CodeWarrior集成开发环境 368
13.1.5 ADS调试器 369
13.1.6实用工具和软件 370
13.2使用ADS创建工程 371
13.2.1建立一个工程 371
13.2.2编译和链接工程 374
13.2.3命令行模式下编译工程 379
13.3使用AXD调试代码 381
13.3.1打开调试文件 381
13.3.2查看存储器内容 382
13.3.3设置断点 383
13.3.4查看变量值 383
13.4实践拓展 385
13.5习题 386
第14章 图形用户界面编辑环境Qt 387
14.1嵌入式系统中的GUI 387
14.1.1 MicroWindows 387
14.1.2 MiniGUI 388
14.1.3 Qt/Embedded 388
14.2 MiniGUI编程 388
14.2.1 MiniGUI移植 390
14.2.2 MiniGUI实例 392
14.3初识Qt/Embedded 394
14.3.1 Qt/Embedded的系统要求 395
14.3.2 Qt的架构 395
14.3.3窗口系统 396
14.4 Qt/Embedded嵌入式图形开发 397
14.4.1建立Qt/Embedded开发环境 397
14.4.2认识Qt/Embedded开发环境 399
14.4.3窗体 401
14.4.4对话框 407
14.4.5外形与感觉 411
14.4.6国际化 412
14.5 Qt/Embedded实战演练 413
14.5.1安装Qt/Embedded工具开发包 414
14.5.2交叉编译Qt/Embedded库 414
14.5.3“Hello,World”程序 415
14.5.4发布Qt/Embedded程序到目标板 421
14.5.5添加一个Qt/Embedded应用到QPE 423
14.6实践拓展 424
14.7习题 425
第15章S3C2410X完整开发系统的设计 426
15.1最小系统 426
15.2实验板硬件资源规划 426
15.3实验板硬件电路设计 427
15.3.1电源电路 427
15.3.2复位电路 428
15.3.3调试及下载接口电路 429
15.3.4时钟电路 429
15.3.5微处理器电路 430
15.3.6外部存储器电路 433
15.3.7串行接口电路 437
15.3.8网络接口电路 437
15.3.9USB接口电路 439
15.3.10液晶接口电路 440
15.3.11其他电路 441
15.4PCB的设计方法 442
15.5电路的调试方法 444
15.6软件的移植与开发 445
15.6.1准备交叉编译工具 445
15.6.2vivi的移植 447
15.6.3内核的移植 452
15.6.4根文件系统的移植 455
15.6.5驱动程序的编写 457
15.7实践拓展 460
15.8习题 461
参考文献 462