第一部分 裸机编 程 3
第1章 嵌入式系统编程简介 3
1.1什么是嵌入式系统 3
1.2裸机编程 3
1.3学习嵌入式系统编程 5
1.4嵌入式系统的软件层 6
1.5工具和硬件平台 9
1.6虚拟硬件和真实硬件之间的区别 9
1.7小结 10
第2章 Android模拟器内里 11
2.1虚拟硬件概述 11
2.2配置Android虚拟设备 12
2.3硬件接口 14
2.4串口 15
2.5定时器 16
2.6小结 20
第3章 设置开发环境 21
3.1主机和客户端环境 21
3.2开发环境的设置 22
3.3下载并安装Android SDK 22
3.4为ARM下载并安装GNU工具链 23
3.5集成开发环境 24
3.6用户的第一个ARM程序 24
3.7构建二进制文件 26
3.8在Android模拟器中运行 27
3.9示例项目的makefile 30
3.10小结 31
第4章 链接器脚本和内存映射 32
4.1内存映射 32
4.2链接器 33
4.2.1符号解析 34
4.2.2重定位 37
4.2.3段合并 40
4.2.4段布局 41
4.3链接器脚本 42
4.4 RAM中数据的初始化 45
4.4.1指定加载地址 47
4.4.2将.data复制到RAM中 47
4.5小结 49
第5章 使用C语言 50
5.1裸机环境中的C启动 50
5.1.1堆栈 52
5.1.2全局变量 53
5.1.3只读数据 54
5.1.4启动代码 54
5.2调用约定 61
5.2.1从汇编语言代码中调用C函数 62
5.2.2从C代码中调用汇编语言函数 64
5.3 Goldfish串口支持 64
5.3.1检查数据缓冲区 68
5.3.2数据输入和输出 69
5.3.3串口函数的单元测试 70
5.4小结 72
第6章 使用C库 73
6.1 C库的变体 73
6.1.1操作系统中的C库变体 73
6.1.2裸机环境中的C库变体 74
6.2 Newlib C库 75
6.3通用启动代码序列 76
6.4 CS3链接器脚本 76
6.5 Goldfish平台的自定义CS启动代码 81
6.6系统调用实现 81
6.7运行并调试库 87
6.8在QEMU ARM半主机中使用Newlib 91
6.8.1 Newlib C中的半主机支持 91
6.8.2半主机的示例代码 91
6.9小结 95
第7章 异常处理和定时器 96
7.1 Goldfish中断控制器 96
7.2最简单的中断处理程序 98
7.2.1中断支持函数 99
7.2.2最简单中断处理程序的实现 101
7.3嵌套中断处理程序 108
7.3.1嵌套中断处理程序的实现 109
7.3.2测试嵌套中断并探讨处理器模式转换 118
7.4测试系统调用/软件中断 126
7.5定时器 127
7.5.1 Goldfish特有的定时器函数 131
7.5.2 U-Boot API 131
7.6实时时钟 132
7.7小结 139
第8章 Goldfish平台中的NAND闪存支持 140
8.1 Android文件系统 140
8.2 NAND闪存的属性 142
8.3 Goldfish平台中的NAND闪存编程接口 143
8.4内存技术设备支持 144
8.5 MTD API 145
8.5.1支持NAND闪存的U-Boot API 156
8.5.2 Goldfish NAND闪存驱动程序函数 156
8.6 NAND闪存编程接口测试程序 157
8.6.1来自Linux内核的NAND闪存信息 157
8.6.2 NAND闪存测试程序 160
8.7小结 164
第二部分 U-Boot 167
第9章 U-Boot移植 167
9.1 U-Boot简介 167
9.2下载并编译U-Boot 168
9.3使用GDB调试U-Boot 171
9.4将U-Boot移植到Goldfish平台中 174
9.4.1创建一个新板 174
9.4.2针对处理器的修改 175
9.4.3针对板的修改 176
9.4.4设备驱动程序修改 183
9.5小结 188
第10章 使用U-Boot启动Goldfish内核 190
10.1构建Goldfish内核 190
10.2内置工具链和内核源代码 191
10.3在模拟器中运行并调试内核 192
10.4从NOR闪存启动Android 194
10.4.1创建RAMDISK映像 196
10.4.2创建闪存映像 197
10.4.3启动闪存映像 198
10.4.4闪存映像的源级调试 203
10.5从NAND闪存启动Android 207
10.5.1准备system.img 207
10.5.2从NAND闪存启动 208
10.6小结 214
第三部分 Android系统集成 217
第11章 创建自己的AOSP和CyanogenMod 217
11.1 AOSP和CyanogenMod简介 217
11.2创建Android虚拟设备 218
11.3 AOSP Android模拟器构建 221
11.3.1 AOSP构建环境 221
11.3.2下载AOSP源 222
11.3.3构建AOSP Android模拟器映像 223
11.3.4测试AOSP映像 225
11.4构建CyanogenMod Android模拟器 229
11.4.1下载CyanogenMod源 229
11.4.2构建CyanogenMod Android模拟器映像 230
11.4.3测试CyanogenMod映像 233
11.5小结 237
第12章 定制Android并创建自己的Android ROM 238
12.1在AOSP中支持新硬件 238
12.1.1使用AOSP构建内核 245
12.1.2使用AOSP构建U-Boot 248
12.1.3使用U-Boot从NAND闪存启动Android 249
12.2在CyanogenMod中支持新硬件 256
12.2.1使用CyanogenMod构建内核 258
12.2.2构建U-Boot并启动CyanogenMod 260
12.3小结 261
附录A 构建本书的源代码 262
附录B 在本书中使用Repo 273