所有提交的EM系统将被重定向到网上投稿系统.作者被要求将文章直接提交给网上投稿系统各自的日志。

基于I.MX6自定义硬件平台的Android 4.3移植与BSP定制

Zuberahmed Punekar1, Harish V Mekali2, Vivek Kaushik3.
  1. 学生M.Tech[电子],ECE系,BMS工程学院,班加罗尔,印度
  2. 印度班加罗尔BMS工程学院欧洲经委会系助理教授
  3. 项目负责人[嵌入式软件],TES电子解决方案,班加罗尔,印度
有关文章载于Pubmed谷歌学者

更多相关文章请访问国际电气、电子和仪器工程高级研究杂志

摘要

自从谷歌为移动电话推出Android开源项目(AOSP)以来,原始设备制造商(OEM)社区也对为其他嵌入式平台定制Android产生了浓厚的兴趣,如工业控制面板、人机界面设备、安全系统设备、机顶盒、汽车仪表板等。Android在多个设备平台上可用的优势意味着,为一个设备开发的应用程序可以很容易地用于另一个平台,而移植需求很小。操作系统移植和BSP(单板支持包)定制概念使OEM社区能够满足他们严格的上市时间要求。本文讨论了将Android 4.3移植到基于I.MX6 SoC的自定义硬件平台的一般步骤。

关键字

Android移植,BSP定制,I.MX6 SoC,定制硬件平台。

介绍

目前,Android操作系统在嵌入式设备(如手机、人机交互设备、工业控制面板和安全系统设备)市场上非常热门。业界正在探索Android在其他嵌入式平台中的应用能力。一些行业将现有的操作系统替换为Android,主要原因是开源操作系统。如今各行各业选择Android操作系统的原因是这个巨大的应用市场和易于获得的应用开发工具,也有许多在线组来解决开发问题。
单板支持包(BSP)提供了硬件和操作系统之间的标准化接口。BSP为设备驱动程序提供了一个接口,允许内核与硬件资产(如设备控制器、微处理器、内存、内部和外部总线)通信。BSP是对符合给定操作系统的给定(主板)板的特定支持代码的实现。BSP是在硬件上实现和支持嵌入式操作系统的接口。它支持存储、网络、显示和多媒体等主要功能集。BSP可以根据客户的具体需求快速定制。有了BSP,人们可以快速地在标准开发板上提出操作系统,并评估操作系统的特性。
操作系统移植一词的意思是修改或定制运行在特定硬件架构上的操作系统,使其在加载到另一种特定架构时可以运行在另一种特定架构上。例如,支持个人电脑的Linux大多使用英特尔处理器,基于英特尔处理器的架构是x86或x64。但是大多数嵌入式设备都使用基于ARM的处理器。因此,如果需要将Linux操作系统加载到嵌入式设备中,就必须做一些事情,使运行在基于x86的硬件上的操作系统能够运行在基于ARM的硬件上,我们称之为Linux移植。
创建特定于硬件的BSP最简单的方法是使用为类似硬件设计的现有BSP,并将其开发为适合自定义硬件。所选择的引用BSP需要进行定制,以便它只支持定制硬件所需的那些特性。例如,参考BSP可能同时支持HDMI和LVDS显示,但BSP正在开发的硬件只需要有LVDS显示,在这种情况下,参考BSP仅被定制为包括LVDS显示支持。下图总结了移植BSP定制的过程
图像

相关工作

在[1]中,研究了一种基于32位ARM和GPS的新型车载导航定位终端系统。本文以结构程序为基础,详细讨论了WinCE BSP各部分的开发,并分析了启动代码中的难点。具体描述了启动代码的编写方法。[2]试图解决多处理器SOC软件设计领域的主要挑战。提出了软件设计流程,克服了典型设计流程的局限性。
在[3]中介绍了财会收银机嵌入式系统的硬件组成。讨论了BSP(单板支持包)在嵌入式系统开发中的功能和特点。
本文讨论了在LTIB开发环境下,Linux在ARM平台上的移植和BSP定制。
本文讨论了NXP2120应用处理器平台上Android的移植和BSP定制。
[6]讨论了将android移植到任何硬件所涉及的基本概念。它详细讨论了Android的分层架构,开发人员可以访问的层和架构的工作原理。它还讨论了Android如何在任何硬件上工作,以及概述Android移植到任何硬件上的概念。本文讨论了用于Android的linux内核,以及用Android映像制作的Android文件系统。

基于i.mx6的定制硬件平台

