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

来源:互联网 发布:空间数据的逻辑运算 编辑:程序博客网 时间:2024/06/11 08:29

转载自 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.txtor$ 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 ~/myandroidsource build/envsetup.shlunch sabresd_6dq-usermake bootimage
  • 1
  • 2
  • 3
  • 4
  • 单独编译recovery.img镜像
cd ~/myandroidsource build/envsetup.shlunch sabresd_6dq-usermake 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 bootargsU-Boot > setenv bootargs console=ttymxc0,115200 init=/init video=mxcfb0:dev=ldb,bpp=32video=mxcfb1:off video=mxcfb2:off video=mxcfb3:off vmalloc=256M androidboot.console=ttymxc0consoleblank=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
原创粉丝点击