[I.MX6Q-Android6.0.1]源码编译笔记
具体请参考leavestrong写的博客[I.MX6Q][Android6.0.1_r3]之源码获取及编译
此次为我编译过程中遇到的一些坑, 为了以后编译过程再次碰到类似的坑而浪费时间, 故在此做笔记记录.
- 获取Android6.0.1_r3源码
mkdir android-6.0
mkdir bin
curl https://storage-googleapis.lug.ustc.edu.cn/git-repo-downloads/repo > bin/repo
然后打开repo修改REPO_URL为国内可 访问的源,修改如下:
REPO_URL = 'https://gerrit-googlesource.lug.ustc.edu.cn/git-repo'
接着进入源码目录获取源码:
chmod a+x bin/repo
cd android-6.0
../bin/repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-6.0.1_r3
../bin/repo sync
- 获取I.MX Kernel
在leavestrong写的博客中源码需要切换到 m6.0.1_1.0.0-ga分支, 但NXP官网已经不提供该该分支的补丁, 当前NXP提供给Android 6.0.1的补丁版本为M6.0.1_2.1.0, 故切换到m6.0.1_2.1.0-ga分支中:
cd android-6.0
git clone git://git.freescale.com/imx/linux-2.6-imx.git kernel_imx
cd kernel_imx
git checkout m6.0.1_2.1.0-ga
- 获取I.MX U-boot
cd android-6.0/bootable/bootloader/
git clone git://git.freescale.com/imx/uboot-imx.git uboot-imx
cd uboot-imx
git checkout m6.0.1_2.1.0-ga
- *获取源码补丁
进入NXP官网后, 按如下路径查找具体的源码补丁:
具体获取补丁地址: i.MX 6 / i.MX 7 / i.MX 8 Series Software and Development Tool Resources
然后拉到网页的底半部寻找如下部分并点击source code
即可下载:
- 为源码打I.MX的补丁
将补丁与源码目录, bin目录放到同一目录下bin解压, 如下所示:
cd android-6.0
source ../android_M6.0.1_2.1.0_source/code/M6.0.1_2.1.0/and_patch.sh
c_patch ../android_M6.0.1_2.1.0_source/code/M6.0.1_2.1.0/ imx_M6.0.1_2.1.0
如果以下提示,说明你已经成功打补丁
*****************************************************************
Success: Now you can build the Android code for FSL i.MX platform
*****************************************************************
注: 如果出现git获取不到对应目录的版本号, 可以删除android_M6.0.1_2.1.0_source/code/M6.0.1_2.1.0/baseversion中对应目录的一行,例如:
vi ../android_M6.0.1_2.1.0_source/code/M6.0.1_2.1.0/baseversion
然后将204行删除:
- 编译Android
cd android-6.0
echo export USE_CCACHE=1 >> ~/.bashrc //设置编译器使用高速缓存
prebuilts/misc/linux-x86/ccache/ccache -M 50G
lunch sabresd_6dq-user
make -j4
编译后在< 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
小技巧: 可以使用 make -j4 > /mnt/share/kernel/AndroidSrc/mk.log
来保存编译日志与错误日志
- 单独编译u-boot镜像
cd android-6.0/bootable/bootloader/uboot-imx
export ARCH=arm
export CROSS_COMPILE=/mnt/share/kernel/AndroidSrc/android-6.0/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-
make distclean
make mx6qsabresdandroid_config
make
- 单独编译uImage镜像
export PATH=android-6.0/bootable/bootloader/uboot-imx/tools:$PATH
cd android-6.0/kernel_imx
export ARCH=arm
export CROSS_COMPILE=/mnt/share/kernel/AndroidSrc/android-6.0/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
- 单独编译boot.img镜像
boot.img:集成内核的zImage、ramdisk.img、dtb(设备树文件)还有启动参数。
ramdisk.img:由root目录生成,然后被集成到boot.img,不会被直接使用。
cd android-6.0
source build/envsetup.sh
lunch sabresd_6dq-user
make bootimage
- 单独编译recovery.img镜像
recovery.img:EXT4格式的img文件,由recovery目录生成。
cd android-6.0
source build/envsetup.sh
lunch sabresd_6dq-user
make recoveryimage