环境说明:
这里的包包括了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
早些就听说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
获取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
数个小时过后……
$ 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
$ 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
下载源码补丁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
*****************************************************************
$ 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 等文件。
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镜像,不用多说。
$ 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
$ 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 文件
cd ~/myandroid
source build/envsetup.sh
lunch sabresd_6dq-user
make bootimage
cd ~/myandroid
source build/envsetup.sh
lunch sabresd_6dq-user
make recoveryimage
在文件< 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
在文件< AndroidSDK>/device/fsl/sabresd_6dq/BoardConfig.mk中 TARGET_RECOVERY_FSTAB 记录了fstab文件的路径,如果在启动时发现挂载文件系统时路径不 对,大家可以修改上宏所指定的文件即可。
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