SGET(嵌入式技术标准化小组)是一个技术和科学协会[7]。SGET,准备和编译技术规范或标准,如实施指南,软件接口和系统要求。SGET标准旨在服务于能源效率、环境保护和有效技术的目的
SMARC(“智能移动架构”)是SGET定义的一种多功能小型计算机模块定义,针对需要低功耗、低成本和高性能的应用程序。这些模块通常将使用与许多熟悉的设备(如平板电脑和智能手机)中使用的类似或相同的ARM soc。可选的低功耗soc和cpu,例如面向平板电脑的X86设备和其他RISC cpu也可以使用。模块的功率通常在6W以下。
定义了两种模块尺寸:82mm x 50mm和82mm x 80mm。模块pcb有314个边指,与一个低调的314引脚0.5mm间距直角连接器相匹配(连接器有时被识别为321引脚连接器,但有7个引脚丢失到键上)。图2(a)为I.MX6双/四联SMARC模块框图。
图像
这些模块被用作便携式和固定式嵌入式系统的构建模块。核心CPU和支持电路,包括DRAM、启动闪存、功率排序、CPU电源、GBE和单通道LVDS显示发射机都集中在模块上。这些模块与特定应用的载波板一起使用,实现其他功能,如音频编解码器、触摸控制器、无线设备等。模块化方法允许可扩展性、快速上市和可升级性,同时仍然保持低成本、低功耗和小物理尺寸。图2(b)显示了承载SMARC模块的载波板架构。

android介绍

图像
图3显示了android的底层系统架构。
应用程序框架:包含应用程序开发人员可以用作底层hal接口的api
粘合剂IPC:Binder进程间通信机制允许应用程序框架跨进程边界并调用Android系统服务代码。
系统服务:通过应用程序框架api公开的大多数功能必须与某种类型的系统服务通信才能访问底层硬件。系统服务分为两个部分:System和media。系统服务包括窗口或通知管理器。媒体服务包括播放和录制媒体所涉及的所有服务。
硬件抽象层(HAL):HAL作为一个标准接口,允许Android系统调用设备驱动层,同时不关心驱动程序和硬件的底层实现。
Linux内核:在大多数情况下,开发设备驱动程序与开发典型的Linux设备驱动程序相同。Android使用了一个特殊版本的Linux内核,并添加了一些特殊的功能,比如内存管理系统,它在保存内存方面更加积极。

先决条件和设置

要构建Android源文件,需要一台Linux主机。主机应该有Ubuntu 12.04(32/64位)操作系统版本,这是对Android JB4.3版本测试最多的操作系统。主机上应该有100 gb的空闲磁盘空间用于构建映像。
构建android映像需要以下包。
$ sudo apt-get install openjdk-7-jdk
$ sudo apt-get install uuid
$ sudo apt-get install uuid
$ sudo apt-get install liblzo2-2 liblzo2-dev
$ sudo add-apt-repository ppa:git-core/ppa
$ sudo apt-get update
$ sudo apt-get install git-core
Android源代码在Android存储库(android.googlesource.com)中维护为100多个git。要从谷歌repo获取Android源代码,请遵循以下步骤:
$ CD ~
$ mkdir myandroid
$ mkdir bin
$ CD myandroid
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ ~/bin/repo init -u https://android.googlesource.com/platform/manifest -b android-4.3_r2.1 .使用实例
$ ~/bin/repo sync #该命令加载最需要的repo。因此,它可能需要几个小时来加载。
下面的命令获取为基于I.MX6的飞思卡尔Stadand开发平台开发的android内核和引导加载程序的源代码。
从Freescale开源git获取jb4.3_1.0.0-ga内核源代码:
$ CD myandroid
$ git克隆git://git.freescale.com/imx/linux-2.6-imx.git kernel_imx #内核回购是沉重的。因此,这个过程可能需要一段时间。
$ CD kernel_imx
$ git checkout jb4.3_1.0.0-ga
$ CD myandroid/ boottable
$ CD引导程序
$ git克隆git://git.freescale.com/imx/uboot-imx.git uboot-imx
$ CD uboot-imx
$ git checkout jb4.3_1.0.0-ga

移植和BSP定制

Android由一个基于Linux 2.6内核的内核组成,库、中间件和应用程序软件运行在一个应用框架上,该应用框架包含java兼容的库和用C[6]编写的api。Android的主要硬件平台是ARM架构。ARM机器相关代码放在myandroid/kernel_imx/arch/ ARM目录下。内核源代码树子目录中的内容定义如下:
boot:包含特定的引导进程代码。
kernel:包含依赖于体系结构的内核文件。
configs:特定平台的默认配置。
common:包含ARM架构的通用文件。
mach-*:包含平台和处理器特定的文件。
mach-mx6:包含基于I.MX6的应用程序板的平台和处理器特定文件。
内核配置和构建系统基于多个makefile。但是我们主要与位于内核源代码树顶部目录的主Makefile进行交互。构建内核源代码的关键是让安装在主机上的实用程序帮助构建每个文件及其依赖关系,根据主要Makefile中的指示,相关指令已经编写,以绑定层次结构下的所有其他Makefile和依赖关系。这种制作的最佳部分是简化构建开发人员感兴趣的文件,并通过排除构建过程中未使用的文件及其依赖项来减少大量时间。
BSP定制可以通过以下步骤完成,
1.进入内核根目录$ cd ~/myandroid/kernel_imx
2.启动菜单配置图形实用程序$ make menuconfig将打开如下图4所示的GUI
图像
4.定制完成后,选择exit保存配置。
图像
5.配置将被保存在当前目录下的.config文件中,该文件是隐藏的,用户无法访问。
6.下次构建内核时,将自动应用保存在.config文件中的配置。

