面向S5PV210嵌入式平台的Android系统移植与优化的研究

2016-10-17 09:05莫太平周园园赵翔翔
电视技术 2016年9期
关键词:内核应用程序嵌入式

莫太平,周园园,赵翔翔

(桂林电子科技大学 电子工程与自动化学院,广西 桂林 541004)



面向S5PV210嵌入式平台的Android系统移植与优化的研究

莫太平,周园园,赵翔翔

(桂林电子科技大学 电子工程与自动化学院,广西 桂林541004)

针对Android系统的不依赖设备甚至平台的特质,结合目前工业控制领域对Android系统移植启动速度的需求,介绍了在S5PV210嵌入式平台上进行Android系统移植和优化的方法,通过实例具体阐述了内核和Android文件系统的移植过程,并在S5PV210平台上成功移植了Android系统,而且从启动服务、应用程序和预加载类等方面对Android系统进行了启动优化。实验数据证明,Android系统在S5PV210平台上的启动速度明显加快。

S5PV210嵌入式平台;Android系统;移植;优化

随着嵌入式开放平台的广泛应用,Android系统凭借系统自身所具备的代码开源、系统可移植、硬件丰富、兼容性好、性能优越及其用户界面友好等特点决定了其使用范围将不断扩大,并给移动互联网、工业控制、软件开发等行业带来新的机遇和挑战。一方面,将Android系统移植到嵌入式平台上的研究还处于初始阶段,又因嵌入式平台使开放性移植系统变得更加困难。另一方面,因Android系统底层是基于Linux内核的复杂的多层结构,启动过程就需要加载大量的资源,初始化Runtime就会占据大量时间,因此,启动速度异常缓慢,从而影响用户的体验,而且在工业控制领域这一现象变得更加明显。

S5PV210是Samsung推出的一款基于ARM Cortex-A8核心的应用处理器,采用ARM V7指令集,主频可达1 GHz,能够实现每秒两亿条指令集的高性能运算能力,适用于工控、通信、手持设备等领域,典型应用有监控设备、人机界面、视频电话及Pda等。Android系统能够在S5PV210平台上良好地运行,使其具备Android系统移植的硬件基础。又因Android系统提供了ARM的架构,移植到ARM上就具备了理论支持。

针对上述问题及S5PV210平台硬件环境的支持,本文主要研究在S5PV210平台上移植Android系统,并对Android系统的启动进行优化。

1 Android系统架构

Android系统是有Google公司推出的以移动互联网业务为主的智能终端平台,由Linux操作系统、中间件、用户界面及应用软件等部分组成。其Android系统核心架构从上到下分为4层:Linux Kernel,Library+Android Runtime,Application Framework,Applications,具体如图1所示。

1)Linux Kernel

Linux内核层,主要由内核及各种设备驱动组成。Android内核早期使用的是Linux 2.6,后来更新到Linux 3.0及其以上版本。Linux内核提供了系统的核心服务[1]:安全机制、网络堆栈、进程及内存管理等。Linux内核是一个抽象层,连接着硬件和软件,所以对于Android应用开发人员来说,要把主要精力放在软件实现上,而不用关心底层的具体细节。

图 1 Android系统架构

2)Android Runtime

Android运行时,由Dalvik虚拟机及Android核心库集组成[2]。Java语言的核心库所具有的功能,Android核心库集绝大部分都有提供,主要用于控制底层的设备和驱动,实现底层与上层的连接。Android 应用的运行由Dalvik虚拟机负责,每个应用对应一个Dalvik线程。不同于一般的JVM,Dalvik虚拟机运行专有的.dex文件,不但可以提高运行效率,而且在性能上又有所优化。另外,常规的JVM是基于栈的,而Dalvik虚拟机是基于寄存器实现的,这样的虚拟机在性能上会有更好的表现,比较适合应用在移动智能设备上。

3)Library

函数库,含有一套C/C++库集,能够被不同的组件使用。Android应用开发人员可以通过Application Framework来调用这套C/C++库集。其中的核心库主要有SQLite、系统C库、Surface Manager、媒体库、LibWebCore、SGL、3D library、Free Type等。

4)Application Framework

应用程序框架层,提供了大量的API,供Android应用开发者调用,如View、Button、TextView等UI组件。另外,应用程序框架层还提供了一系列的本地服务和Android系统服务。应用程序框架是应用程序开发的基础,该框架优化了组件的复用性,当按照框架的规定发布应用程序功能模块之后,其他的应用程序便可以调用此发布模块。

