[I.MX6Q][Android6.0.1_r3]之源码获取及编译


环境说明:

  • 编译系统:Ubuntu14.04
  • 编译软件:Android6.0.1_r3
  • 内核版本:3.14.52
  • UBOOT:2015.04
  • 硬件平台:I.MX 6Quad SABRE-SD

设置编译系统

  • 安装需要的包

这里的包包括了Android官网和Freescal建议的包。大家安装即可。

$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip uuid uuid-dev zlib1g-dev liblz-dev liblzo2-2 liblzo2-dev lzop git-core curl u-boot-tools mtd-utils android-tools-fsutils
  • 安装JDK

早些就听说Android将不再使用Android自有的Java API版本,而是全面依靠开源的OpenJDK,需要说明的Android6.0.1_r3已经开始使用OpenJDK,而且默认使用OpenJDK7。安装方法如下:

$ sudo apt-get install openjdk-7-jdk

配置默认java版本,如果电脑上只安装一个版本,这个可以不做。

$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac

测试一下Java版本

$ java -version
$ javac -version

Java版本测试

编译I.MX Android6.0镜像

  • 获取Android6.0.1_r3源码

获取Android源码要从境外服务器下载,肯定是被墙了,但是国内还有很多镜像服务器可以使用,像清华、北大等都有镜像服务可以使用,这里我们使用北大的镜像服务器。

$ cd ~
$ mkdir myandroid
$ mkdir bin
$ cd myandroid
$ curl https://storage-googleapis.lug.ustc.edu.cn/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ ~/bin/repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-6.0.1_r3
$ ~/bin/repo sync

数个小时过后……

  • 获取I.MX Kernel
$ cd ~/myandroid
$ git clone git://git.freescale.com/imx/linux-2.6-imx.git kernel_imx

几十分钟过后……

$ cd kernel_imx
$ git checkout m6.0.1_1.0.0-ga
  • 获取I.MX U-boot
$ cd ~/myandroid/bootable
$ cd bootloader
$ git clone git://git.freescale.com/imx/uboot-imx.git uboot-imx

几分钟过后……

$ cd uboot-imx
$ git checkout m6.0.1_1.0.0-ga
  • 为源码打I.MX的补丁

下载源码补丁android_M6.0.1_1.0.0_core_source.tar.gz,点这里。

$ cd ~
$ tar zxvf android_M6.0.1_1.0.0_core_source.tar.gz
$ 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

几分钟之后……

如果以下提示,说明你已经成功打补丁
*****************************************************************
Success: Now you can build the Android code for FSL i.MX platform
*****************************************************************
  • 编译Android
$ echo export USE_CCACHE=1 >> ~/.bashrc //设置编译器使用高速缓存
$ prebuilts/misc/linux-x86/ccache/ccache -M 50G //设置缓存最大占用空间为50GB
$ cd ~/myandroid
$ source build/envsetup.sh
$ lunch sabresd_6dq-user
$ make 2>&1 | tee build-log.txt
or
$ make

数个小时之后,你将在 < AndroidSDK >out/target/product/sabresd_6dq/看到u-boot.imx boot.img recovery.img system.img 等文件。

  • Android目录文件解析

root目录:安卓root文件系统,里面存放init init.rc等文件,会被挂载到 / 。
system目录:安卓system目录,存放二进制文件和库,会被挂载到 /system 。
data目录:安卓data目录,存放用户的一些私有文件, 会被挂载到 /data 。
recovery目录:当启动到recovery模式时,做root文件系统,一般不会直接使用。
boot.img:集成内核的zImage、ramdisk.img、dtb(设备树文件)还有启动参数。
ramdisk.img:由root目录生成,然后被集成到boot.img,不会被直接使用。
recovery.img:EXT4格式的img文件,由recovery目录生成。
u-boot.imx:u-boot镜像,不用多说。

  • 单独编译u-boot镜像
$ cd ~/myandroid/bootable/bootloader/uboot-imx
$ export ARCH=arm
$ export CROSS_COMPILE=~/myandroid/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/
arm-linux-androideabi-
$ make distclean
$ make mx6qsabresdandroid_config
$ make
  • 单独编译uImage镜像
$ export PATH=~/myandroid/bootable/bootloader/uboot-imx/tools:$PATH
$ cd ~/myandroid/kernel_imx
$ export ARCH=arm
$ export CROSS_COMPILE=~/myandroid/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/
arm-linux-androideabi-
$ make imx_v7_android_defconfig
$ make KCFLAGS=-mno-android
$ make uImage LOADADDR=0x10008000 KCFLAGS=-mno-android

几十分钟过后……
查看目录< Kernel_imx>/arch/arm/boot/ ,你可以看到zImage 和 uImage 文件

  • 单独编译boot.img镜像
cd ~/myandroid
source build/envsetup.sh
lunch sabresd_6dq-user
make bootimage
  • 单独编译recovery.img镜像
cd ~/myandroid
source build/envsetup.sh
lunch sabresd_6dq-user
make recoveryimage

I.MX6Q Android6.0.1_r3启动部分注意点

  • Boot.img默认启动参数解析

在文件< AndroidSDK>/device/fsl/sabresd_6dq/BoardConfig.mk中 BOARD_KERNEL_CMDLINE 记录了boot.img的默认参数,我们可以修改它,或者在Uboot中设置自己的启动参数,如下操作

U-Boot > setenv bootargs
U-Boot > setenv bootargs console=ttymxc0,115200 init=/init video=mxcfb0:dev=ldb,bpp=32
video=mxcfb1:off video=mxcfb2:off video=mxcfb3:off vmalloc=256M androidboot.console=ttymxc0
consoleblank=0 androidboot.hardware=freescale cma=384M
  • fstab文件注意

在文件< AndroidSDK>/device/fsl/sabresd_6dq/BoardConfig.mk中 TARGET_RECOVERY_FSTAB 记录了fstab文件的路径,如果在启动时发现挂载文件系统时路径不 对,大家可以修改上宏所指定的文件即可。


F&Q

1.系统启动时报错,导致system挂载不上:fs_mgr: Error loading verity table (No such file or directory)fs_mgr: Could not set up verified partition, skipping!
这里写图片描述
解决办法:
在bootargs中加入如下参数:

androidboot.selinux=disabled androidboot.dm_verity=disabled

你可能感兴趣的:(I.MX6QDS)