基于Android的BSP移植自动适配技术
android属于什么软件杨海民;张涛;赵敏;尤峻;董民
【摘 要】Considering the fact that,Android Board Support Package( BSP) transplantation personnel not only needs to be familiar with the specific model chip development manual over again,but also needs to adjust the package code of some parts of the drivers and other issues,this paper reconstructs Android Linux source code to design and implement a framework of Android BSP transplantation based on the classified management of source code. The framework defines Android Linux kernel source code reconstruction rules. Based on the rules,it manages Android Linux kernel source code in accordance with the native Linux kernel code, Google Android drivers and BSP code associated with manufacturer board. In addition,an Android BSP transplantation automatic adaptation tool is designed which implements the automatic constitution of Android Linux kernel source code. Test result proves that the framework can significantly improve work efficiency of transplanting and upgrading board Android Linux kernel.%当前Android的板级支持包( BSP)移植开发人员不仅需
要熟悉具体型号芯片的开发手册,还需要调整部分驱动封装代码,工作效率较低。为此,通过对Android Linux内核源代码进行重构,设计并实现一种基于源代码分类管理的Andriod BSP移植管理框架。形式化定义Android Linux内核源码重构规则,基于该规则对Android Linux内核源码按照原生 Linux 内核代码、Google Android 驱动程序、厂商板硬件相关 BSP 代码3类进行管理,设计Android BSP移植自动适配工具,实现面向特定开发板和特定Linux内核版本的Android Linux内核源代码自动生成。测试结果表明,该管理框架能够提高BSP移植开发人员移植和升级开发板Android Linux内核的工作效率。
【期刊名称】《计算机工程》
【年(卷),期】2014(000)011
【总页数】5页(P245-249)
【关键词】Linux内核;Android Linux内核源码;组织结构;重构;板级支持包移植;自动适配技术
【作 者】杨海民;张涛;赵敏;尤峻;董民
【作者单位】解放军理工大学 指挥信息系统学院;解放军理工大学 指挥信息系统学院;解放军理工大学 指挥信息系统学院;解放军理工大学 指挥信息系统学院;解放军理工大学 通信工程学院,南京210007
【正文语种】中 文
【中图分类】TP302
Google Android自2007年11月首次发布以来,已经历了数个版本更新,市场上采用该系统的移动设备数量也在飞速增长。为便于系统的移植和硬件适配,Google Android系统被设计成分层的架构,自底向上分别是Linux内核层、本地层(Native)/运行时层 (Runtime)、框架层(Framework)和应用层(Application)[1]。Android系统运行的基础是Linux,所有的硬件驱动程序、设备管理和进程间通信机制都在底层Linux内核中实现。为了在不同架构、不同配置的硬件设备上移植运行Android系统,针对底层Linux的移植是最重要的步骤。目前,Android系统Linux内核源码移植适配主要采用人工对比分析的方式,内核移植和升级过程中的主要技术难点在于:(1)同一个Linux内核版本需要适配不同处理器和开发板,需要将不同板级支持包(Board Support Package,BSP)(主要是厂商的特定硬件的驱动程序)移植到同一版本Linux原生内核中;
(2)将不同的Linux内核版本移植到同一个开发板或硬件设备上,需要将不同版本Linux内核源码和同一BSP源码进行移植合并。当前Android Linux内核移植和版本升级工作费时费力,工作效率不高,亟待研究一种高效的Android BSP源码移植适配技术。
针对上述Android Linux内核移植过程中的问题,本文形式化定义一套内核代码重构规则,对Android Linux内核源码进行重构,设计一种基于源码分类管理的BSP移植框架,实现一个Android BSP移植自动适配工具,从而提高BSP移植开发人员代码管理维护和升级工作效率,减少BSP移植的难度和工作量。
近年来,随着以智能手机和平板电脑为代表的移动互联网产业的迅猛发展,支撑智能移动设备开发的关键技术——嵌入式系统BSP移植开发方法在工业界和学术界受到的关注越来越多。一直以来,针对嵌入式系统BSP移植的研究内容主要包括移植的操作系统与硬件设备的通信协议研究,以及BSP移植适配软硬件协同技术研究与工具实现。
文献[2]提出ProGram正则语言用来描述硬件和软件间的通信协议,该协议可以被编译成实际软件代码,但是该协议不易在Android Linux操作系统环境中整合使用。文献[3]引入了一种通过事件驱动状态机来描述硬件设备行为、通信协议、规则声明和代码生成的设备驱动开
发方法,解决了嵌入式系统BSP设备驱动的移植性问题,但是没有涉及到处理器各控制器的抽象,此外需要使用一系列的外部工具,并且规则过于复杂,在本文讨论的Android BSP移植适配环境下可适用度较低。
目前基于嵌入式系统的BSP移植工作主要集中在VxWorks[4-6]和Windows CE[7-8]系统上,基于嵌入式Linux系统的BSP移植工作较少。另外,基于嵌入式Linux系统的BSP移植技术主要是解决硬件初始化、操作系统引导加载、硬件设备驱动等问题。文献[9]着眼于解决这些问题,在进行比较的基础上提出了比较完整的BSP解决思路,深入分析和比较了BSP的硬件初始化、引导代码设计、驱动程序框架结构和设计思路等。文献[10]分析比较了BSP技术和PC机的BIOS技术的特点,提出了BSP的工作职责,并详细介绍描述了嵌入式Linux的引导技术和设备驱动程序框架。以上文献都需要进行大量代码研读和分析工作,虽然Linux提供了开放的源码,但其没有提供完善的开发文档支持,另外体系结构的层次划分、代码之间的关联,以及各种实现之间的注册和调用关系等缺乏指导性文档。
如图1所示,Android Linux内核源码组织结构主要包括3个部分:原生 Linux内核代码,Google Android驱动程序,厂商板硬件相关BSP代码。
原生Linux内核是Linux操作系统的内部核心程序,它向外部提供了对设备的核心管理调用[4]。目前Linux内核可以运行在很多的硬件上面,另外Linux每隔两三个月就会发布一个新版本,新版本会增加同时也会删除一些特性。
Google Android是基于Linux内核的操作系统,可以面向很多不同的硬件平台,其版本也是快速更新的。虽然Google Android版本并没有与原生Linux内核版本保持一致,但它们是相对应的。Google Android从多个方面对原生Linux内核进行了改动与增强,例如:它基于ARM构架增加的Gold-Fish平台,以及 YAFFS2(Yet Another Flash File System,2nd edition)Flas件系统等[11],另外,Google Android还添加了自己特有的驱动程序。
BSP是用于初始化目标板硬件,给嵌入式操作系统提供板上硬件资源信息,并进一步装载、引导嵌入式操作系统运行的软件[12]。它介于底层硬件和上层软件之间,给上层提供统一接口,同时提供操作系统的驱动和硬件驱动,以及屏蔽各种硬件底层的差异,为操作系统提供了硬件平台无关性。厂商板级BSP可以分为2类:第1类是与硬件系统结构相关的部分;第2类是各种不同的驱动部分。
如图2所示,Android Linux内核源码目录已经考虑到了如何组织是否与架构相关的代码,arch目
录下存放的是与架构相关的代码,arch目录下的每个目录与一个CPU架构对应;与架构无关的代码则根据不同的功能,被存放在不同的目录下。
通过对Android Linux内核源码目录结构分析发现,对于组织结构下的原生Linux内核代码、Google Android驱动程序、厂商板硬件相关BSP代码,在Android Linux内核源码目录中这3个部分是整合到一块的,并且有的源代码既可以属于原生Linux内核部分也可以属于Google Android驱动程序部分,或者是有的源代码既可以属于原生Linux内核部分也可以属于厂商板硬件相关BSP部分。