5)Applications

应用程序层,Android系统的许多核心应用程序分布在此层,如电子邮件、日历、地图、SMS、Web浏览器、联系人和开发者基于SDK开发的应用等。该层的应用程序是用Java编写的,运行于Dalvik虚拟机中。

通过详细分析Android的分层框架这一结构,才能使Android做系统移植的开发一目了然。同时,各层间的关联性很小,从而系统的稳定性及可移植性得到有效提高,维护修改所付出的代价相对较少。

2 Android内核移植

将一个实时内核运行在某个微处理器或微控制器上即是移植,将不同平台和不同编译环境的程序代码经过修改后转移到所需系统中运行的实现过程即为移植过程。本文是将Android系统移植到S5PV210 ARM平台上,使Android内核能够在S5PV210 ARM核心平台上运行起来。本文对Android内核进行移植需要做的工作主要有修改平台支持和驱动移植。其中,修改平台支持是根据具体的环境修改与硬件平台相关的内核源码,包括添加对ARM的支持,修改平台输入时钟和机器码。而驱动移植主要是Android系统必要的驱动移植,包括nandflash驱动、yaffs2文件系统以及Android专有驱动[3]。当然也可以根据具体需要另外移植一些需要的驱动,如LCD显示驱动、网卡驱动、触摸屏驱动等。

2.1添加对ARM的支持

只有让内核确定所选择的架构,Android系统才能使用正确的编译方式对内核进行编译。因此,需要在内核顶层Makefile中修改设置编译器(CROSS_COMPILE)和指定目标平台(ARCH):

ARCH?= arm

CROSS_COMPILE ? = arm-linux-

2.2修改平台输入时钟

平台输入时钟频率由时钟控制逻辑单元决定,不同硬件平台有不同的输入时钟。因此,Android内核源码中的时钟频率必需与S5PV210的工作频率一致。关于时钟频率的内核源码在Android内核/arch/arm/mach-s5pv210目录下的板级文件mach-smdk210中[4]。mach-smdk210是内核提供的,在其基础上修改即可。也可以参考mach-smdk210创建自己的板级文件,然后通过修改makefile和config配置选择自己的板级文件。因S5PV210使用的时钟为24 MHz,在smdkv210_map_io(void)函数里面设置s3c24XX_init_clocks(24000000)。

2.3修改机器码

在目标机上使用的bootloader中设定了机器码为3466。内核的机器码需要与bootloader中设置的机器码保持一致,否则开机启动时会提示“找不到CPU类型的错误”。内核中的机器码保存在/arch/arm/tools/mach-types文件中,并在/arch/arm/mach-s5pv210/mach-smdk210.c文件中通过代码MACHINE_START(SMDKV210,"SMDKV210")调用[5]。所以要在mach-types中找到关键字SMDKV210 所在那一行,然后将后面的机器码改成与bootloader对应的机器码。

2.4驱动移植

在Android内核中已经存在yaffs2文件系统和Android特有驱动[6],只需要在配置里选择即可[7]。yaffs2文件系统对应/fs/yaffs2文件夹,Android特有驱动(主要包括binder 驱动、log记录驱动、lowmem kill驱动等)在内核目录driver/staging/Android/下。

nandflash驱动已经集成到Android内核源码当中,以s5pv210-nand命名注册为平台驱动,对应文件为drivers/mtd/nand/s3c_nand.c。使用时需要添加硬件资源信息和分区信息,并在板级文件mach-smdk210将nandflash驱动注册为平台设备s3c_device_nand的平台驱动。首先,在smdk210_machine_init()函数中通过platform_add_devices()函数注册s3c_device_nand为平台设备。然后,在smdkv210_map_io()函数里设置s5pv210-nand为s3c_device_nand的平台驱动为s3c_device_nand.name = "s5pv210-nand"。这样在编译时,系统通过驱动名可以从设备驱动中找到对应的驱动。最后,在s3c_nand.c中的mtd_partitions3c_partition_info修改nandflash的分区信息。移植完成后,通过串口打印效果如图2所示。

图2 内核启动信息(截图)

3 Android文件系统的移植

Android文件系统移植通过编译文件系统和根文件系统影像制作两个步骤得到支持S5PV210的系统映像。

3.1文件系统编译

