ISSN1672-4305CN12-1352/N
实㊀㊀验㊀㊀室㊀㊀科㊀㊀学LABORATORY㊀
SCIENCE
第22卷㊀第6期㊀2019年12月Vol 22㊀No 6㊀Dec 2019
计算机应用
基于Zynq平台的Android操作系统移植
王㊀洁,冷㊀威,侯㊀刚
(大连理工大学软件学院,辽宁大连㊀116620)
摘㊀要:为了解决Zynq-7000在无操作系统情况下ProcessingSystem部分开发困难的问题,研究并给出了An⁃droid操作系统在Zynq-7000AllProgrammableSoC平台上移植的具体方法㊂通过安装交叉编译器㊁移植Boot⁃Loader引导程序㊁配置和编译Linux内核㊁编译Android源码
㊁生成Android文件系统和镜像文件等步骤,完成了Android系统的移植工作㊂将Android系统在Zynq-7000平台启动所需要的文件拷贝到SD卡中并进行系统启动,实验结果表明Android系统移植成功,这可以使得Zynq-7000平台的开发与使用更加广泛㊂关键词:Zynq平台;操作系统移植;Android;全可编程SoC
中图分类号:TP316㊀㊀文献标识码:A㊀㊀doi:10.3969/j.issn.1672-4305.2019.06.011
TransplantationofAndroidoperatingsystembasedonZynqplatform
WANGJie,LENGWei,HOUGang
(SchoolofSoftwareTechnology,DalianUniversityofTechnology,Dalian116620,China)Abstract:InordertosolvetheproblemthattheZynq-7000isdifficulttodevelopintheProcessingSystemwithoutoperatingsystem,thespecificmethodofportingtheAndroidoperatingsystemontheZynq-7000AllProgrammableSoCplatformisstudied.ThemigrationoftheAndro
idsystemiscomple⁃tedbyinstallingthecrosscompiler,portingtheBootLoader,configuringandcompilingtheLinuxker⁃nel,compilingtheAndroidsourcecode,generatingtheAndroidfilesystemandimagefiles.ThefilesneededtostarttheAndroidsystemontheZynq-7000platformarecopiedtotheSDcardandthesys⁃temisstarted.TheexperimentalresultsshowthattheAndroidsystemissuccessfullytransplanted,whichmakesthedevelopmentanduseoftheZynq-7000platformmoreextensive.
Keywords:Zynq;operatingsystemtransplant;Android;AllProgrammableSoC㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀
㊀㊀㊀㊀㊀㊀㊀㊀
㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀
㊀㊀㊀㊀㊀㊀㊀㊀
基金项目:国家自然科学基金(项目编号:61472100);中
央高校基本科研业务费资助(项目编号:
DUT17JC26)㊂
通讯作者:候刚(1982-),男,辽宁沈阳人,博士,讲师,主
要研究方向为模型检测㊁形式化方法㊂
㊀㊀随着科技的进步和各个领域应用需求的多样化,嵌入式设计技术和芯片技术经历了一次又一次的革新㊂Xilinx公司推出的全球第一个可扩展处理平台Zynq系列打破了传统嵌入式处理器的性能瓶颈[1-2]㊂Zynq将处理器与FPGA整合在一起,实现了全可编程SoC,其在机器学习㊁图像处理㊁汽车电子等领域都有广泛应用[3]㊂
本文致力于研究Android嵌入式操作系统在Zynq
-7000开发平台上的实现㊂通过在Zynq-7000开发平
台上移植操作系统来屏蔽底层的硬件,提供一个统一的编程接口,使得高级语言程序员不需要学习Zynq-7000开发平台以及Xilinx开发工具也能够很好地开发
可以在Zynq-7000开发平台上正确运行的软件,这使得Zynq-7000平台的应用与开发更加广泛㊂
1㊀硬件平台环境
ZynqAPSoC平台是由ARM+FPGA组成的,其
体系结构如图1所示㊂其中ARM部分在Zynq中被称为ProcessingSystem(PS),处理器为双核的Cor⁃texTM-A9,而FPGA部分在Zynq中被称为Program⁃
王洁,等:基于Zynq平台的Android操作系统移植mableLogic(PL),其资源和结构与Xilinx的7系列FPGA一样㊂
图1㊀Zynq-7000体系结构图
2㊀Android简介
Android是Google公司和OpenHandsetAlliance(开放手机联盟)为移动设备开发的一个操作系统㊂Android是基于Linux内核的㊁开源的操作系统,其包括了操作系统㊁用户界面和应用程序三大部分㊂Android系统除了被应用于智能手机㊁平板电脑外,也可应用于数字电视[4]㊁数码相机[5]㊁探测器[6]㊁医疗设备[7]等电子设备中㊂Android是开源的意味着降低了手机软件的开发成本和手机的价位,因此Android操作系统受到了各大手机厂商和消费者的青睐㊂同时由于第三方恶意软件的出现,Android系统的安全问题也成为了研究的热点[8-10]㊂
3㊀Android操作系统移植
在这一节中将介绍如何在Zynq-7000平台上搭建Android操作系统㊂本节分为七个部分来详细叙述Android在Zynq-7000平台上的移植过程:An⁃droid移植环境搭建㊁BootLoader移植㊁Linux内核配置和编译㊁编译设备树㊁构建Android用户空间㊁ram⁃disk修改和制作startup.sh文件㊂
3.1㊀Android系统移植环境搭建
Android操作系统移植环境搭建是在Linux系统下进行的,本文使用的是Ubuntu14.4㊂需要安装交叉编译器,在Xilinx上下载并安装xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin,并通过exportCROSS_COMPILE=arm-xilin1x-linux-gnuea⁃bi和exportPATH=/<myPath>/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin:ƔPATH两条语句导入环境变量㊂由于Android上层代码是用JAVA编写的,所以在移植Android时还需要JAVA的开发环境,本文安装的是JDK6㊂这样Android移植需要的环境就搭建完成了㊂3.2㊀BootLoader移植
u-boot是当前比较流行并被广泛采用的一款Bootloader㊂可以从https://github.c
om/Xilinx/u-boot-xlnx下载最新版本的u-boot源码㊂在使用交叉编译器编译u-boot之前,首先要通过执行makeZynq_zed_config命令对源码进行配置,使之能够生成支持XilinxBSP的可执行文件㊂然后编译u-boot,将会在该路径的目录下生成一个名为u-boot.elf的文件,该文件用于生成BOOT.BIN启动文件㊂3.3㊀Linux内核配置和编译
本文使用的是3.3版本的Linux内核,由digi⁃lent维护㊂源码可以从https://github.com/Digi⁃lent/linux-3.3-digilent.git下载㊂通过执行makeARCH=armdigilent_zed_defconfig命令对Linux内核源码进行配置,使其能够支持Xilinx的BSP与驱动㊂通过执行makemenuconfig命令启动图形配置界面来启用Linux内核中关于Android系统的功能㊂图形界面如图2所示,选择DeviceDrivers项,回车,进入设备驱动配置界面,选择Stagingdrivers项,按 Y ,使该功能可用,然后回车,进入平台驱动配置界面㊂在平台驱动配置界面中选择Android项,回车,进入Android操作系统驱动配置界面,通过按 Y 允许Android下的所有功能,然后保存退出㊂至
14
此,内核配置完成,通过make命令编译内核,生成的内核镜像文件zImage在arch/arm/boot/目录下
图2㊀Linux内核配置界面
3.4㊀编译设备树
可以在内核目录的scripts/dtc路径下到设备树编译器㊂需要注意的是内核在编译时需要配置为打开设备树编译器㊂
Zynq的默认设备树源文件digilent-zed.dts在arch/arm/boot/dts目录下㊂在编译设备树源文件之前,要对Zynq的设备树进行如下修改:
bootargs="console=ttyPS0,115200root=/dev/ramrwinitrd=0x800000,8Mearlyprintkrootfstype=ext4rootwaitdevt⁃mpfs.mount=0";
然后利用设备树编译器生成devicetree.dtb文件㊂3.5㊀构建Android用户空间
首先借助repo工具下载得到Android系统源码,然后切换到Android系统源码目录下对Android源码进行编译㊂在编译后的Android系统源码目录下,新建一个名为Makefile.Zynq的文件,将如下内容写入到文件中:
OUT_DIR:=out/target/product/generic
ROOT_IMG:=root.img
ROOTFS:=rootfs
ROOT_DIRS=lib/modulestmpmedia
PHONY:dummy
Ɣ(ROOT_IMG):dummy
rm-rfƔ@
sudorm-rfƔ(ROOTFS)
cp-rƔ(OUT_DIR)/rootƔ(ROOTFS)
cp-rƔ(OUT_DIR)/systemƔ(ROOTFS)
cdƔ(ROOTFS)&&mkdir-pƔ(ROOT_DIRS)
sudochown-Rroot:rootƔ(ROOTFS)
sudogenext2fs-dƔ(ROOTFS)-bƔƔ((80∗1024))-m0-NƔƔ((64∗1024))Ɣ(ROOT_IMG)
sudochownƔ(shellid-u):Ɣ(shellid-g)Ɣ(ROOT_IMG)
#Phonytargetforcestherootfsimagefiletoberebuiltoneachmakedummy:
使用make-fMakefile.Zynq命令生成Android文件系统㊂生成的文件名为root.img,文件大小为80M左右㊂3.6㊀ramdisk修改
首先通过编译BusyBox㊁编译Dropbear㊁工具链动态库与应用的设置㊁目录的创建与配置和制作ramdisk镜像文件ramdisk8M.image.gz五步完成根文件系统的制作㊂为使Zynq-7000平台在启动时能加载Android系统文件,还需修改ramdisk文件㊂将文件解压并挂载到ramdisk目录下,然后修改ram⁃disk目录下的etc/init.d/rcS文件,将如下内容添加到rcS文件末尾:
echo"MountingSDcardto/mnt/sd"
mkdir-p/mnt/sd
mount/dev/mmcblk0p1/mnt/sd
echo"++Startingstartup.shscriptonSDcard"
if[-f/mnt/sd/startup.sh];then
/mnt/sd/startup.sh
fi
分析上面的内容可以看出:rcS是Linux启动后运行的一个脚本,在rcS文件的最后去执行startup.sh文件,来加载Android系统的相关内容㊂3.7㊀制作startup.sh文件
startup.sh文件是用来挂载并配置Android系统㊀
王洁,等:基于Zynq平台的Android操作系统移植
相关内容的脚本文件,在Linux内核启动后开始执行㊂新建startup.sh文件,将如下内容写入到startup.
sh文件:
李博echo"++PreparingforAndroid"
mkdir/mnt/root
mount-oloop/mnt/sd/root.img/mnt/root/
mount-tprocproc/mnt/root/proc
mount-tsysfssys/mnt/root/sys
mount-ttmpfstmp/mnt/root/data
mkdir-p/mnt/root/tmp/sd
mount/mnt/sd/mnt/root/tmp/sd
echo"++StartingAndroid"
chroot/mnt/root/init
至此,完成了Android系统在Zynq-7000平台上的移植工作㊂
4㊀Android操作系统的板级实现
Android系统启动需要BOOT.BIN㊁devicetree.dtb㊁zImage㊁root.img㊁ramdisk8m.image.gz和startup.sh六个文件,将这些文件拷贝到Zynq-7000平台自带的SD卡中㊂
4.1㊀Zynq-7000平台的配置
Android系统在Zynq-7000平台上启动是从SD卡启动并引导的㊂首先将ZedBoard板卡断电,然后将SD卡从电脑SD卡槽中取出,并将其插入到Zed⁃Board的SD卡槽中㊂修改跳线设置,通过USB电缆将ZedBoard板的J14MiniUSB接口和用于当前设计的计算机的一个USB接口连接㊂通过HDMI转VGA线连接ZedBoard上的HDMI接口和显示器上的VGA接口㊂接着打开串口调试工具,设置参数如下:波特率115200,数据位8,停止位1,无奇偶校验位,无硬件控制流㊂最后打开ZedBoard开发板电源,大约15秒后,可以看到串口调试工具界面上显示操作系统的启动过程㊂
4.2㊀Android系统启动结果展示
通过HDMI连接显示器,可以看到Android系统启动过程㊂最后在显示器上会显示Android系统启动后的界面,如图3所示㊂测试结果表明移植的Android系统可以稳定的运行㊂
5㊀结语
本文在Zynq-7000平台上移植了Android操作系统,结果表明所移植的Android系统功能完善㊂通过在Zynq上移植操作系统,可降低PS部分的开发难度,为高级语言程序员在Zynq
上的应用开发提
图3㊀Android启动界面
供便利,使得Zynq-7000开发平台的应用与开发更加广泛㊂
参考文献(References):
[1]㊀王莹,李健,万翀.引领28nmFPGA 智 造时代[J].电子产品世界,2011,18(12):10-11.
[2]㊀王莹.Xilinx可扩展处理平台:ZYNQ嵌入式处理器与FPGA集成的独特创举[J].电子产品世界,2012,19(2):27-32.[3]㊀陆佳华,江舟,马岷.嵌入式系统软硬件协同设计实战指南[M].北京:机械工业出版社,2013.
[4]㊀赵爽怡.安卓在新一代数字电视芯片上的移植技术研究[D].武汉:华中科技大学,2013.
[5]㊀苏锋.智能相机任重道远  两款安卓系统数码相机使用感受[J].微电脑世界,2013,29(1):126-127.
[6]㊀魏爽.基于Android的嵌入式非线性结探测装置研究[D].长春:吉林大学,2015.
[7]㊀李晨.基于定制Android平台的呼吸机软件研究与实现[D].南京:东南大学,2016.
[8]㊀LiD,BissyandeTF,KleinJ,etal.UnderstandingAndroidAppPiggybacking:ASystematicStudyofMaliciousCodeGrafting[J].IEEETransactionsonInformationForensics&Security,2017,12(6):1269-1284.
[9]㊀FarukiP,BharmalA,LaxmiV,etal.AndroidSecurity:ASur⁃veyofIssues,MalwarePenetration,andDefenses[J].IEEECom⁃municationsSurveys&Tutorials,2017,17(2):998-1022.[10]㊀FangZ,HanW,LiY.PermissionbasedAndroidsecurity:Is⁃suesandcountermeasures[J].Computers&Security,2014,43
(6):205-218.
收稿日期:2018-07-11
修改日期:2018-07-25
作者简介:王洁(1979-),男,辽宁大连人,博士,副教授,主要研究方向为并行体系结构㊁容错计算㊂
34