2023年6月28日发(作者:)
70 2012,48(22) ComputerEngineeringandApplications计算机工程与应用 面向龙芯平台的Android系统移植研究 雷 鸣 ,靳 婷 ,徐晓亮 ,齐 锦 LEI Ming ,JIN Ting ,XU Xiaoliang ,QI Jin2 1.中国电子科技集团公司第十五研究所军用中间件研发中心,北京100083 2.中国人民解放军总参谋部第六十一研究所,北京100141 1.Military Middleware R&D Center,No.1 5 Research Institute of China Electronics Technology Group Corporation, Beijing 1 00083,China 2.No.61 Research Institute,Headquarters ofthe General Staffofthe PLA,Beijing 100141,China LEI Ming,JIN Ting,XU Xiaofiang,et a1.Research and transplant Android OS based on Loongson2F.Com- puter Engineering and Applications,2012,48(22):70-73. Abstract:Based on the analysis of architecture of android and Loongson—based platforln。some key techniques of porting Android system are studied.The Android source code has been modiifed according to the architecture and property of Loongson,then an Android Gingerbread system for Loongson—based is implemented.The performance of the optimized Dalvik virtual machine of the system iS tested and verified.This work iS valuable to other Android version transplant to Loongson—based platfo1"1/1. Key words:Android;Loongson2F;transplnt;viartual machine;file system 摘要:在分析Android系统与龙芯平台架构的基础上,针对软硬件适配、虚拟机优化、编译器移植等关键技术 进行了深入研究。在充分保持龙芯处理器性能的基础上,对Android系统源码进行了优化修改,实现了在龙芯 平台完整运行Android Gingerbread系统,同时对移植系统中的Dalvik虚拟机的性能优化进行了测试验证。为 其他版本Android系统在面向龙芯平台的移植方面提供了重要参考,具有很大应用价值。 关键词:Android系统;龙芯2F;移植;虚拟机;文件系统 文章编号:1002.8331(2012)22—0070 04 文献标识码:A 中图分类号:TP391.4 1 引言 龙芯处理器作为一款基于MIPS指令集、我国自 主研发具有完全自主知识产权的中央处理器,具有 低功耗、低成本等特点,在嵌入式、工业控制等领域 有着非常广阔的应用前景。Android是Google于 2007年11月5日发布的基于Linux平台的开源操作 系统,是首个为移动终端打造的真正开放和完整的 器在嵌入式系统领域的一个研究方向,对信息产业 国产化发展具有重要的工程应用价值和意义。 2 Android系统架构 Android平台的系统架构主要包括Linux内核、 硬件抽象层(包括系统运行库与Android运行环境)、 应用程序框架、应用程序组成。图1列出了操作系统 的主要组成部分。 Android运行于Linux内核之上,但不同于其他 发行版本的Linux系统。因为一般发行版Linux系统 移动操作系统。作为一个开源的系统,Android不存 在以往阻碍移动产业创新的专有权障碍,因此,向龙 芯平台上移植Android操作系统将会成为龙芯处理 基金项目:核高基科技重大专项(No.2010ZX01041.001—001—002)。 作者简介:雷鸣(198O一),男,工程师,主要研究领域为移动计算、系统集成;靳婷(1981一),女,工程师,主要研究领域为移动计算 与中间件技术;徐晓亮(1985一),男,助理工程师,主要研究领域为嵌入式系统架构与应用;齐锦(197l一),女,高级工 程师,主要研究领域为计算机网络设计、网络多媒体技术。 收稿日期:2012.03.16 修回日期:2012.04.27 DOI:10.3778/j.issn.1002—8331.2012.22.015 雷鸣,靳婷,徐晓亮,等:面向龙芯平台 Android统移植研究 APPLICAT10NS (H。ME (_c。ntacts (PH。NE (BR。wsER)( …… ) APPLICATION FRAMEW0RK Active Manager ̄j@indow Manag;I 砌 (… em (N “) 妇 觚鹋 (TMele ph ony 。… cation Manag ̄er@IPP Servic ̄ LIBR ARIES ANDROID RU TIME Man F Core Librarie (。…s (= Type)(WebKit一) \、Dalv i竺k!Vi rl u—al ̄/ sGL ssL Libc LINUX KERNEL isplay Drive (c锄era。 e ∈・ueto。m。 ≥ hsh M em。rY)(Bin2dr ̄PIC)) USB D Keypad Drivor)(WiFi…r Qgadiooriv (M ) 图1 Android系统框架图 所包含的功能,Andr0id大都没有提供支持,例 ̄[ICairo、 程序,包括Email客户端,浏览器,日历,地图等,程序 X11、Alsa、FFmpeg、GTK、Pango及Glibc等在Android 可通过JNI调用硬件抽象层来实现对硬件的操作。 系统中都被移除掉了。Android又以bionic取代Glibc、 以Skia取代Cairo、再以opencore取代FFrnpeg等等。 3龙芯平台 Android的Linux内核实现了包括安全、存储器管理、 龙芯2F处理器是一款64位MIPS III指令集的 程序管理、网络堆栈、驱动程序模型等模块n 。 通用RISC处理器。龙芯2F的指令流水线每个时钟 nAdroid系统架构采用了分层的设计方法,在 周期取四条指令进行译码,并且动态地发射到五个 Linux内核之上包括硬件抽象层、应用程序框架和应 全流水的功能部件中。虽然指令在保证依赖关系的 用层,每一层为上层提供统一服务,以屏蔽各层之间 前提下进行乱序执行,但是指令的提交还是按照程 的差异,保证本层及以下层发生了变化不会影响到 序原来的顺序,以保证中断和访存顺序执行 。 上层口 。各层所包含的内容及具体职责如下: 四发射的超标量结构使得指令流水线中指令和 (1)硬件抽象层是为了将应用层与内核分开,降 数据相关问题十分突出,龙芯2F采用乱序执行技术 低对Linux内核的依赖。其中,Google开发—个支持 和激进的存储系统设计来提高流水线的效率 。 Java语法的虚拟机:Dalvik,其特点是基于寄存器结 龙梦逸珑8089B笔记本采用龙芯2F处理器,运 构,而Sun Java虚拟机是基于堆栈结构,因此Dalvik 行Linux发行版操作系统,具有完全的国产自主化产 虚拟机可以针对特定平台做最优化处理,这也是针 权。本文是在龙梦逸珑笔记本上移植Android2-3代 对嵌入式系统所做的设计。 号Gingerbread。表1为龙梦逸珑笔记本配置隋况。 (2)应用程序框架提供了调用系统内部核心程 MIPS公司目前已经移植Android到部分MIPS 序的管理程序。 平台和QEMU上面,并且!免费提供源码。这些源码 (3)应用层由Java实现,包括了一系列核心应用 对移植工作有非常好的参考意义。 72 2012,48(22) ComputerEngineering andApplications算机工程与应用 表1龙梦逸珑8089B配置 名称 型号 处理器 L00ngson2F(900 MHZ/5l2 KB二级缓存) 芯片组 AMD CS5536南桥(CPU集成内存控制器) 内存 1 GB【1 GBX1/DDR2.667 MHz) 硬盘 160 GB(2.5英寸/5 400 r/min) 显卡 Silicon Morion SM712 显示屏 8.9英寸(LED背光/i 024x600) 网络 100 MHz Ethernet(RJ45) USB USB2.0X3 重量 1.23 体积尺寸 (255Xl88 ̄250)mln 电池 l1.1 v/2 200mAh 4系统移植 4.1建立交叉编译环境 编译工作是在Ubuntu10.04(32位)下进行,使用 jdk1.6。 MIPS提供的代码中自带了编译的工具链,但其 中gcc自带的libgcc.a是针对MIPS32R2架构CPU编 译的,当gcc配置编译选项为_march=mips3.S ̄.march= loongson2f时,会发生链接错误,因为龙芯与MIPS32R2 是互不兼容的架构。Android的工具链是针对bionic libc定制的,MIPS放出了Android的源码,但其中交 叉编译工具链是被封装过的,无法进行修改,因此无 法针对龙芯平台重建这个工具链。 工具链制作脚本crosstoo1.ng可以较为简化地制 作龙芯可用的通用标准工具链。用制作好的libgcc.a 与libgcc eh.a替换掉AndroidZE具链里面的相应库文 件,组合出—个可用的龙芯Andr0id交叉编译工具链。 4.2 Linux内核移植 Android的内核位于android.git.kerne1.org上,目 前较稳定版本是2.6.35.7t 。Linux内核版本已经包含 了龙芯相关的支持代码,进而自动地被Google收纳 进了Android内核中。这意味着Android内核默认支 持龙芯,只需适当配置即可。但特别需要说明的是, 虽然龙芯支持64位内核版本,并且在32位下最多只 能访问512M内存,但是由于Google给Android增加 的驱动都从未在64位模式下调试过,为了避免不必 要的兼容性问题,内核编译选择32位版本。龙芯的 CPU核心只支持16K的页表大小,跟通常系统4K不 符,因此编译内核选项应设置页表大小为16K。在 General Setup里面,勾选Enable the Anonymous Shared Memory Subsystem,否则Android在启动时 会使zygote进程无法启动导致启动失败。 4.3 Android文件系统移植 文件系统源码是针对MIPS32R2架构进行设计, 其中含有MIPS IV和MIPS V中的32位指令,对于 只支持到MIPS III的龙芯,使用原始的文件系统会 遇到大量的非法指令。因此,移植Android ̄1]龙芯平 台,需要对文件系统源代码进行修改以适配MIPS III 指令集。 Android文件系统代码目录主要包括三个部分: 系统库与Dalvik虚拟机(硬件抽象层),应用程序框 架、应用程序。文件系统目录结构如下所示: Makeifle(全局的编译脚本);bionic(基础库代 码);bootable(引导与恢复程序);build(编译和配置 脚本);Dalvik(JAVA虚拟机);development(程序开发 所需要的模拟器和工具);external(系统外部库); frameworks(应用程序框架);hardware(与硬件平台 相关的库);packages(应用程序);prebuilt(Android编 译工具链);system(Android系统库)。其中应用程序 使用java语言进行设计,不需要进行修改,对Android 文件系统的移植主要就是对系统库与Dalvik虚拟机、 应用程序框架的移植。 (1)因Dalvik是基于寄存器的虚拟机,可以针对 平台进行优化,实现方式包括优化的基于汇编码方 式以及通用的基于c语言方式。为了不损失性能,移 植选择基于平台优化的汇编码方式实现方式。Dalvik 虚拟机的解释器实现代码中出现了多处MIPS IV和 MIPS V的汇编指令。主要包括:movn、movz、mul、 pref,需要将它们替换为龙芯平台(MIPS III)兼容指令。 movn:表示如果第三个寄存器的内容为负,那么 复制一个寄存器的内容到另外一个寄存器。替换为 beqz ̄1]零条件转移指令与move移动指令。 movz:表示如果第三个寄存器的内容为0,那么 复制一个寄存器的内容到另外一个寄存器。替换为 bnez非零条件转移指令与move移动指令。 mul:表示第1个寄存器获得另外两个寄存器相 乘的结果。替换为mult乘法指令与mflo移动指令。 pref:数据预存缓存指令。去掉数据预存缓存指令。 (2)修改页表大小为16K,与内核中设置的一致。 Android代码默认为4K,共有两处。一处为bionic(基 础库代码)中定义,修改公式为:页表大小=2剧GElfHIFT。一 处为Dalvik虚拟机代码中定义,SYSTEM PAGE SIZE修改为16 384(16K)。 (3)应用程序框架中的libAGL里面的汇编代码 用到了大量龙芯平台不支持的乘加指令。修改其判 断指令,使只在非龙芯CPU编译时才使用汇编,强制 雷鸣。靳婷,徐晓亮,等:面向龙芯平台的Android系统移植研究 在对龙芯平台编译时使用c代码来实现。 (4)修改架构与位宽为32位MIPSIII。龙芯作为 MIPS III架构处理器,兼容64位与32位,由于编译环 境是全32位的。按照这个逻辑,若位宽设置为64 位,则在运行时会出现位对齐错误。 (5)新建编译脚本l00ngson2 F.mk,用以配置GCC 编译的选项,包括指定架构为MIPS III,设置编译使 用硬浮点,小端编译等。 (6)Android Gingerbread系统默认要求需在64 classloader( ̄i]试Java ̄JJH载器 l 皂),veriifcation.error (异常捕获处理)。分别测试c语言版本解释器和汇 编语言版本解释器的Dalvik ̄E龙芯2F上执行测试程 序所需要的时间,并对比测量结果。测试环境为:龙 梦逸珑笔记本(处理器:龙芯2F;主频:800 MHz);系 统:Android2.3.3;内核版本:2.6.35.7。测试用例来自 Android文件系统中提供的Dalvik虚拟机测试程序。 测试数据如图3一图6所示。表2为测试用例运行时 间统计。 位环境下进行交叉编译,由于编译环境是全32位,并 且Linux内核编译为32位版本,因此修改Android源 码编译环境要求为32位。 至此,对于Android文件系统的修改已经完成, 使用前文制作的龙芯Android交叉编译工具链进行 编译,生成Android Gingerbread龙芯可用的文件系 统。Android Gingerbread在龙梦逸珑上运行的效果 如图2所示。 图2 Android运行效果 5虚拟机性能验证测试 针对Android系统在龙芯平台的移植,主要是在 Dalvik虚拟机方面根据龙芯平台做了优化。为了验 证移植Android ̄1]龙芯平台的实际应用效果,实验对 Dalvik虚拟机进行测试分析,说明移植的性能。 测试选择四种较典型的测试用例omnibus.opcodes (测试优化性能),many interfaces( ̄i]试CPU负载), 60 g 5O m 罾40 3o _1-—rl i-一 ; 20 l 执行次序 图3 omnibus—opcodes运行时间对比 75 一——曼萋言誊 l 螽 簸7 八 Il:=:!E 至宣塞 l 执行次序 图5 classloader运行时问对比 表2两种版本Da1Vik虚拟机执行情况 ms 从结果可以得出,使用针对龙芯平台优化的汇 编语言版本Dalvik虚拟机在性能方面要优于使用c 语言版本的虚拟机。但系统整体的运行效果相比于 目前市场中主流的产品芯片还存在着比较大的差 距。例如相比主频为1 GHz的ARM Cortex—A8处理 器,龙芯2F主频只能稳定运行于500 MHz左右,并且 由于采用Jazelle.RCT JavaJJl ̄逮技术,ARM Cortex—A8 对实时(JIT)和动态调适编译(DAC)提供最优化【61, 而龙芯平台Dalvik虚拟机调用C/C++方法的模块是 依靠FFI库实现的。所以龙芯平台Dalvik虚拟机还 有着较大的性能提升空间,:这也是后续阶段面临解 决的问题。 执行次序 图4 many.interfaces运行时间对比 壹2兽 1.0.5 萑1.0 执行次序 图6 veriifcation.en.0r运行时间对比 (—F转87页) ∞m/厦莒 张学智,齐记,林平:拉普拉斯生长的GPU实现与硬件加速 莒 暖 琳 士 计算点数/个xl0 计算点数/个 ×10 (a)计算点数为环境1/8时计算用时(圆点为GPU) (b)计算点数为环境1/32时计算用时(圆点为GPU) 图4不同环境尺寸时点数与运算时间的关系 并行化的程序很好地模拟拉普拉斯生长的情况,模 拟的结果逐渐趋近于理论预测给出的分形维数,如 何并行化程序解决并行冲突的问题是GPU模拟随机 生长中需要优化的核心问题。其次,GPU对拉普拉 斯生长的模拟由于并行化机制对于模型的计算进行 了非常有效的加速,在模型很小时GPU运算中的通 讯延迟会导致GPU的计算用时大于CPU的用时,但 [2]Witten T A,Sander L M.Difusion—limited aggregation,a kinetic cirtical phenomenon[J].Physical Review Letters, 1981,47(19). [3]Witten T A,Sander L M.Dit ̄asion-limited aggregation[J]. Physical Review B,1983,27(9). [4]科克,胡文美.大规模并行处理器编程实战[M].陈曙辉,熊 淑华,译 匕京:清华大学出版社,2010. 是随着尺寸的增大,GPU的程序优势逐渐显现,随着 运算时间对于计算模型尺寸的三次方以上的增长关 系,在大尺度时GPU程序的优势将非常明显。 研究得到中国科学院近代物理研究所超算中心 的大力支持,在此表示感谢。 [5]白洪涛.基于GPU的高性能并行算法研究[D].长春:吉林 大学,2010. [6]吴小霞.GPU高性能计算技术在晶格玻尔兹曼方法模拟中 的应用[D】.南宁:广西师范 学,2011. [7]张庆丹.基于GPU的串匹配算法的实现[D].北京:中国科 学院研究生院(计算技术研究所),2006. 参考文献: 【1】Pearson K.The problem of the random walk[J].Nature, [8]Lavenda B H.Brownin motaion[J].Scientiifc Americn,a 1985。252(2). (上接73页) 参考文献: [1]Google Inc.Android Anatomy and Physiology[EB/OL].(2010) http://code.google.com/android/Documentation.htm1. 6结束语 本文的主要工作旨在基于龙芯2F平台,根据 处理器的架构特点,在充分利用龙芯平台架构的基 础上,对Android源码进行了优化修改,实现嵌入式 操作系统Android Gingerbread的移植。本文的创 新点就是在于填补了龙芯处理器平台对嵌入式操 作系统Android支持的空白,并对其他版本Android 操作系统在面向龙芯平台的移植方面提供了参考 与应用。 [2]Google Inc.A beginner’S guide to android[EB/0L] (2010-05).http://code.google.corn/ndroiad/Documentation.htm1. [3中国科学院计算技术研究所.3]龙芯2F用户手册[R]冲国科 学院计算技术研究所,2006. [4】丰大强.基于龙芯平台的Windows CE的移植与优化[D]. 北京:中国石油大学,2009. [5]Berndl M,Vitale B,Zaleski M,et a1.Context threading: a flexible and eficifent dispatch technique for virtual 虽然目前Android Gingerbread在龙芯平台上运 machine interpreters[C]//Proceedings of the intenatrional symposium on Code generation and optimization,2005, 3:15-26. 行的效果在速度方面还未达到应用产品的水平,但 相信随着龙芯后续高性能处理器的推出,Android在 龙芯上的产业化指日可待。 [6]吴少刚,邹国民.Dalvik虚拟机在龙芯平台上的研究与移 植[J].计算机工程,2011,37:16):1-4.
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1687956380a60722.html
评论列表(0条)