使用命令source build/envsetup.sh初始化环境变量。lunch命令可以列出平台编译选项,此时可以看到之前在定制文件系统时添加的选项并选择为当前编译项。Make开始执行编译,由于Android文件系统较大所以编译时间会较长。

3.2制作根文件系统影像

Android文件系统编译完成之后,会在/out/target/product/board_name/下生成ramdisk.img,system.img,userdata.img这3个镜像文件和root,system,data等文件夹。其中,ramdisk.img是根文件系统,system.img包括主要的包和库等文件,userdata.img为用户数据。而root,system,data这3个文件夹分别对应上述3个img解压之后的内容。在制作根文件系统方法是将system和data文件夹的内容复制到root文件夹里面的system和data目录下,然后进行打包。打包是使用mkyaffs2image-128M工具通过命令mkyaffs2image-128M./root root.img将root文件夹下的文件系统内容打包成root.img镜像。将root.img 镜像和内核镜像下载到S5PV210中就可以运行起Android系统了,效果如图3所示。

图3 系统运行效果(截图)

4 Android系统的启动优化

开机速度慢是智能系统普遍存在的一个问题,Android系统同样如此。Android系统在手机移动平台上使用的时候,由于手机开关机并不频繁,开机速度影响不大。但当Android系统要移植到其他非移动平台上时,由于其相对频繁的开关机频率,开机速度将成为影响用户体验的一个重要因素。所以此时对Android系统的启动是非常必要的。

整个系统的启动流程,包括Bootloader启动、内核启动,根文件系统启动3部分。其中,从Bootloader启动到内核完全启动只用2~4 s,没有太大优化空间。文件系统启动是整个启动过程占时最长的阶段,包括启动服务、预加载类和扫描应用程序包等环节。

本文从启动服务、预加载类、应用程序3方面对Android系进行启动优化,以求达到理想的优化效果。

4.1裁剪启动服务

Android系统的服务包括本地服务和Android系统服务两部分。这些服务多种多样,但并不是所有的服务对于系统的运行都至关重要。在不同硬件环境下,Android系统对于服务的需求也将不同。这些服务将在系统运行时占用大量资源,增加启动时间。因此,针对不同的应用环境需要根据需求裁剪服务。

本地服务是通过init解析执行init.rc脚本启动的[8]。Init.rc文件中有调用本地服务的命令,init通过这些命令启动对应的服务。因此,要对本地服务进行裁剪,只需要将调用服务的命令注释掉或删除即可。具体方法是在/system/core/rootdir目录下找到init.rc,在文件中找到service开始的程序段,注释掉或删除要裁剪的服务对应的程序段。

Android系统服务运行在systemserver进程中,通过SystemServer.java中的ServiceManager.addService()方法添加,将/frameworks/base/services/java/com/android/server/SystemServer.java中添加服务的程序段注释掉或删除就可以达到裁剪Android系统服务的目的。

本地服务中Android系统必不可少的关键服务有5个,包括Zygote,servicemannager,media,vold和neted。只要保留这5个服务就能顺利启动Android系统。而Android系统服务对系统服务的应用性较强,要保留较多服务。

4.2应用程序裁剪

系统启动时,Package Manager服务会解析(/system/framework,/system/app,/data/app,/data/app-private)这4个文件夹中所有的应用程序apk包来获取需要启动的应用程序表。而无用的应用程序apk包将会增加Package Manager服务的扫描时间,使系统启动变慢。

应用程序的功能明确,关联相对较少,所以其裁剪方法也比较简单:删除镜像中应用程序的apk包。本文中保留Launcher2.apk和SettingsProvider.apk两个应用即可。Launcher2.apk用于提供用户界面,保证系统能进入用户待机状态。SettingsProvider.apk是对Android系统进行设定的应用程序,它通过调用系统服务来完成Android各种状态的设置。若没有这个应用程序,将会缺少用户对系统的控制。

4.3裁剪预加载类

预加载类是Android系统启动中耗时最多的环节之一,在Zygote服务启动过程中通过preloadClasses()读取/frameworks/base/preloaded-classes文件中的预加载列表来实现。其目的是通过预加载应用程序启动需要的类来提高应用程序的启动速度。但Android系统中预加载类多达一千多个,需要消耗过多的时间。预加载类分为两种类型,一种是Android相关的类,另一种是Java基础类。而Android相关的类是构建在Java基础类之上的。预加载类的优化方法是将Android相关的类全部去掉,只留下Java基础类。这样增加了Android系统的启动速度,同时对应用程序启动影响也不大。

