NXP

[I.MX6Q-Android6.0.1]源码编译笔记

2019-07-12 12:18发布

[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