基于Android的BSP移植自动适配技术
2014-06-07杨海民
杨海民,张 涛,赵 敏,尤 峻,董 民
(解放军理工大学a.指挥信息系统学院;b.通信工程学院,南京210007)
基于Android的BSP移植自动适配技术
杨海民a,张 涛a,赵 敏a,尤 峻a,董 民b
(解放军理工大学a.指挥信息系统学院;b.通信工程学院,南京210007)
当前Android的板级支持包(BSP)移植开发人员不仅需要熟悉具体型号芯片的开发手册,还需要调整部分驱动封装代码,工作效率较低。为此,通过对Android Linux内核源代码进行重构,设计并实现一种基于源代码分类管理的Andriod BSP移植管理框架。形式化定义Android Linux内核源码重构规则,基于该规则对Android Linux内核源码按照原生Linux内核代码、Google Android驱动程序、厂商板硬件相关BSP代码3类进行管理,设计Android BSP移植自动适配工具,实现面向特定开发板和特定Linux内核版本的Android Linux内核源代码自动生成。测试结果表明,该管理框架能够提高BSP移植开发人员移植和升级开发板Android Linux内核的工作效率。
Linux内核;Android Linux内核源码;组织结构;重构;板级支持包移植;自动适配技术
1 概述
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移植的难度和工作量。
2 相关工作与研究现状
近年来,随着以智能手机和平板电脑为代表的移动互联网产业的迅猛发展,支撑智能移动设备开发的关键技术——嵌入式系统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提供了开放的源码,但其没有提供完善的开发文档支持,另外体系结构的层次划分、代码之间的关联,以及各种实现之间的注册和调用关系等缺乏指导性文档。
3 Android Linux内核源码组织结构分析
如图1所示,Android Linux内核源码组织结构主要包括3个部分:原生 Linux内核代码,Google Android驱动程序,厂商板硬件相关BSP代码。
图1 Android Linux内核源码组织结构
原生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)Flash文件系统等[11],另外,Google Android还添加了自己特有的驱动程序。
BSP是用于初始化目标板硬件,给嵌入式操作系统提供板上硬件资源信息,并进一步装载、引导嵌入式操作系统运行的软件[12]。它介于底层硬件和上层软件之间,给上层提供统一接口,同时提供操作系统的驱动和硬件驱动,以及屏蔽各种硬件底层的差异,为操作系统提供了硬件平台无关性。厂商板级BSP可以分为2类:第1类是与硬件系统结构相关的部分;第2类是各种不同的驱动部分。
4 Android Linux内核源码重构规则
如图2所示,Android Linux内核源码目录已经考虑到了如何组织是否与架构相关的代码,arch目录下存放的是与架构相关的代码,arch目录下的每个目录与一个CPU架构对应;与架构无关的代码则根据不同的功能,被存放在不同的目录下。
图2 Android Linux内核源码目录
通过对Android Linux内核源码目录结构分析发现,对于组织结构下的原生Linux内核代码、Google Android驱动程序、厂商板硬件相关BSP代码,在Android Linux内核源码目录中这3个部分是整合到一块的,并且有的源代码既可以属于原生Linux内核部分也可以属于Google Android驱动程序部分,或者是有的源代码既可以属于原生Linux内核部分也可以属于厂商板硬件相关BSP部分。
Android Linux内核源码组织结构的重构过程见图3。为提高Android Linux中现有源码的重用度,笔者希望得到如该图中右图所示的Android Linux内核源码组织结构。为此,定义了一套重构规则:假设重构前后的原生Linux内核代码、Google Android驱动程序、厂商板硬件相关BSP代码分别用集合L,L′,A,A′,B,B′表示。
图3 Android Linux内核源码组织结构的重构
规则1 (L-L∩A-L∩B)⊆L′,即重构后的原生Linux内核代码不包含属于Google Android驱动程序和厂商板硬件相关BSP代码部分。
规则2 (A-L∩A-A∩B)⊆A′,即Google Android添加的驱动属于Google Android驱动程序部分。
规则3 (B-L∩B-A∩B)⊆B′,即厂商添加的BSP属于厂商板硬件相关BSP代码部分。
规则4 (L∩A-A∩B)⊆A′,即如果Google Android修改了原生Linux内核代码,那么整个修改的文件属于Google Android驱动程序部分。
规则5L∩B⊆B′,即如果厂商修改了原生Linux内核代码,那么整个修改的文件属于厂商板硬件相关BSP代码部分。
规则6A∩B⊆B′,即与厂商开发板使用的芯片相关的驱动部分属于厂商板硬件相关BSP代码部分。
5 BSP移植自动适配技术及实现
5.1 重构后的Android Linux内核源码结构
利用重构规则,通过Google Android提供内核与未经过Google Android改动过的Linux内核进行比较,就可以得到属于Google Android设备驱动程序部分的内容。另外通过根据各个不同驱动的架构,结合厂商给出的各个板子的使用说明、相关代码以及相关的芯片使用手册,找出与硬件相关的部分,这部分内容就属于厂商板硬件相关BSP部分。当然,目前这样的工作还只能通过手工完成。重构后的Android Linux内核源码结构如图4所示。
图4 重构后的Android Linux内核源码结构
Config.xml描述了Linux版本适配的Google Android内核的版本,当版本适配时核心的代码不需要调整,只需调整部分驱动封装的代码。Config.xml代码如下:
Board.xml描述了厂商板硬件相关BSP代码的信息,包括板子提供商、CPU架构类型、BSP version和支持的Linux版本列表等基本信息,还包括与架构相关的Arch文件信息和与驱动相关的Driver文件信息,Board.xml中Driver结构与Arch结构大体相同。Arch结构中包含了与Linux版本差异相关的文件和没有版本差异的文件,Driver结构按<Section>标签分类展开,每个<Section>标签下包含与Linux版本差异相关的文件和没有版本差异的文件。Board.xml中的Arch结构如下:
5.2 实现过程
BSP移植管理工具根据重构后的Android Linux内核源码结构对原生Linux内核代码、Google Android驱动程序、厂商板硬件相关BSP代码进行分类管理。工具可以实现按功能对厂商板硬件相关BSP代码相关文件进行浏览,如果需要增加新的开发板,在确定Linux内核版本的基础上只需要对Google Android驱动程序和厂商板硬件相关BSP代码目录下的与Linux内核版本差异相关的文件做出相应的修改。在面向特定开发板和特定Linux内核版本时,其具体流程如图5所示。
图5 BSP移植自动适配技术的实现流程
6 测试与评价
6.1 测试环境设置
本文使用上文设计并实现的Android BSP移植自动适配工具对Samsung Real6410嵌入式开发板的Android Linux内核由2.6.28升级到2.6.36,从而验证了本文提出的框架以及设计的自动适配工具的有效性。在本文的测试实验中,BSP移植自动适配工具采用Java SWT技术开发,运行在Ubuntu10.04操作系统上。
6.2 测试实施与结果评价
本文在进行Real6410嵌入式开发板Android Linux内核源码升级的BSP移植自动适配主要采用了如下的步骤(图6所示是实验过程中驱动参数设定界面截图):
(1)开发板原始Linux内核源码分类和重构:该型号开发板厂商提供的Linux内核源码为2.6.28,首先需要使用本文提出的规则对其代码进行分类和重构,拆分成原生Linux内核代码、Google Android驱动程序、厂商板硬件相关BSP代码。
(2)开发板原始Linux内核源码XML描述文件生成:使用本文定义的规则生成对该型号开发板可以适配的Linux内核版本描述的config.xml文件和对重构后的厂商BSP代码结构描述的Board.xml文件。
(3)Linux内核升级中的BSP移植自动适配:使用本文开发的BSP移植自动适配工具进行开发板Linux内核源代码升级。首先选定目标升级内核版本,其次指定目标Linux内核源代码存放目录,工具会自动配置xml文件并生成目标内核源码。
(4)新的Linux内核源码编译并烧写开发板:对生成的目标Linux内核源码进行交叉编译,并烧写到开发板进行测试。
图6 驱动参数定义
通过上述的测试验证实验可以看出,与目前学术界和工业界所普遍采用的移动设备Linux内核的BSP移植适配方法相比,本文所提出的移植框架和工具可简化Linux内核的BSP移植适配工作流程,可大幅提高BSP移植适配的工作效率。
7 结束语
本文设计并实现一种基于源代码分类管理的Andriod BSP移植管理框架,一定程度上解决了Linux未提供完善开发文档支持和Linux体系结构的层次划分、代码之间的关联,以及各种实现之间的注册和调用关系等缺乏指导性文档问题。测试结果表明,本文设计的框架和工具可有效提高BSP移植开发人员移植和升级开发板Android Linux内核的工作效率。下一步将研究如何减少Android Linux内核源码重构的工作量。
[1] Google.Android Home Page[EB/OL].[2013-11-10].http://www.android.com.
[2] O'Nils M,Jantseh A.Device Driver and DMA Controller Synthesis from HW/SW Communication Protocol Specifications[J].Design Automation for Embedded Systems, 2001,6(2):177-205.
[3] Wang Shaojie,Malik S,Bergamaschi R A.Modeling and Integration of Peripheral Devices in Embedded Systems[C]//Proceedings of Conference on Design,Automation and Test in Europe.Munich,Germany:IEEE Press,2003: 136-141.
[4] 隋 霞,许录平.基于VxWorks的BSP技术分析[J].微计算机信息,2006,22(8-2):86-88.
[5] 李 永,孙士明,王爱国.VxWorks操作系统在OMAP平台上的移植[J].微计算机应用,2010,31(8):50-59.
[6] 陈学兵,沈毅南,张振华.VxWorks5.5在龙芯2号处理器的移植和性能分析[J].计算机测量与控制, 2012,20(9):2542-2545.
[7] 库少平,方 俊.基于S3C2410的Windows CE 5.0 BSP移植[J].微计算机信息,2008,24(2-2):116-118.
[8] 韩德强,刘立哲,刘 涛,等.基于 OMAP3530的Windows Embedded Compact 7 BSP的开发与移植[J].电子技术应用,2012,38(2):14-17.
[9] 丁晓波.基于嵌入式Linux系统的BSP技术研究[D].成都:电子科技大学,2004.
[10] 康涌泉.嵌入式LINUX开发平台BSP技术的研究与实现[D].成都:电子科技大学,2006.
[11] 杨丰盛.Android技术内幕·系统卷[M].北京:机械工业出版社,2011.
[12] Yaghmour K.Building Embedded Linux System[M].[S.l.]:O'Reilly Press,2003.
编辑 金胡考
BSP Transplantation Automatically Adapting Technology Based on Android
YANG Haimina,ZHANG Taoa,ZHAO Mina,YOU Juna,DONG Minb
(a.Institute of Command Information System;b.Institute of Communication Engineering, PLA University of Science and Technology,Nanjing 210007,China)
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.
Linux kernel;Android Linux kernel source code;organizational structure;reconstruction;Board Support Package(BSP)transplantation;automatically adapting technology
1000-3428(2014)11-0245-05
A
TP302
10.3969/j.issn.1000-3428.2014.11.049
国家科技重大专项基金资助项目“新一代宽带无线移动通信网”(2011ZX03006-003)。
杨海民(1990-),男,硕士研究生,主研方向:嵌入式系统,信息安全;张 涛,教授;赵 敏、尤 峻、董 民,讲师。
2013-10-28
2013-12-29E-mail:15150598706@163.com
中文引用格式:杨海民,张 涛,赵 敏,等.基于Android的BSP移植自动适配技术[J].计算机工程,2014, 40(11):245-249.
英文引用格式:Yang Haimin,Zhang Tao,Zhao Min,et al.BSP Transplantation Automatically Adapting Technology Based on Android[J].Computer Engineering,2014,40(11):245-249.