构建android映像

Android repo在~/myandroid/bootable/bootloader/ubootimx/为不同的板提供了通用的引导加载程序U-Boot。基于飞思卡尔SABRE-SD开发板开发的引导加载程序基于~/myandroid/bootable/bootloader/uboot-imx/board/freescale/mx6q_sabresd的I.MX6四芯片,适合所有基于I.MX6四芯片定制平台的需求。使用以下命令构建引导加载程序,
$ CD ~/myandroid/bootable/bootloader/uboot-imx
$ export ARCH=arm
$ export CROSS_COMPILE=~/myandroid/ prebuilds /gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
$ make distclean
$ make mx6q_sabresd_android_config
让美元
成功构建后,将在当前目录中生成引导加载程序“u-boot.bin”。构建u-boot还会在~/myandroid/bootable/bootloader/uboot-imx/tools路径下生成“mkimage”实用程序,该实用程序将用于生成内核映像。
假设U-Boot已经构建,mkimage是在myandroid/bootable/bootloader/uboot-imx/tools/下生成的,运行以下命令来构建内核。
$ export PATH=~/myandroid/bootable/bootloader/uboot-imx/tools:$PATH
$ CD ~/myandroid/kernel_imx
$ export ARCH=arm
$ export CROSS_COMPILE=~/myandroid/ prebuilds /gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
$ make uImage
上面的命令“make uImage”从“”中获取配置信息。Config”文件,该文件存在于当前目录中。
内核的成功构建将uImage存储在~/myandroid/kernel_imx/arch/arm/boot/中,消息如下图6所示。
图像

闪烁和引导

删除SD卡现有分区,新建一个ext4分区,用于存放Android文件系统。将分区标记为“rootfs”。在前分区中留下100 mb的未分配空间,用于存放引导加载程序和内核。所有这些都可以使用“gparted”实用程序来实现。
现在,一旦SD卡准备好了,使用下面的命令来刷新引导加载程序,内核和Android文件系统(从飞思卡尔Android 4.3发布的I.MX6中获取Android文件系统)
启动加载程序闪烁
ï ·$ CD ~/myandroid/bootloader/uboot-imx/
ï ·$ sudo dd if= u-boot.bin of=/dev/sdc bs=1k seek=1
闪烁内核
ï ·$ CD ~/myandroid/kernel_imx/arch/arm/boot
ïÂ‑·$ sudo dd if=uImage of=/dev/sdc bs=1M seek=1
注意:在上面的dd命令中,用于闪烁的设备被提到为/dev/sdc,这是因为在当前环境中,SD卡被检测为/dev/sdc
刷新文件系统
ïÂ‑·$ CD文件系统tar文件的位置
ï··$ tar -xvf文件系统tar文件名称-C /media/rootfs/
SD卡已准备好在自定义硬件平台上启动。

结果

图7表示不同BSP配置的内核大小的占用,这里有四种通用配置,比如最小配置,这意味着它拥有基本内核,它需要较少的内存空间,因此引导目标所需的时间更少。默认配置:在这种情况下,一些额外的组件被添加到最低配置,如USB、NFS、网络等,因此启动目标设备所需的时间比最低配置要多,因为驱动模块需要一些时间来加载和初始化目标设备。最大配置:它允许所有功能和设备驱动程序都添加到操作系统中,因此随着占用空间大小和启动时间也增加了。最后是自定义配置:这里所有资源的使用都是有限的,即内核的职责的选择是根据目标应用程序的需求,有时也会根据需求为内核修补额外的驱动程序,因此本文提出的自定义操作系统大小为4.5MB。内核和文件系统的最终大小是42.29MB,因此目标设备启动时间也非常短。
图像

结论

我们研究了Android操作系统在嵌入式系统中的重要性、特点和功能。根据事实,Linux操作系统和Android操作系统实际上是一样的。不是完全一样的,但是Android内核是直接从Linux推断出来的。Android 4.3移植到根据SGET标准构建的基于I.MX6的定制硬件平台上。移植分为四个主要步骤:配置、构建、刷新和最终引导目标平台。最后,为各种BSP配置评估设备的内核占用大小和引导时间。

参考文献









全球科技峰会