第一篇 工欲善其事,必先利其器 3
第1章 嵌入式系统概述 3
1.1 嵌入式系统基础知识 3
1.1.1 嵌入式系统简介 3
1.1.2 嵌入式系统的特点 3
1.1.3 嵌入式系统的发展历史 4
1.1.4 嵌入式系统的组成 5
1.1.5 嵌入式操作系统简介 6
1.1.6 嵌入式系统开发概述 6
1.2 基于ARM架构的S5PV210处理器 7
1.2.1 ARM微处理器概述 7
1.2.2 ARM流水线技术的发展 8
1.2.3 ARM Cortex-A8处理器介绍 9
1.2.4 ARM Cortex-A8寄存器组介绍 11
1.2.5 SAMSUNG S5PV210处理器介绍 13
1.3 本章小结 15
第2章 嵌入式Linux开发环境搭建 16
2.1 交叉开发模式 16
2.1.1 嵌入式交叉开发模式介绍 16
2.1.2 硬件需求 17
2.2 软件环境搭建与配置 18
2.2.1 宿主机Linux操作系统的安装 18
2.2.2 配置宿主Linux操作系统 25
2.2.3 在宿主机上安装、配置开发环境 28
2.2.4 制作交叉编译工具链 29
2.3 本章小结 33
第3章 常用开发工具和命令的使用 34
3.1 Windows环境下的工具介绍 34
3.1.1 代码阅读、编辑工具Source Insight 34
3.1.2 文件传输工具CuteFTP 39
3.1.3 终端仿真工具SecureCRT 40
3.2 Linux环境下的工具介绍 43
3.2.1 代码阅读、编辑工具 43
3.2.2 终端访问工具 43
3.3 嵌入式Linux系统常用命令介绍 43
3.3.1 编辑命令vi(vim) 43
3.3.2 常用13个命令介绍 45
3.3.3 SD卡烧写命令df、dd 49
3.4 本章小结 50
第4章 嵌入式编程基础知识 51
4.1 GNU ARM常用汇编指令介绍 51
4.1.1 相对跳转指令b和bl 51
4.1.2 数据传送指令mov和地址读取伪指令ldr 52
4.1.3 内存访问指令ldr、str、ldm、stm 52
4.1.4 加减指令add、sub 54
4.1.5 程序状态寄存器访问指令msr、 mrs 54
4.1.6 其他伪指令 54
4.2 ARM-Thumb子程序调用(ATPCS)规则介绍 55
4.2.1 寄存器使用规则 55
4.2.2 数据栈使用规则 56
4.2.3 参数传递规则 56
4.3 ARM交叉工具链介绍 56
4.3.1 编译工具arm-linux-gcc 57
4.3.2 链接工具arm-linux-ld 62
4.3.3 对象生成工具arm-linux-objcopy 63
4.3.4 反汇编工具arm-l inux-obj dump 64
4.4 Makefile简介 65
4.4.1 基本规则 66
4.4.2 make是如何工作的 66
4.4.3 变量的用法 66
4.4.4 常用函数介绍 68
4.5 本章小结 70
第二篇 千里之行,始于足下 73
第5章 基于Cortex-A8的S5PV210启动流程介绍 73
5.1 S5PV210启动流程概述 73
5.1.1 外部启动介质介绍 73
5.1.2 iROM启动的优势 73
5.2 S5PV210上电初始化及内存空间分布 74
5.2.1 启动流程 74
5.2.2 空间分布 75
5.2.3 SD卡引导块分配情况介绍 77
5.2.4 iROM中的时钟配置 77
5.3 S5PV210上的程序烧写介绍 78
5.3.1 程序烧写概述 78
5.3.2 制作BL1头信息 78
5.3.3 烧写SD卡 78
5.3.4 制作Shell脚本 79
5.4 本章小结 82
第6章 通用输入/输出接口GPIO 83
6.1 GPIO控制技术概述 83
6.1.1 GPIO的介绍 83
6.1.2 S5PV210的GPIO寄存器 83
6.1.3 实验用到的寄存器详解 85
6.2 S5PV210的GPIO应用实例 86
6.2.1 实验介绍 86
6.2.2 程序设计与代码详解 87
6.3 本章小结 91
第7章 通用异步收发器UART 92
7.1 UART的原理及S5PV210的UART介绍 92
7.1.1 UART通信的基本原理 92
7.1.2 S5PV210的UART介绍 93
7.2 S5PV210的UART应用实例 97
7.2.1 实验介绍 97
7.2.2 程序设计与代码详解 97
7.2.3 实例测试 100
7.3 本章小结 101
第8章 中断体系结构 102
8.1 S5PV210中断体系结构 102
8.1.1 中断体系结构概述 102
8.1.2 中断控制寄存器介绍 105
8.2 S5PV210的中断应用实例 107
8.2.1 实验介绍 107
8.2.2 程序设计与代码详解 107
8.2.3 实例测试 111
8.3 本章小结 111
第9章 系统时钟和定时器 112
9.1 S5PV210的时钟体系结构 112
9.1.1 S5PV210的时钟域和时钟源 112
9.1.2 S5PV210的时钟应用和配置流程 113
9.1.3 S5PV210时钟控制寄存器介绍 115
9.2 S5PV210 PWM定时器 117
9.2.1 S5PV210 PWM定时器概述 117
9.2.2 S5PV210定时器 119
9.2.3 PWM定时器的寄存器介绍 120
9.3 S5PV210时钟和定时器应用实例 122
9.3.1 实验介绍 122
9.3.2 程序设计与代码详解 123
9.3.3 实验测试 132
9.4 本章小结 133
第10章 S5PV210存储控制器 134
10.1 S5PV210存储控制器介绍 134
10.1.1 存储控制器概述 134
10.1.2 DRAM存储控制器 134
10.1.3 与外设的接线方式 135
10.1.4 DDR2 SDRAM概述 136
10.1.5 S5PV210 DDR2初始化顺序 140
10.1.6 存储控制器的寄存器介绍 141
10.2 存储控制器应用实例 147
10.2.1 实验介绍 147
10.2.2 程序设计与代码详解 147
10.2.3 实验测试 151
10.3 本章小结 151
第11章 S5PV210 Nand Flash控制器 152
11.1 Nor Flash与Nand Flash介绍 152
11.1.1 Flash闪存 152
11.1.2 Nor Flash与Nand Flash比较 152
11.1.3 Nand Flash的物理结构 154
11.1.4 Nand Flash的访问方法 155
11.2 S5PV210 Nand Flash控制器介绍 158
11.2.1 Nand Flash控制器的特性 158
11.2.2 Nand Flash的模块图 159
11.2.3 Nand Flash的引脚配置 159
11.2.4 Nand Flash存储控制器配置 160
11.2.5 Nand Flash寄存器介绍 160
11.2.6 Nand Flash控制器的ECC校验方法 165
11.3 Nand Flash控制器应用实例 166
11.3.1 实验介绍 166
11.3.2 程序设计与代码详解 166
11.3.3 实例测试 170
11.4 本章小结 170
第12章 LCD控制器 171
12.1 LCD介绍 171
12.1.1 LCD的分类 171
12.1.2 LCD的接口 172
12.2 S5PV210LCD控制器 173
12.2.1 S5PV210 LCD控制器概述 173
12.2.2 S5PV210 LCD控制器主要特性介绍 174
12.2.3 S5PV210 LCD控制器功能介绍 175
12.2.4 S5PV210 TFT LCD的操作 177
12.2.5 S5PV210 LCD控制器编程方法介绍 181
12.2.6 S5PV210 LCD控制器主要寄存器介绍 181
12.3 LCD控制器应用实例 189
12.3.1 实验介绍 189
12.3.2 程序设计与代码详解 189
12.3.3 实例测试 194
12.4 本章小结 195
第三篇 欲穷千里目,更上一层楼 199
第13章 移植U-Boot 199
13.1 Bootloader介绍 199
13.1.1 Bootloader概述 199
13.1.2 Bootloader的结构和启动方式 201
13.1.3 Bootloader操作模式和安装位置 203
13.1.4 如何编写Bootloader 204
13.1.5 U-Boot与内核之间的交互 205
13.2 移植U-Boot到S5PV210开发板 208
13.2.1 U-Boot简介 208
13.2.2 U-Boot源码结构 209
13.2.3 U-Boot配置、编译与SPL介绍 212
13.2.4 U-Boot启动过程源码分析 232
13.2.5 U-Boot下的驱动移植 252
13.2.6 添加启动菜单 279
13.3 本章小结 281
第14章 Linux内核移植和根文件系统制作 282
14.1 Linux内核概述 282
14.1.1 Linux内核发展及其版本特点 282
14.1.2 Linux内核源码获取 283
14.1.3 内核源码结构及Makefile分析 285
14.1.4 Linux内核的Kconfig介绍 291
14.1.5 Linux内核配置选项 296
14.2 Linux内核移植 299
14.2.1 Linux内核启动过程分析 299
14.2.2 修改内核支持S5PV210平台 301
14.3 本章小结 304
第15章 构建Linux根文件系统 305
15.1 Linux文件系统概述 305
15.1.1 文件系统概述 305
15.1.2 Linux根文件系统目录结构 306
15.1.3 文件系统工作原理 310
15.2 移植Busybox 310
15.2.1 Busybox介绍 310
15.2.2 Busybox的目录结构 311
15.2.3 内核init进程及用户程序启动过程 311
15.2.4 配置/编译/安装Busybox 316
15.2.5 构建根文件系统 320
15.3 本章小结 325
第16章 驱动相关移植 326
16.1 Linux驱动程序概述 326
16.1.1 驱动程序、内核和应用程序之间的关系 326
16.1.2 驱动程序分类 327
16.1.3 驱动程序开发步骤 327
16.1.4 驱动程序的加载和卸载 328
16.2 网卡驱动移植 328
16.2.1 DM9000网卡特性 328
16.2.2 DM9000驱动移植 329
16.3 Nand驱动移植 332
16.3.1 S5PV210平台Nand驱动移植 332
16.3.2 8位硬件ECC和Nand启动 338
16.4 LCD驱动移植 342
16.4.1 LCD驱动概述 342
16.4.2 LCD驱动移植 342
16.5 其他驱动移植 344
16.5.1 支持SD卡驱动 344
16.5.2 LED子系统驱动移植 345
16.5.3 支持RTC驱动 346
16.5.4 支持1-wire单总线驱动 347
16.6 本章小结 348
参考文献 349