您的位置:首页 > 移动开发 > Android开发

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

2017-07-13 19:51 429 查看
转载自 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




编译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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: