NXP

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

2019-07-12 11:55发布

转载自 http://blog.csdn.net/leavestrong/article/details/51864897?locationNum=11
环境说明:
  • 编译系统: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
  • 1
  • 安装JDK
早些就听说Android将不再使用Android自有的Java API版本,而是全面依靠开源的OpenJDK,需要说明的Android6.0.1_r3已经开始使用OpenJDK,而且默认使用OpenJDK7。安装方法如下: $ sudo apt-get install openjdk-7-jdk
  • 1
配置默认java版本,如果电脑上只安装一个版本,这个可以不做。 $ sudo update-alternatives --config java $ sudo update-alternatives --config javac
  • 1
  • 2
测试一下Java版本 $ java -version $ javac -version
  • 1
  • 2
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
数个小时过后……
  • 获取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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 获取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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 为源码打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 *****************************************************************
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 编译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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
数个小时之后,你将在 < 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 单独编译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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
几十分钟过后…… 
查看目录< Kernel_imx>/arch/arm/boot/ ,你可以看到zImage 和 uImage 文件
  • 单独编译boot.img镜像
cd ~/myandroid source build/envsetup.sh lunch sabresd_6dq-user make bootimage
  • 1
  • 2
  • 3
  • 4
  • 单独编译recovery.img镜像
cd ~/myandroid source build/envsetup.sh lunch sabresd_6dq-user make recoveryimage
  • 1
  • 2
  • 3
  • 4

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
  • 1
  • 2
  • 3
  • 4
  • 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