Android嵌入式编程
作者:(美)罗杰 叶(RogerYe) 著
出版时间:2019年版
内容简介
本书主要介绍Android嵌入式系统编程的相关内容,通过讲解裸机编辑、启动加载程序、构建Android系统等知识点,旨在帮助读者夯实编程知识,掌握Android嵌入式系统的开发、编译及调试技巧。本书包括三部分内容。第一部分重点介绍裸机编程,主要介绍底层开发和Android系统编程的基本原理,涵盖使用U-Boot启动Linux内核所必需的硬件接口,裸机编程环境中串口的硬件接口编程、实时时钟、NAND闪存控制器等内容。第二部分介绍将U-Boot移植到Goldfish平台的方法。第三部分则完成使用虚拟设备为Android设备构建定制的ROM的实现。本书适合有一定经验的从事Android系统开发的开发人员参考,也适合想要探索Android底层开发知识的计算机专业学生阅读。
目录
目 录
第 一部分 裸 机 编 程
第 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.3.1 链接器脚本示例 43
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.6.1 定时器和RTC的单元测试 133
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
第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系统集成
第 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 构建本书的源代码 265
A.1 设置构建环境 265
A.2 创建虚拟机 267
A.3 源代码的组织 267
A.4 第 一部分的源代码 268
A.4.1 从命令行构建并测试 268
A.4.2 在Eclipse中构建并测试 269
A.5 第二部分的源代码 272
A.6 第三部分的源代码 273
A.6.1 构建AOSP 274
A.6.2 构建CyanogenMod 274
附录B 在本书中使用Repo 276
B.1 Repo的资源 276
B.2 几分钟内同步一个新的源树 276
B.3 使用local manifest下载git仓库 277