前言
开发者的需要
Android系统已经推出了将近5个年头了,从1.0版本一直到本书写作时的4.2版本。作为其载体的硬件也经过了多次升级。到今天,Android设备已经成为硬件的集大成者。硬件方面的开发一直是开发的难点,凡是一个完整Android设备的开发者,无论处于产业链的哪一个阶段,都不可避免地要处理与硬件相关的问题。
Android的开发者通常面对几个方面的难点:
·Android系统的代码庞大,难以把握硬件相关的调试思路。
·不清楚软件和硬件之间的直接关系。
·对某个硬件平台的知识和经验不适用于其他硬件平台。
·Android系统的版本升级过程中,与硬件相关的部分常常发生重大变动。
另外一个客观的情况是,目前一般处理器或者基本硬件平台的BSP(Board Support Package,板级支持包)部分都是由芯片的厂商统一完成的,并且已经趋近于成熟。因此,开发者的主要工作不再是构建完整的BSP,而是调试和修改现有的BSP。
本书特色
本书的目的是要为开发者提供切实有效的帮助。针对开发者的现实情况,本书主要具有以下几个特点:
·用框图描述每一个硬件相关子系统的结构,并区分BSP部分和公用部分。
·选用多个流行的硬件平台,对比其中不同的实现和相同的理念。
·对比Android2.3和Android4.x的实现,展示硬件相关部分的升级。
·对庞大的系统去耦合,展示Android一些原始的核心设计思路。
·列出每一个部分相关的代码路径。
·简要列出代码的关键部分。
·根据实际经验编写,工程性强。
通过对每一个子系统的学习,读者可以了解现有Android系统的结构,经过深入理解后,可以明白Android系统的设计思路。学习后,如果要在系统中增加一个新的非标准硬件,读者也能比较容易地完成。
本书特别选定了Nexus One、Nexus S、Galaxy Nexus等几款手机作为参考平台。其中一个很大的优点就是以上几个平台都是Google认定的,具有典型性,并且它们从内核到Android系统的代码都是开源的,读者可以很容易获得。虽然以上几个硬件平台不是最新的,但是根据嵌入式SOC的特点,高通的处理器都与Nexus One的QSD8x处理器类似,三星的处理器都与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领域具有丰富的一线开发经验。本书内容来源于工作在不同领域的开发者多年的经验。韩超完成了本书内容的主要部分,众多不同规模的企业开发成果也为本书的编写提供了重要的素材。参与本书编写的还有崔海斌、于仕林、张宇、张超、赵家维、黄亮、沈桢、徐威特、杨钰、马若劼、曹道刚、梁泉等。