基本介绍
内容简介
本书的目的是要为开发者提供切实有效的帮助。针对开发者的现实情况,本书主要具有以下几个特点:
用框图描述每一个硬体相关子系统的结构,并区分BSP部分和公用部分。
选用多个流行的硬体平台,对比其中不同的实现和相同的理念。
对比Android 2.3和Android 4.x的实现,展示硬体相关部分的升级。
对庞大的系统去耦合,展示Android一些原始的核心设计思路。
列出每一个部分相关的代码路径。
简要列出代码的关键部分。
根据实际经验编写,工程性强。
用框图描述每一个硬体相关子系统的结构,并区分BSP部分和公用部分。
选用多个流行的硬体平台,对比其中不同的实现和相同的理念。
对比Android 2.3和Android 4.x的实现,展示硬体相关部分的升级。
对庞大的系统去耦合,展示Android一些原始的核心设计思路。
列出每一个部分相关的代码路径。
简要列出代码的关键部分。
根据实际经验编写,工程性强。
作者简介
韩超,中国大陆地区Linux和移动设备领域的资深工程师、架构师。长期从事一线开发工作,兼具开发实践经验和完备的教育思维模式。韩超是中国大陆地区较早开发Android系统的人员,曾从事系统框架、晶片移植适配和移动产品等开发领域;也曾经引领各种技术人员进入Android领域,并组织参与技术交流。曾出版《Android系统原理及开发要点详解》、《Android系统级深入开发——移植与调试》、《Android经典应用程式开发》、《Android核心原理与系统级套用高效开发》等作品。
图书目录
第1章 Android的BSP和子系统开发
1.1 Android板级支持工作概述
1.1.1 Android的开放原始码工程和BSP
1.1.2 Android的系统结构
1.2 Android的开发环境和原始码
1.2.1 Android的开发环境
1.2.2 原始码仓库
1.3 BSP模组和相关子系统
1.3.1 Android的BSP
1.3.2 BSP和硬体相关子系统
1.3.3 不同类型的Android设备
第2章 Android系统BSP部分工作
2.1 Android的BSP部分工作概述
2.2 BSP的全局部分
2.2.1 原始码工程板级别支持部分
2.2.2 硬体相关的代码改动
2.3 Android的Linux作业系统
2.3.1 Android中的Linux作业系统的特定内容
2.3.2 Android的Linux的基本支持
2.3.3 Android各个硬体设备的驱动程式
2.4 Android的硬体抽象层
2.4.1 硬体抽象层的地位和功能
2.4.2 硬体抽象层接口方式
2.5 各个子系统的移植方式
2.5.1 Android 2.3中的实现方式
2.5.2 Android 2.2及之前的实现方式
2.5.3 Android 4.x中的实现方式
2.6 与硬体抽象层相关的框架层目录
2.6.1 一直保持不变的代码
2.6.2 框架层的本地代码
2.6.3 音频视频相关的代码
第3章 Android的Linux核心和驱动
3.1 Android的Linux核心概述
3.1.1 几个核心工程
3.1.2 核心工程的编译工具链
3.1.3 用户空间关注的内容
3.2 Android专用驱动和组件
3.2.1 电源管理部分
3.2.2 staging中的组件和驱动程式
3.2.3 几个主要核心模组
3.2.4 辅助的模组和改动
3.3 goldfish平台的核心和驱动
3.3.1 goldfish平台和核心概述
3.3.2 goldfish体系结构移植
3.3.3 goldfish的相关设备驱动
3.4 高通MSM平台的核心和驱动
3.4.1 平台概述
3.4.2 体系结构移植
3.4.3 设备驱动程式
3.5 三星平台的核心和驱动
3.5.1 平台概述
3.5.2 体系结构移植
3.5.3 驱动程式部分
3.6 德州仪器OMAP平台的核心和驱动
3.6.1 平台概述
3.6.2 体系结构移植
3.6.3 驱动程式部分
第4章 显示系统
4.1 显示系统概述
4.2 显示子系统结构
4.2.1 总体结构
4.2.2 核心结构和UI库
4.2.3 Surface本地部分
4.2.4 Java层的Surface的处理
4.3 显示BSP的结构
4.3.1 Framebuffer驱动程式
4.3.2 gralloc硬体抽象层
4.4 显示BSP的实现
4.4.1 模拟器显示系统的实现
4.4.2 Nexus One系统的实现
4.4.3 Nexus S系统的实现
4.4.4 Galaxy Nexus系统的实现
第5章 用户输入系统
5.1 用户输入系统概述
5.2 Android 2.3用户输入子系统
5.2.1 总体结构
5.2.2 本地框架的几个部分
5.2.3 JNI
5.2.4 Java层的部分
5.3 Android 4.2的用户输入子系统结构
5.3.1 总体结构
5.3.2 InputManagerService的实现
5.4 用户输入BSP的结构
5.4.1 Input驱动程式
5.4.2 输入配置档案
5.5 用户输入BSP的实现
5.5.1 模拟器中的实现
5.5.2 Nexus One系统中的实现
5.5.3 Nexus S系统中的实现
5.5.4 Galaxy Nexus系统中的实现
第6章 感测器系统
6.1 感测器系统概述
6.2 感测器子系统的结构
6.2.1 总体结构
6.2.2 本地框架层
6.2.3 感测器系统的JNI
6.2.4 感测器系统的Java层
6.3 感测器BSP的结构
6.3.1 驱动程式
6.3.2 硬体抽象层的内容
6.4 感测器BSP的实现
6.4.1 仿真器的实现
6.4.2 Nexus One系统实现
6.4.3 Nexus S系统实现
6.4.4 Galaxy Nexus系统实现
第7章 音频系统
7.1 音频系统概述
7.2 音频子系统结构
7.2.1 总体结构
7.2.2 Audio的本地框架层
7.2.3 Audio系统的JNI和Java层
7.3 音频BSP的结构
7.3.1 Audio驱动程式
7.3.2 硬体抽象层的内容
7.4 音频BSP的实现
7.4.1 通用的Audio系统实现
7.4.2 基于OSS的实现方式
7.4.3 基于ALSA的实现方式
7.4.4 MSM平台和Nexus One系统的实现
7.4.5 Nexus S系统的实现
第8章 视频叠加输出系统
8.1 视频叠加输出系统概述
8.2 视频输出子系统的结构
8.2.1 Overlay系统的结构
8.2.2 本地框架层
8.3 视频叠加输出BSP结构
8.3.1 移植的内容
8.3.2 驱动程式
8.3.3 硬体抽象层的内容
8.3.4 视频输出的调用者
8.3.5 使用Overlay的数据流情况
8.4 视频输出BSP的实现
8.4.1 骨架实现
8.4.2 OMAP系统的实现
8.4.3 Nexus S系统的实现
第9章 照相机系统
9.1 照相机系统概述
9.2 照相机子系统的结构
9.2.1 照相机系统的结构
9.2.2 Camera的本地层
9.2.3 Camera的JNI和Java层
9.3 照相机BSP的结构
9.3.1 移植的内容
9.3.2 Video for 4 Linux驱动程式
9.3.3 硬体抽象层的内容
9.3.4 照相机系统上下层的关係
9.4 照相机BSP的实现
9.4.1 桩实现
9.4.2 Nexus One系统的Camera实现
9.4.3 Nexus S系统的Camera实现
第10章 OpenGL 3D引擎
10.1 OpenGL系统概述
10.2 OpenGL系统的结构
10.2.1 OpenGL和OpenGL ES的标準结构
10.2.2 总体结构
10.2.3 OpenGL库的调用者
10.3 OpenGL BSP的结构
10.3.1 移植的内容
10.3.2 OpenGL移植层的接口
10.3.3 OpenGL的调用和测试
10.4 OpenGL BSP的实现
10.4.1 Android软体OpenGL的实现
10.4.2 Nexus One系统的实现
10.4.3 Nexus S系统的实现
10.4.4 Galaxy Nexus系统的实现
第11章 OpenMax引擎
11.1 OpenMax系统概述
11.2 OpenMax子系统结构
11.2.1 OpenMax系统的结构
11.2.2 Android中OpenMax的适配层
11.3 OpenMax BSP的结构
11.3.1 OpenMax IL层的接口
11.3.2 Android的OpenMax
11.4 OpenMax BSP的实现
11.4.1 OpenMax IL实现的内容
11.4.2 OMAP3的OpenMax IL实现的结构和机制
11.4.3 OMAP4的OpenMax IL实现
第12章 位块複製
12.1 位块複製概述
12.2 位块複製子系统结构
12.2.1 总体结构
12.2.2 copybit的调用者
12.3 位块複製BSP的结构
12.3.1 驱动程式
12.3.2 硬体抽象层的接口
12.3.3 实现硬体抽象层
12.4 位块複製的实现
第13章 无线区域网路系统
13.1 无线区域网路系统概述
13.2 无线区域网路子系统的结构
13.2.1 总体的结构
13.2.2 wpa_supplicant工程
13.2.3 WiFi本地适配库
13.2.4 WiFi的JNI部分
13.2.5 WiFi的Java层
13.3 无线区域网路BSP的结构
13.3.1 协定和驱动程式
13.3.2 用户空间的内容
13.4 无线区域网路BSP的实现
13.4.1 基于BCM49的方案(Nexus One和Nexus S)
13.4.2 OMAP平台的一个典型实现
13.4.3 Galaxy Nexus的实现
第14章 蓝牙系统
14.1 蓝牙系统概述
14.2 蓝牙子系统的结构
14.2.1 蓝牙系统的结构
14.2.2 BlueZ
14.2.3 bluedroid库
14.2.4 蓝牙的JNI部分
14.2.5 蓝牙的Java部分
14.3 BSP的结构
14.3.1 协定和驱动程式
14.3.2 本地代码的配置部分
14.4 Android 4.2的蓝牙系统
14.4.1 系统结构
14.4.2 蓝牙硬体模组
14.4.3 蓝牙系统的本地层部分
14.4.4 BlueTooth包
14.5 BSP的实现
14.5.1 Nexus One系统的蓝牙实现
14.5.2 Nexus S系统的蓝牙实现
14.5.3 Galaxy Nexus系统的蓝牙实现
第15章 定位系统
15.1 定位系统的概述
15.2 定位子系统的结构
15.2.1 总体结构
15.2.2 JNI部分
15.2.3 Java部分
15.3 定位BSP的结构
15.3.1 驱动程式
15.3.2 硬体抽象层的接口
15.3.3 实现硬体抽象层
15.4 定位BSP的实现
15.4.1 仿真器的GPS实现
15.4.2 Nexus One系统的实现
15.4.3 Nexus S系统的实现
15.4.4 Galaxy Nexus系统的实现
第16章 电话系统
16.1 电话系统概述
16.2 电话子系统的结构
16.2.1 总体结构
16.2.2 rild层
16.2.3 Java层中的电话部分
16.3 电话BSP的结构
16.3.1 驱动程式
16.3.2 RIL实现库接口(作为硬体抽象层)
16.4 电话BSP部分的实现
16.4.1 RIL的参考实现
16.4.2 数据连线部分
16.4.3 Mock RIL
第17章 警报器—实时时钟系统
17.1 警报器—实时时钟系统
17.2 警报器—实时时钟子系统的结构
17.2.1 总体结构
17.2.2 JNI部分
17.2.3 Java部分
17.2.4 Android系统时间方面的调用
17.3 警报器—实时时钟BSP部分的结构
17.3.1 RTC驱动程式
17.3.2 Alarm驱动程式
17.4 警报器—实时时钟BSP部分的实现
17.4.1 模拟器环境中的实现
17.4.2 MSM平台和Nexus One系统的实现
17.4.3 Nexus S系统的实现
17.4.4 Galaxy Nexus系统的实现
第18章 光系统
18.1 光系统概述
18.2 背光和指示灯子系统的结构
18.2.1 总体结构
18.2.2 JNI部分
18.2.3 Java服务部分和调用部分
18.3 背光和指示灯BSP部分的结构
18.3.1 驱动程式
18.3.2 硬体抽象层的内容
18.4 背光和指示灯BSP部分的实现
18.4.1 Nexus One系统的实现
18.4.2 Nexus S系统的实现
18.4.3 Galaxy Nexus 系统的实现
第19章 振动器系统
19.1 振动器系统概述
19.2 振动器子系统的结构
19.2.1 振动器部分的结构
19.2.2 JNI部分
19.2.3 Java框架部分
19.3 振动器BSP部分的结构
19.3.1 驱动程式
19.3.2 硬体抽象层的内容
19.4 振动器BSP部分的实现
19.4.1 Nexus One系统的实现
19.4.2 Nexus S系统的实现
19.4.3 Galaxy Nexus
第20章 电池信息部分
20.1 电池信息部分
20.2 电池信息子系统的结构
20.2.1 电池系统部分的结构
20.2.2 JNI部分
20.2.3 Java部分
20.3 电池信息BSP部分的结构
20.4 电池信息BSP部分的实现
20.4.1 模拟器中的实现
20.4.2 Nexus One
20.4.3 Nexus S
20.4.4 Galaxy Nexus
第21章 Android 4.x的音频、视频系统
21.1 Android 4.x的音频系统
21.1.1 音频系统的结构
21.1.2 音频框架层
21.1.3 音频BSP部分结构
21.2 Android 4.x音频的BSP实现
21.2.1 主实现和策略实现
21.2.2 仿真器实现
21.2.3 A2DP实现
21.2.4 Galaxy Nexus的实现
21.3 Android 4.x照相机系统
21.3.1 照相机系统的结构
21.3.2 Camera的框架层
21.3.3 照相机BSP部分结构
21.4 Android 4.x照相机的BSP实现
21.4.1 仿真器实现
21.4.2 Galaxy Nexus的实现
21.5 Android 4.x视频组合系统
21.5.1 视频组合系统结构
21.5.2 SurfaceFlinger对视频组合的使用
21.5.3 视频组合BSP部分结构
21.6 Android 4.x视频组合的BSP实现
21.6.1 默认实现
21.6.2 Galaxy Nexus的视频组合
第22章 Android 4.x近场通信系统
22.1 近场通信系统概述
22.2 近场通信子系统的结构
22.2.1 总体结构
22.2.2 NFC本地库
22.2.3 Android框架层的NFC相关内容
22.2.4 NFC包
22.3 近场通信BSP的结构
22.3.1 NFC—NCI接口
22.3.2 NFC接口
22.4 近场通信BSP的实现
22.4.1 NCI—NFC的桩实现
22.4.2 NFC的桩实现
22.4.3 Galaxy Nexus 的NFC实现
第23章 Android 4.2的电源控制
23.1 电源控制
23.2 电源控制的结构
23.2.1 总体结构
23.2.2 电源控制的使用
23.3 电源控制BSP的结构
23.4 电源控制BSP的实现
23.4.1 通用的电源控制实现
23.4.2 Galaxy Nexus的电源控制实现
第24章 本地时间
24.1 本地时间子系统结构
24.1.1 本地时间的结构
24.1.2 本地时间的使用
24.2 本地时间BSP的结构
24.3 本地时间BSP的实现
第25章 Android 4.2密钥
25.1 密钥概述
25.2 安全和密钥子系统结构
25.2.1 安全和密钥的总体结构
25.2.2 keystore守护进程
25.2.3 android.security的内容
25.3 密钥的BSP部分的结构
25.4 密钥的BSP实现
25.4.1 通用的软体密钥实现
25.4.2 Galaxy Nexus 的密钥实现
第26章 电源管理
26.1 Android电源管理
26.2 Android核心空间的电源管理
26.2.1 总体结构
26.2.2 wakelock
26.2.3 wakelock的用户空间
26.2.4 earlysuspend部分
26.2.5 其他
26.3 Android用户空间的电源管理
26.3.1 电源管理的本地库
26.3.2 电源管理的JNI库
26.3.3 电源管理的Java部分
26.4 电源管理的策略
26.4.1 驱动程式的变化
26.4.2 用户空间的控制
第27章 恢复和升级
27.1 恢复和升级概述
27.1.1 Android的Recovery系统的组成
27.1.2 Android的Recovery系统的功能和运行流程
27.2 recovery系统
27.2.1 编译系统
27.2.2 init.rc脚本
27.2.3 Recovery可执行程式和相关的库
27.3 Android系统互动的过程
27.3.1 Java部分
27.3.2 互动的场景
1.1 Android板级支持工作概述
1.1.1 Android的开放原始码工程和BSP
1.1.2 Android的系统结构
1.2 Android的开发环境和原始码
1.2.1 Android的开发环境
1.2.2 原始码仓库
1.3 BSP模组和相关子系统
1.3.1 Android的BSP
1.3.2 BSP和硬体相关子系统
1.3.3 不同类型的Android设备
第2章 Android系统BSP部分工作
2.1 Android的BSP部分工作概述
2.2 BSP的全局部分
2.2.1 原始码工程板级别支持部分
2.2.2 硬体相关的代码改动
2.3 Android的Linux作业系统
2.3.1 Android中的Linux作业系统的特定内容
2.3.2 Android的Linux的基本支持
2.3.3 Android各个硬体设备的驱动程式
2.4 Android的硬体抽象层
2.4.1 硬体抽象层的地位和功能
2.4.2 硬体抽象层接口方式
2.5 各个子系统的移植方式
2.5.1 Android 2.3中的实现方式
2.5.2 Android 2.2及之前的实现方式
2.5.3 Android 4.x中的实现方式
2.6 与硬体抽象层相关的框架层目录
2.6.1 一直保持不变的代码
2.6.2 框架层的本地代码
2.6.3 音频视频相关的代码
第3章 Android的Linux核心和驱动
3.1 Android的Linux核心概述
3.1.1 几个核心工程
3.1.2 核心工程的编译工具链
3.1.3 用户空间关注的内容
3.2 Android专用驱动和组件
3.2.1 电源管理部分
3.2.2 staging中的组件和驱动程式
3.2.3 几个主要核心模组
3.2.4 辅助的模组和改动
3.3 goldfish平台的核心和驱动
3.3.1 goldfish平台和核心概述
3.3.2 goldfish体系结构移植
3.3.3 goldfish的相关设备驱动
3.4 高通MSM平台的核心和驱动
3.4.1 平台概述
3.4.2 体系结构移植
3.4.3 设备驱动程式
3.5 三星平台的核心和驱动
3.5.1 平台概述
3.5.2 体系结构移植
3.5.3 驱动程式部分
3.6 德州仪器OMAP平台的核心和驱动
3.6.1 平台概述
3.6.2 体系结构移植
3.6.3 驱动程式部分
第4章 显示系统
4.1 显示系统概述
4.2 显示子系统结构
4.2.1 总体结构
4.2.2 核心结构和UI库
4.2.3 Surface本地部分
4.2.4 Java层的Surface的处理
4.3 显示BSP的结构
4.3.1 Framebuffer驱动程式
4.3.2 gralloc硬体抽象层
4.4 显示BSP的实现
4.4.1 模拟器显示系统的实现
4.4.2 Nexus One系统的实现
4.4.3 Nexus S系统的实现
4.4.4 Galaxy Nexus系统的实现
第5章 用户输入系统
5.1 用户输入系统概述
5.2 Android 2.3用户输入子系统
5.2.1 总体结构
5.2.2 本地框架的几个部分
5.2.3 JNI
5.2.4 Java层的部分
5.3 Android 4.2的用户输入子系统结构
5.3.1 总体结构
5.3.2 InputManagerService的实现
5.4 用户输入BSP的结构
5.4.1 Input驱动程式
5.4.2 输入配置档案
5.5 用户输入BSP的实现
5.5.1 模拟器中的实现
5.5.2 Nexus One系统中的实现
5.5.3 Nexus S系统中的实现
5.5.4 Galaxy Nexus系统中的实现
第6章 感测器系统
6.1 感测器系统概述
6.2 感测器子系统的结构
6.2.1 总体结构
6.2.2 本地框架层
6.2.3 感测器系统的JNI
6.2.4 感测器系统的Java层
6.3 感测器BSP的结构
6.3.1 驱动程式
6.3.2 硬体抽象层的内容
6.4 感测器BSP的实现
6.4.1 仿真器的实现
6.4.2 Nexus One系统实现
6.4.3 Nexus S系统实现
6.4.4 Galaxy Nexus系统实现
第7章 音频系统
7.1 音频系统概述
7.2 音频子系统结构
7.2.1 总体结构
7.2.2 Audio的本地框架层
7.2.3 Audio系统的JNI和Java层
7.3 音频BSP的结构
7.3.1 Audio驱动程式
7.3.2 硬体抽象层的内容
7.4 音频BSP的实现
7.4.1 通用的Audio系统实现
7.4.2 基于OSS的实现方式
7.4.3 基于ALSA的实现方式
7.4.4 MSM平台和Nexus One系统的实现
7.4.5 Nexus S系统的实现
第8章 视频叠加输出系统
8.1 视频叠加输出系统概述
8.2 视频输出子系统的结构
8.2.1 Overlay系统的结构
8.2.2 本地框架层
8.3 视频叠加输出BSP结构
8.3.1 移植的内容
8.3.2 驱动程式
8.3.3 硬体抽象层的内容
8.3.4 视频输出的调用者
8.3.5 使用Overlay的数据流情况
8.4 视频输出BSP的实现
8.4.1 骨架实现
8.4.2 OMAP系统的实现
8.4.3 Nexus S系统的实现
第9章 照相机系统
9.1 照相机系统概述
9.2 照相机子系统的结构
9.2.1 照相机系统的结构
9.2.2 Camera的本地层
9.2.3 Camera的JNI和Java层
9.3 照相机BSP的结构
9.3.1 移植的内容
9.3.2 Video for 4 Linux驱动程式
9.3.3 硬体抽象层的内容
9.3.4 照相机系统上下层的关係
9.4 照相机BSP的实现
9.4.1 桩实现
9.4.2 Nexus One系统的Camera实现
9.4.3 Nexus S系统的Camera实现
第10章 OpenGL 3D引擎
10.1 OpenGL系统概述
10.2 OpenGL系统的结构
10.2.1 OpenGL和OpenGL ES的标準结构
10.2.2 总体结构
10.2.3 OpenGL库的调用者
10.3 OpenGL BSP的结构
10.3.1 移植的内容
10.3.2 OpenGL移植层的接口
10.3.3 OpenGL的调用和测试
10.4 OpenGL BSP的实现
10.4.1 Android软体OpenGL的实现
10.4.2 Nexus One系统的实现
10.4.3 Nexus S系统的实现
10.4.4 Galaxy Nexus系统的实现
第11章 OpenMax引擎
11.1 OpenMax系统概述
11.2 OpenMax子系统结构
11.2.1 OpenMax系统的结构
11.2.2 Android中OpenMax的适配层
11.3 OpenMax BSP的结构
11.3.1 OpenMax IL层的接口
11.3.2 Android的OpenMax
11.4 OpenMax BSP的实现
11.4.1 OpenMax IL实现的内容
11.4.2 OMAP3的OpenMax IL实现的结构和机制
11.4.3 OMAP4的OpenMax IL实现
第12章 位块複製
12.1 位块複製概述
12.2 位块複製子系统结构
12.2.1 总体结构
12.2.2 copybit的调用者
12.3 位块複製BSP的结构
12.3.1 驱动程式
12.3.2 硬体抽象层的接口
12.3.3 实现硬体抽象层
12.4 位块複製的实现
第13章 无线区域网路系统
13.1 无线区域网路系统概述
13.2 无线区域网路子系统的结构
13.2.1 总体的结构
13.2.2 wpa_supplicant工程
13.2.3 WiFi本地适配库
13.2.4 WiFi的JNI部分
13.2.5 WiFi的Java层
13.3 无线区域网路BSP的结构
13.3.1 协定和驱动程式
13.3.2 用户空间的内容
13.4 无线区域网路BSP的实现
13.4.1 基于BCM49的方案(Nexus One和Nexus S)
13.4.2 OMAP平台的一个典型实现
13.4.3 Galaxy Nexus的实现
第14章 蓝牙系统
14.1 蓝牙系统概述
14.2 蓝牙子系统的结构
14.2.1 蓝牙系统的结构
14.2.2 BlueZ
14.2.3 bluedroid库
14.2.4 蓝牙的JNI部分
14.2.5 蓝牙的Java部分
14.3 BSP的结构
14.3.1 协定和驱动程式
14.3.2 本地代码的配置部分
14.4 Android 4.2的蓝牙系统
14.4.1 系统结构
14.4.2 蓝牙硬体模组
14.4.3 蓝牙系统的本地层部分
14.4.4 BlueTooth包
14.5 BSP的实现
14.5.1 Nexus One系统的蓝牙实现
14.5.2 Nexus S系统的蓝牙实现
14.5.3 Galaxy Nexus系统的蓝牙实现
第15章 定位系统
15.1 定位系统的概述
15.2 定位子系统的结构
15.2.1 总体结构
15.2.2 JNI部分
15.2.3 Java部分
15.3 定位BSP的结构
15.3.1 驱动程式
15.3.2 硬体抽象层的接口
15.3.3 实现硬体抽象层
15.4 定位BSP的实现
15.4.1 仿真器的GPS实现
15.4.2 Nexus One系统的实现
15.4.3 Nexus S系统的实现
15.4.4 Galaxy Nexus系统的实现
第16章 电话系统
16.1 电话系统概述
16.2 电话子系统的结构
16.2.1 总体结构
16.2.2 rild层
16.2.3 Java层中的电话部分
16.3 电话BSP的结构
16.3.1 驱动程式
16.3.2 RIL实现库接口(作为硬体抽象层)
16.4 电话BSP部分的实现
16.4.1 RIL的参考实现
16.4.2 数据连线部分
16.4.3 Mock RIL
第17章 警报器—实时时钟系统
17.1 警报器—实时时钟系统
17.2 警报器—实时时钟子系统的结构
17.2.1 总体结构
17.2.2 JNI部分
17.2.3 Java部分
17.2.4 Android系统时间方面的调用
17.3 警报器—实时时钟BSP部分的结构
17.3.1 RTC驱动程式
17.3.2 Alarm驱动程式
17.4 警报器—实时时钟BSP部分的实现
17.4.1 模拟器环境中的实现
17.4.2 MSM平台和Nexus One系统的实现
17.4.3 Nexus S系统的实现
17.4.4 Galaxy Nexus系统的实现
第18章 光系统
18.1 光系统概述
18.2 背光和指示灯子系统的结构
18.2.1 总体结构
18.2.2 JNI部分
18.2.3 Java服务部分和调用部分
18.3 背光和指示灯BSP部分的结构
18.3.1 驱动程式
18.3.2 硬体抽象层的内容
18.4 背光和指示灯BSP部分的实现
18.4.1 Nexus One系统的实现
18.4.2 Nexus S系统的实现
18.4.3 Galaxy Nexus 系统的实现
第19章 振动器系统
19.1 振动器系统概述
19.2 振动器子系统的结构
19.2.1 振动器部分的结构
19.2.2 JNI部分
19.2.3 Java框架部分
19.3 振动器BSP部分的结构
19.3.1 驱动程式
19.3.2 硬体抽象层的内容
19.4 振动器BSP部分的实现
19.4.1 Nexus One系统的实现
19.4.2 Nexus S系统的实现
19.4.3 Galaxy Nexus
第20章 电池信息部分
20.1 电池信息部分
20.2 电池信息子系统的结构
20.2.1 电池系统部分的结构
20.2.2 JNI部分
20.2.3 Java部分
20.3 电池信息BSP部分的结构
20.4 电池信息BSP部分的实现
20.4.1 模拟器中的实现
20.4.2 Nexus One
20.4.3 Nexus S
20.4.4 Galaxy Nexus
第21章 Android 4.x的音频、视频系统
21.1 Android 4.x的音频系统
21.1.1 音频系统的结构
21.1.2 音频框架层
21.1.3 音频BSP部分结构
21.2 Android 4.x音频的BSP实现
21.2.1 主实现和策略实现
21.2.2 仿真器实现
21.2.3 A2DP实现
21.2.4 Galaxy Nexus的实现
21.3 Android 4.x照相机系统
21.3.1 照相机系统的结构
21.3.2 Camera的框架层
21.3.3 照相机BSP部分结构
21.4 Android 4.x照相机的BSP实现
21.4.1 仿真器实现
21.4.2 Galaxy Nexus的实现
21.5 Android 4.x视频组合系统
21.5.1 视频组合系统结构
21.5.2 SurfaceFlinger对视频组合的使用
21.5.3 视频组合BSP部分结构
21.6 Android 4.x视频组合的BSP实现
21.6.1 默认实现
21.6.2 Galaxy Nexus的视频组合
第22章 Android 4.x近场通信系统
22.1 近场通信系统概述
22.2 近场通信子系统的结构
22.2.1 总体结构
22.2.2 NFC本地库
22.2.3 Android框架层的NFC相关内容
22.2.4 NFC包
22.3 近场通信BSP的结构
22.3.1 NFC—NCI接口
22.3.2 NFC接口
22.4 近场通信BSP的实现
22.4.1 NCI—NFC的桩实现
22.4.2 NFC的桩实现
22.4.3 Galaxy Nexus 的NFC实现
第23章 Android 4.2的电源控制
23.1 电源控制
23.2 电源控制的结构
23.2.1 总体结构
23.2.2 电源控制的使用
23.3 电源控制BSP的结构
23.4 电源控制BSP的实现
23.4.1 通用的电源控制实现
23.4.2 Galaxy Nexus的电源控制实现
第24章 本地时间
24.1 本地时间子系统结构
24.1.1 本地时间的结构
24.1.2 本地时间的使用
24.2 本地时间BSP的结构
24.3 本地时间BSP的实现
第25章 Android 4.2密钥
25.1 密钥概述
25.2 安全和密钥子系统结构
25.2.1 安全和密钥的总体结构
25.2.2 keystore守护进程
25.2.3 android.security的内容
25.3 密钥的BSP部分的结构
25.4 密钥的BSP实现
25.4.1 通用的软体密钥实现
25.4.2 Galaxy Nexus 的密钥实现
第26章 电源管理
26.1 Android电源管理
26.2 Android核心空间的电源管理
26.2.1 总体结构
26.2.2 wakelock
26.2.3 wakelock的用户空间
26.2.4 earlysuspend部分
26.2.5 其他
26.3 Android用户空间的电源管理
26.3.1 电源管理的本地库
26.3.2 电源管理的JNI库
26.3.3 电源管理的Java部分
26.4 电源管理的策略
26.4.1 驱动程式的变化
26.4.2 用户空间的控制
第27章 恢复和升级
27.1 恢复和升级概述
27.1.1 Android的Recovery系统的组成
27.1.2 Android的Recovery系统的功能和运行流程
27.2 recovery系统
27.2.1 编译系统
27.2.2 init.rc脚本
27.2.3 Recovery可执行程式和相关的库
27.3 Android系统互动的过程
27.3.1 Java部分
27.3.2 互动的场景
序言
开发者的需要
Android系统已经推出了将近5个年头了,从1.0版本一直到本书写作时的4.2版本。作为其载体的硬体也经过了多次升级。到今天,Android设备已经成为硬体的集大成者。硬体方面的开发一直是开发的难点,凡是一个完整Android设备的开发者,无论处于产业链的哪一个阶段,都不可避免地要处理与硬体相关的问题。
Android的开发者通常面对几个方面的难点:
Android系统的代码庞大,难以把握硬体相关的调试思路。
不清楚软体和硬体之间的直接关係。
对某个硬体平台的知识和经验不适用于其他硬体平台。
Android系统的版本升级过程中,与硬体相关的部分常常发生重大变动。
另外一个客观的情况是,目前一般处理器或者基本硬体平台的BSP(Board Support Package,板级支持包)部分都是由晶片的厂商统一完成的,并且已经趋近于成熟。因此,开发者的主要工作不再是构建完整的BSP,而是调试和修改现有的BSP。
本书特色
本书的目的是要为开发者提供切实有效的帮助。针对开发者的现实情况,本书主要具有以下几个特点:
用框图描述每一个硬体相关子系统的结构,并区分BSP部分和公用部分。
选用多个流行的硬体平台,对比其中不同的实现和相同的理念。
对比Android 2.3和Android 4.x的实现,展示硬体相关部分的升级。
对庞大的系统去耦合,展示Android一些原始的核心设计思路。
列出每一个部分相关的代码路径。
简要列出代码的关键部分。
根据实际经验编写,工程性强。
通过对每一个子系统的学习,读者可以了解现有Android系统的结构,经过深入理解后,可以明白Android系统的设计思路。学习后,如果要在系统中增加一个新的非标準硬体,读者也能比较容易地完成。
本书特别选定了Nexus One、Nexus S、Galaxy Nexus等几款手机作为参考平台。其中一个很大的优点就是以上几个平台都是Google认定的,具有典型性,并且它们从核心到Android系统的代码都是开源的,读者可以很容易获得。虽然以上几个硬体平台不是最新的,但是根据嵌入式SOC的特点,高通的处理器都与Nexus One的QSD 8x处理器类似,三星的处理器都与Nexus S的Exynos处理器类似,德州仪器的处理器都与Galaxy Nexus 的OMAP处理器类似。因此,这样的选择既方便又具有广泛的适应性,当读者熟悉了这几个硬体平台后,置于Marvel、Freescale和NVidia等公司的平台可以实现融会贯通。
Android系统可以被视为一个功能完备的机器人。其中与硬体相关的BSP部分,则是这个机器人的根基和经脉,虽然占的比重不大,却是系统的关键所在。
本书的理念可以用下面的图来表示。
本书内容
本书提供了系统化的Android系统的开发知识,以硬体相关的子系统为核心,主要包括以下几个方面的内容:
硬体相关的子系统的特点。
几个不同的硬体平台的Linux核心结构。
每个子系统的总体结构和BSP结构。
每个子系统的BSP的实现要点。
具体硬体在Linux核心与Android硬体抽象层相关的实现。
人的知识和经验本身是网状结构,各部分相互关联,错综複杂。但是作为出版的书籍,则必须将其串列成章节的形式,本书总体上是以横向结构来进行组织的,大部分章节是针对每一个硬体相关子系统的描述,每一章的组织结构也比较类似。
本书读者
本书适用于各类Android技术群体,也适用于嵌入式Linux的技术人员了解实际系统。作者对读者有以下几个方面的建议:
根据书中提供的知识和经验,对照Android的原始码,有相应的Android设备,这三者的结合是最理想的学习环境。
要首先理解巨观结构,再研究细枝末节,硬体相关子系统的很多代码并非在任何情况下都会适用,读者需要了解其适用的场景。
BSP部分的开发偏重下层,读者不要过于依赖界面,而要习惯查看系统日誌,从Linux系统标準的设备和特殊档案系统中获取信息,并使用各种命令行工具调试。
硬体抽象层的目的是为了适配各种硬体,很多程式的结构看似冗余,却正是BSP设计的精华所在,这也是读者需要关注的内容。
夯实Linux的基础对Android开发也非常重要,对Android的BSP开发尤为重要。
在开发的过程中,可能用到很多不同的硬体平台,要根据本书的思路掌握查看硬体信息和硬体相关代码的方法。
本书作者
本书的规划和统筹由中国大陆的韩超完成,韩超在Linux和Android领域具有丰富的一线开发经验。本书内容来源于工作在不同领域的开发者多年的经验。韩超完成了本书内容的主要部分,众多不同规模的企业开发成果也为本书的编写提供了重要的素材。参与本书编写的还有崔海斌、于仕林、张宇、张超、赵家维、黄亮、沈桢、徐威特、杨钰、马若劼、曹道刚、梁泉等。
Android系统已经推出了将近5个年头了,从1.0版本一直到本书写作时的4.2版本。作为其载体的硬体也经过了多次升级。到今天,Android设备已经成为硬体的集大成者。硬体方面的开发一直是开发的难点,凡是一个完整Android设备的开发者,无论处于产业链的哪一个阶段,都不可避免地要处理与硬体相关的问题。
Android的开发者通常面对几个方面的难点:
Android系统的代码庞大,难以把握硬体相关的调试思路。
不清楚软体和硬体之间的直接关係。
对某个硬体平台的知识和经验不适用于其他硬体平台。
Android系统的版本升级过程中,与硬体相关的部分常常发生重大变动。
另外一个客观的情况是,目前一般处理器或者基本硬体平台的BSP(Board Support Package,板级支持包)部分都是由晶片的厂商统一完成的,并且已经趋近于成熟。因此,开发者的主要工作不再是构建完整的BSP,而是调试和修改现有的BSP。
本书特色
本书的目的是要为开发者提供切实有效的帮助。针对开发者的现实情况,本书主要具有以下几个特点:
用框图描述每一个硬体相关子系统的结构,并区分BSP部分和公用部分。
选用多个流行的硬体平台,对比其中不同的实现和相同的理念。
对比Android 2.3和Android 4.x的实现,展示硬体相关部分的升级。
对庞大的系统去耦合,展示Android一些原始的核心设计思路。
列出每一个部分相关的代码路径。
简要列出代码的关键部分。
根据实际经验编写,工程性强。
通过对每一个子系统的学习,读者可以了解现有Android系统的结构,经过深入理解后,可以明白Android系统的设计思路。学习后,如果要在系统中增加一个新的非标準硬体,读者也能比较容易地完成。
本书特别选定了Nexus One、Nexus S、Galaxy Nexus等几款手机作为参考平台。其中一个很大的优点就是以上几个平台都是Google认定的,具有典型性,并且它们从核心到Android系统的代码都是开源的,读者可以很容易获得。虽然以上几个硬体平台不是最新的,但是根据嵌入式SOC的特点,高通的处理器都与Nexus One的QSD 8x处理器类似,三星的处理器都与Nexus S的Exynos处理器类似,德州仪器的处理器都与Galaxy Nexus 的OMAP处理器类似。因此,这样的选择既方便又具有广泛的适应性,当读者熟悉了这几个硬体平台后,置于Marvel、Freescale和NVidia等公司的平台可以实现融会贯通。
Android系统可以被视为一个功能完备的机器人。其中与硬体相关的BSP部分,则是这个机器人的根基和经脉,虽然占的比重不大,却是系统的关键所在。
本书的理念可以用下面的图来表示。
本书内容
本书提供了系统化的Android系统的开发知识,以硬体相关的子系统为核心,主要包括以下几个方面的内容:
硬体相关的子系统的特点。
几个不同的硬体平台的Linux核心结构。
每个子系统的总体结构和BSP结构。
每个子系统的BSP的实现要点。
具体硬体在Linux核心与Android硬体抽象层相关的实现。
人的知识和经验本身是网状结构,各部分相互关联,错综複杂。但是作为出版的书籍,则必须将其串列成章节的形式,本书总体上是以横向结构来进行组织的,大部分章节是针对每一个硬体相关子系统的描述,每一章的组织结构也比较类似。
本书读者
本书适用于各类Android技术群体,也适用于嵌入式Linux的技术人员了解实际系统。作者对读者有以下几个方面的建议:
根据书中提供的知识和经验,对照Android的原始码,有相应的Android设备,这三者的结合是最理想的学习环境。
要首先理解巨观结构,再研究细枝末节,硬体相关子系统的很多代码并非在任何情况下都会适用,读者需要了解其适用的场景。
BSP部分的开发偏重下层,读者不要过于依赖界面,而要习惯查看系统日誌,从Linux系统标準的设备和特殊档案系统中获取信息,并使用各种命令行工具调试。
硬体抽象层的目的是为了适配各种硬体,很多程式的结构看似冗余,却正是BSP设计的精华所在,这也是读者需要关注的内容。
夯实Linux的基础对Android开发也非常重要,对Android的BSP开发尤为重要。
在开发的过程中,可能用到很多不同的硬体平台,要根据本书的思路掌握查看硬体信息和硬体相关代码的方法。
本书作者
本书的规划和统筹由中国大陆的韩超完成,韩超在Linux和Android领域具有丰富的一线开发经验。本书内容来源于工作在不同领域的开发者多年的经验。韩超完成了本书内容的主要部分,众多不同规模的企业开发成果也为本书的编写提供了重要的素材。参与本书编写的还有崔海斌、于仕林、张宇、张超、赵家维、黄亮、沈桢、徐威特、杨钰、马若劼、曹道刚、梁泉等。