开发一个Android应用往往非常简单,而要构建一个健壮、可靠、功耗和性能优异的软硬件一体系统确非易事。因此,市面上介绍Android应用开发的书籍很多,但是偏重底层软件开发的书却不多。Android如今已经是最为流行的嵌入式操作系统,如果想要从零开始定制一个全新的基于Android和ARM处理器的新系统,就必须要了解Android操作系统的底层软件。周庆国、郑灵翔、康筱彬、刘同山编著的《Android底层开发实战》不仅覆盖了必要的嵌入式系统理论和Linux的基础知识,还对Android底层的源码进行分析,并用实例引导读者掌握底层开发的技能和调试方法。本书是掌握Android底层软件开发技术的必备工具书。
周庆国、郑灵翔、康筱彬、刘同山编著的《Android底层开发实战》主要面向对Android设备驱动开发有浓厚兴趣的人员,无论是具有一定经验的开发人员还是初学者,都能根据本书所提供的案例进行学习。
书中介绍了嵌入式系统的定义、Linux系统和Android开发环境搭建等基础知识;分析了Android系统底层源码和内核结构,介绍了init、Zygote、Binder、Ashmem、Low Memory Killer和Logger等横块;剖析了系统开发工具Dalvik、JNI、B00t Loader的原理和工作方式;对驱动程序设计中NDK的编程方法以及HAL层的调用进行了详细阐述。并通过Camera与WiFi驱动的实现进行进一步的说明。书中理论部分的介绍旨在呈现一个清晰的开发索引,同时,也有利于读者后续进行深度开发。
本书一大特色是具有针对不同架构的实例,涵盖了当前较流行的ZedBoard、pcDuino、BeagleBoard三类开发板。通过对三类开发板实施系统移植、驱动设计、内核跟踪预测3个项目,使得读者对书中所涉及的所有知识都能有更加深入的了解和应用。
推荐序
自序
前言
第1章 Android嵌入式系统导论
1.1 Android嵌入式系统概述
1.1.1 嵌入式系统定义
1.1.2 基于Android的嵌入式系统构成
1.1.3 移动电话系统
1.1.4 基于ARM的移动电话硬件结构
1.2 嵌入式系统实例
1.2.1 pcDuino部分硬件功能介绍
1.2.2 基于Android的嵌入式系统
第2章 Linux系统详解
2.1 系统简介
2.2 基础命令
2.2.1 cd和ls命令
2.2.2 touch和mkdir命令
2.2.3 rm和rmdir命令
2.2.4 cp和mv命令
2.2.5 find和awk命令
2.2.6 vim编辑器的使用
2.3 Bas shell
2.3.1 Bash Shell简介
2.3.2 Bash Shell脚本简介
2.4 Linux源码与Android源码介绍
2.4.1 Linux源码简介
2.4.2 Android源码简介
第3章 Android系统开发环境搭建
3.1 编译前奏—Android上的开发工作
3.1.1 Android的移植开发
3.1.2 系统开发
3.1.3 应用开发
3.2 Android的系统架构
3.2.1 软件结构
3.2.2 源代码的结构
3.3 搭建开发环境
3.3.1 搭建编译环境
3.3.2 使用
3.3.3 Android的编译
第4章 Android系统底层源码结构分析
4.1 源码结构分析
4.1.1 底层库结构介绍
4.1.2 C基础函数库bionic
4.1.3 C语言底层库libcutils
4.1.4 C++工具库libutils
4.1.5 底层文件系统库system
4.1.6 增加本地库的方法
4.2 Android编译系统介绍
4.2.1 build系统
4.2.2 SDK
4.3 init初始化脚本语言介绍
4.3.1 概述
4.3.2 init进程源码分析
4.3.3 脚本文件的创建与分析
4.3.4 创建设备节点文件
4.3.5 子进程的创建与终止
4.3.6 属性服务
4.4 Zygote
4.4.1 Zygote概述
4.4.2 AppRuntime分析
4.4.3 system_server分析
第5章 Android系统内核分析
5.1 Linux内核基础
5.1.1 概述
5.1.2 Linux内核的主要子系统
5.1.3 Linux启动过程分析
5.2 Android内核概况
5.3 Android启动过程分析
5.4 Binder框架分析
5.4.1 概述
5.4.2 Binder的系统架构
5.4.3 Binder的机制和原理
5.5 Ashmem内存管理方式
5.5.1 概述
5.5.2 Ashmem初始化
5.5.3 内存的创建和释放
5.5.4 内存的映射
5.5.5 内存的锁定和解锁
5.6 低内存管理
5.7 Logger
5.7.1 Logger概述
5.7.2 Logger实现原理
第6章 Android系统相关工具及运行环境
6.1 Android开发工具分类及介绍
6.1.1 应用程序开发工具
6.1.2 框架开发工具
6.1.3 交叉编译工具
6.1.4 内核开发工具
6.2 Dalvik虚拟机
6.2.1 概述
6.2.2 dex文件
6.2.3 Dalvik内存管理
6.2.4 Dalvik编译器
6.3 JNI
6.3.1 概述
6.3.2 JNI的架构
6.3.3 JNI的实现方式
6.4 Boot Loader
6.4.1 概述
6.4.2 Boot Loader 的操作模式
6.4.3 启动过程
6.5 busybox的使用
第7章 Android驱动程序设计
7.1 Android驱动概述
7.2 Android NDK编程
7.3 Android系统中的HAL层
7.3.1 HAL_legacy和HAL对比
7.3.2 HAL module 架构分析
7.3.3 HAL实现流程
7.4 Android系统Camera与WiFi实现
7.4.1 Android中的Camera实现
7.4.2 Android系统WiFi实现
第8章 Android底层开发实例讲解
8.1 底层开发相关技术概览
8.2 实例讲解—基于Zynq的Android移植
8.2.1 主机开发环境的搭建
8.2.2 Linux内核的编译
8.2.3 Android文件系统的编译
8.2.4 SD卡的准备以及Android系统的启动
8.3 移植讲解—基于pcDuino的Android移植
8.3.1 pcDuino介绍
8.3.2 环境搭建
8.3.3 编译内核
8.3.4 编译A
8.3.5 烧录镜像
8.4 Android LED驱动设计
8.4.1 硬件原理
8.4.2 Linux驱动设计
8.4.3 Android HAL层驱动
8.4.4 硬件服务层
8.4.5 App应用编写
8.5 进阶讲解—针对Android系统的内核跟踪与测试
8.5.1 使用平台简介
8.5.2 测试环境的建立
8.5.3 测试工具
8.5.4 Android内核调试与性能测试