Freescale i.MX 6Q平台移植Android MNC

       公司一项目,用的是Freescalei.MX 6Q芯片,之前用的是Yocto系统。Linux+ Qt的架构。有客户希望使用Android平台。所以接到移植的要求。首次接触Freescale平台,所以问题很多。一切都是空白。记录一下移植过程。

 

       基本配置:Freescalei.MX 6Q + 1G DDR3 RAM +  8G eMMC.

 

代码下载

       先到Freescale的网站下载最新的文件及BSP代码。如果之前没有注册帐号,则需要先注册一个帐号。

http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/i.mx-applications-processors/i.mx-6-processors/i.mx6qp/i.mx-6-series-software-and-development-tool-resources:IMX6_SW

 

       当前最新的AndroidBSP版本为Android M6.0.1_1.0.0。把文档下载下来。参考Android_User’s_Guide.pdf,下载AOSP部分的代码。

       mkdirmyandroid

mkdir bin

cd myandroid

curlhttps://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

chmod a+x ~/bin/repo

~/bin/repo init -uhttps://android.googlesource.com/platform/manifest -b android-6.0.1_r3

~/bin/repo sync

 

       上面的目录名自己可以随便定,没必要按文档上的来。U-boot和Kernel的代码是单独的,从Freescale的代码站上通过git clone下载。

       cd ~/myandroid

git clonegit://git.freescale.com/imx/linux-2.6-imx.git kernel_imx

cd kernel_imx

git checkout m6.0.1_1.0.0-ga

 

cd ~/myandroid/bootable

cd bootloader

git clonegit://git.freescale.com/imx/uboot-imx.git uboot-imx

cd uboot-imx

git checkout m6.0.1_1.0.0-ga

 

       相对路径按照此要求,分别放在bootable/bootloader下及项目根目录下。

 

       由于从Google源码repo下载的是AOSP代码,所以还需要加上Freescale的BSP代码,Freescale是通过Patch的形式提供的,从Freescale上下载Patch文件:android_M6.0.1_1.0.0_core_source.tar.gz,根据User’s Guide文档进行操作。

cd ~/myandroid

source~/android_M6.0.1_1.0.0_core_source/code/M6.0.1_1.0.0/and_patch.sh

c_patch /opt/android_M6.0.1_1.0.0_core_source/code/M6.0.1_1.0.0/imx_M6.0.1_1.0.0

 

       注意:执行此命令时,代码库中必须保留有.repo/.git这些信息,否则将无法进行。之前手快了点,直接把它删除了,只好重新下载了一次。

 

       以上执行完毕后,源代码下载工作就算完成了。

 

编译环境准备

       由于之前编译环境已经就绪,所以环境就不介绍了,需要注意的是Android 5.0之后的版本要求Open Java7,所以请安装Java 7

sudo apt-get update

sudo apt-get install openjdk-7-jdk

exportJAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/

 

sudo apt-get install lzop u-boot-tools

 

编译

       环境准备完毕之后,就可以先编译一下,看看有没有问题。调试阶段所以用Engineer Mode编译。

 

       source build/envsetup.sh

lunch sabrese_6dq-eng

make 2>&1 | tee build-log.txt

 

下载

       编译过程视机器配置而定,可能需要几十分钟到几小时不等。由于到目前为止什么也没有配置,所以生成的版本肯定不能运行,所以下载时还不能用编译生成的U-BOOT及Kernel。还好,之前Yocto的版本是可用的,所以先用之前版本的U-Boot+Kernel进行下载。

 

       配置mfgtools,在此用的mfgtools版本是2.6版本,首先修改工具根目录下的cfg.ini,把配置改为eMMC-Android

[LIST]

name = eMMC-Android

 

       修改同目录下的mfgtools-android-mx6q-sabresd-emmc.vbs文件。修改两个内容,把soc改为6q,mmc改为0。如下:

Set wshShell = CreateObject("WScript.shell")

wshShell.run "mfgtool2.exe -c""linux"" -l ""eMMC-Android"" -s""board=sabresd""  -s""folder=sabresd"" -s ""soc=6q""-s ""mmc=0"" -s ""data_type="""

Set wshShell = Nothing

 

       然后修改Linux/OSFirmware/ucl2.xml文件。这个文件里配置了很多平台的支持,从MX6SL到MX7D等。我们只需要关心MX6Q,找到eMMC-Android部分。先把前面U-boot/Kernel配置修改为老的版本,我们把这些文件放在firmware/old目录下。

       <!--CMD state="BootStrap"type="boot" body="BootStrap" file ="firmware/u-boot-imx6q%plus%%board%_sd.imx"ifdev="MX6Q">Loading U-boot</CMD-->

       <CMD state="BootStrap"type="boot" body="BootStrap" file ="firmware/old/u-boot-mx6q-old-mfg.bin"ifdev="MX6Q">Loading U-boot</CMD>

       <!--CMD state="BootStrap"type="boot" body="BootStrap" file="firmware/u-boot-imx6dl%board%_sd.imx"ifdev="MX6D">Loading U-boot</CMD>

       <CMD state="BootStrap"type="boot" body="BootStrap" file="firmware/u-boot-imx6qsabresd_sd.imx"ifdev="MX6D">Loading U-boot</CMD>

       <CMD state="BootStrap"type="boot" body="BootStrap" file="firmware/u-boot-imx6sx%board%_emmc.imx"ifdev="MX6SX">Loading U-boot</CMD>

       <CMD state="BootStrap"type="boot" body="BootStrap" file="firmware/u-boot-imx7d%7duboot%_sd.imx" ifdev="MX7D">LoadingU-boot</CMD>

       <CMD state="BootStrap"type="boot" body="BootStrap" file="firmware/u-boot-imx6ul%6uluboot%_emmc.imx"ifdev="MX6UL">Loading U-boot</CMD-->

 

       <CMD state="BootStrap"type="load" file="firmware/old/uImage-mx6q-old-mfg"address="0x10800000"

              loadSection="OTH"setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6QMX6D">Loading Kernel.</CMD>

 

       <CMD state="BootStrap"type="load"file="firmware/fsl-image-mfgtool-initramfs-imx_mfgtools.cpio.gz.u-boot"address="0x10C00000"

       另外,Kernel的运行地址也不正确,根据编译里链接的位置,改为0x10800000。无关的配置可以删除或屏蔽掉。initramfs由于之前的项目没有这个文件,所以用默认的,把地址改为0x10C00000。DTD文件也没有,所以暂时也可以屏蔽掉。

 

       测试下载,LoadingKernel, Jumping to OS Image正确,串口可以出信息,下一步是分区,format_android报错,看来是mksdcard-android.sh.tar文件旧的版本支持不完善。暂时把format_android步骤屏蔽。

 

       再往下FormatingPartition报错,说没有相应设备,用ls也的确没有列出相就的设备来。看来执行脚本没有作用。用较原始的方法,一条条命令来建立设备。先擦除:

       <CMD state="Updater"type="push" body="mknodblock,mmcblk0,/dev/mmcblk0,block"/>

       <CMD state="Updater"type="push" body="$ mknod /dev/zero c 1 5"/>

     <CMDstate="Updater" type="push" body="$ dd if=/dev/zeroof=/dev/mmcblk0 bs=128M count=1"> Erasing MBR and kernelparameters...</CMD>

 

       把U-Boot烧写到首块:

       <CMD state="Updater"type="push" body="send"file="files/android/%folder%/u-boot-imx%soc%%plus%.imx" >Sendingu-boot.imx</CMD>

      

       <CMD state="Updater"type="

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值