5 测试运行

在S5PV210 ARM平台上对启动优化方案进行运行和测试,完成Android系统移植与优化后系统运行效果如图4所示。并通过表1列出同正常流程启动的数据进行对比分析,发现优化后系统启动时间从原来的平均42.04 s减少到了22.6 s。启动优化后,Android系统启动速度明显加快,优化效果明显。

图4 系统运行效果(截图)

s

分类12345平均优化前42.641.742.341.642.042.04优化后22.922.622.322.722.522.6

6 小结

Android系统的开放性决定了Android系统要运行在不同的硬件平台上,使得掌握Android系统的移植成为开发的基础。另外,Android系统启动时间过长严重影响了用户体验。根据这一研究背景,结合工业控制领域的应用需求,本文主要研究了在S5PV210平台上移植Android系统,并对Android系统进行启动优化,通过实验数据分析,得出S5PV210平台上运行的Android系统启动时间得以优化。

[1]宋小倩,周东升.基于Android平台的应用开发研究[J].软件导刊,2011(2):104-106.

[2]吴昊,张哲.基于国产自主CPU的SEP0611平台中Dalvik虚拟机的移植和优化[J].电子器件,2012(3):322-

326.

[3]仲元昌,王靖欣,胡江坤,等.Android内核移植及远程监控中的应用[J].重庆理工大学学报(自然科学),2011,25(1):102-106.

[4]邵艳杰.Android操作系统移植及应用研究[D].长沙:湖南大学,2011.

[5]柯元旦.Android内核剖析[M].北京:电子工业出版社,2011.

[6]郭甲.基于数字电视平台的Android定制与优化[D].成都:电子科技大学,2012.

[7]MA W F,WANG J H. Analysis of the Linux 2.6 kernel scheduler[C]//Proc. International Conference on Computer Design and Applications(ICCDA 2010). Qinhuangdao:[s.n.],2010:71-74.

[8]希凡.Android关键服务分析与启动过程优化[D]. 成都:电子科技大学,2012.

莫太平(1974— ),硕士生导师,副教授,主要研究方向为智能控制与模式识别、嵌入式系统及现场总线等;

周园园(1988— ),女,硕士生,主研智能信息处理;

赵翔翔(1991— ),硕士生,主研嵌入式软件开发。

责任编辑:许盈

Research of transplantation and optimization of Android system based on S5PV210 embedded platform

MO Taiping, ZHOU Yuanyuan, ZHAO Xiangxiang

(SchoolofElectronicEngneeringandAutomation,GuilinUniversityofElectrnicandTechnology,GuangxiGuilin541004,China)

For the characteristic that Android system is not dependent on equipment and even platform, the method of Android transplantation and optimization on embedded platform S5PV210 is introduced in this paper by combining the need for Android system transplantation boot speed at present in the field of the industrial control. Some specific examples are used to describe the transplantation process of kernel and Android file system, and then the Android system is ported to the platform S5PV210 successful. Besides, the method does startup optimization in startup services, application, pre-loaded class etc. on Android system. The experimental data show that the startup speed of the Android system on the S5PV210 platform is significantly accelerated.

S5PV210 embedded platform; Android system; optimization; transplantation

TP393

A

10.16280/j.videoe.2016.09.009

国家自然科学基金项目(61263013);广西教育厅重大项目(201101ZD007);广西信息科学实验中心重大项目(20130110);桂林电子科技大学研究生教育创新计划资助项目(GDYCSZ201475);桂林电子科技大学研究生教育创新计划资助项目(GDYCSZ201477)

2016-02-23

文献引用格式:莫太平,周园园,赵翔翔. 面向S5PV210嵌入式平台的Android系统移植与优化的研究[J].电视技术,2016,40(9):46-50.

MO T P,ZHOU Y Y,ZHAO X X. Research of transplantation and optimization of Android system based on S5PV210 embedded platform [J].Video engineering,2016,40(9):46-50.

猜你喜欢
内核应用程序嵌入式
多内核操作系统综述①
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
删除Win10中自带的应用程序
TS系列红外传感器在嵌入式控制系统中的应用
Linux内核mmap保护机制研究
谷歌禁止加密货币应用程序
搭建基于Qt的嵌入式开发平台
倍福 CX8091嵌入式控制器