Android IMX6Q源码编译

参考文档:

  • Google源码编译介绍
  • 自己动手编译Android源码
  • [I.MX6Q][Android6.0.1_r3]之源码获取及编译

基础知识

一、Android刷机的组件含义

  1. Android 启动流程:
    • 当你的Android手机启动时首先会启动RADIO,然后是SPL。
    • 此时SPL 会根据你的按键,确定进入哪个模式( 例如Recovery,Fastboot等等),
    • 如果没有按其他键,那么spl 会将kernel 载入到记忆体中,ramdisk 也会载入到你的设备的根目录
  1. imag文件:
    Kernel 操作系统内核操作系统内核是指大多数Linux操作系统的核心部分。它由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成。操作系统内核通常运行进程,并提供进程间的通信
    • data目录:安卓data目录,存放用户的一些私有文件, 会被挂载到 /data
    • root目录:安卓root文件系统,里面存放init init.rc等文件,会被挂载到 /
    • recovery目录:当启动到recovery模式时,做root文件系统,一般不会直接使用
    • system目录:安卓system目录,存放二进制文件和库,会被挂载到 /system
    • recovery.img:EXT4格式的img文件,由recovery目录生成
    • userdata.img 用户文件系统其实就是userdata目录的内容
    • system.img 系统文件系统其实就是system目录中的内容
    • boot.img 集成内核的zImage、ramdisk.img、dtb(设备树文件)还有启动参数
    • ramdisk.img 其实就是/文件目录下的内容,由root目录生成,然后被集成到boot.img,不会被直接使用
    • vendor.img: 包含平台二进制文件,位于/vendor
    • partition-table.img:GPT分区表映像,,用于SD卡。

二、搭建Android源码编译环境

详细可参考:https://source.android.com/source/initializing

  1. 需要使用 Linux 或 Mac OS,我采用的是Ubuntu 14.0.4

    • 搭建一些必须的程序包:

        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
      
    • 初始化git,替换自己的邮箱和名字

        git config –global user.email “[email protected]” 
        git config –global user.name “test”
      
  2. make编译需求:

    • Android 4.0.x (Ice Cream Sandwich) 及更低版本需要将 make 3.82 还原到较低版本,以避免出现编译错误
  3. 需要的Linux版本

    • Android 6.0 (Marshmallow) - AOSP master:Ubuntu 14.04 (Trusty)
    • Android 2.3.x (Gingerbread) - Android 5.x (Lollipop):Ubuntu 12.04 (Precise)
    • 2.3以下需要32位的系统
  4. 对应的JDK版本:

    • Android 7.0 (Nougat) - Android 8.0 (O):Ubuntu - OpenJDK 8;Mac OS - jdk 8u45 或更高版本
    • Android 5.x (Lollipop) - Android 6.0 (Marshmallow):Ubuntu - OpenJDK 7;Mac OS - jdk-7u71-macosx-x64.dmg
    • Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat):Ubuntu - Java JDK 6;Mac OS - Java JDK 6
    • Android 1.5 (Cupcake) - Android 2.2.x (Froyo):Ubuntu - Java JDK 5

    注:

     如果 Ubuntu >= 15.04
    
     请运行以下命令:
     
     sudo apt-get update
     sudo apt-get install openjdk-8-jdk
    

I.MX6Q Android端编译流程

1. 编译命令(Ubuntu 16.04下编译)

  • 安装需要的包
    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

  • 安装jdk
    sudo apt-get install openjdk-8-jdk

  • 如果在Ubuntu 14.04下
    sudo apt-get update
    sudo apt-get install openjdk-8-jdk

  • repo工具及源码下载

      mkdir ~/bin
      PATH=~/bin:$PATH
      curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
      chmod a+x ~/bin/repo
      mkdir androidsource
      cd androidsourc
      repo init -u git://aosp.tuna.tsinghua.edu.cn/aosp/platform/manifest  -b android-8.0.1_r3
      repo sync
      注: 在此处有碰到几个问题:
          1. 提示无法连接到 gerrit.googlesource.com,默认repo会去访问google链接
              解决:1. 编辑 ~/bin/repo文件,修改内容REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'
                   2.如果1方法还不行,则在bashrc环境变量中添加export REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'
          2. 中间可能碰到下载卡死或失败的情况 Crtl+Z中止后repo sync恢复下载,可尝试多次,防止下载不全面
          3. 在下载源码时,通过repo branches指令,查看repo分支,选择自己需要的指令即可
    
  • repo在下载源码过程中会经常终止,启动脚本同步,其中j8,根据电脑配置,为处理器线程的2倍

      #!/bin/bash
      echo “======= repo sync =======”
      repo sync -j8
      while [ $? == 1 ]; do
      echo “====== error re-sync again =====”
      sleep 3
      repo sync -j8
      done
    
  • 获取I.MX Android build源码

      cd ~ (or any other directory you like)
      tar xzvf imx-o8.0.0_1.0.0_ga.tar.gz
      source ~/imx-o8.0.0_1.0.0_ga/imx_android_setup.sh
      # By default, the imx_android_setup.sh script will create the source code build environment  in the folder ~/android_build
      # ${MY_ANDROID} will be refered as the i.MX Android source code root directory in all i.MX Andorid release documentation
      export MY_ANDROID=~/android_build
    
  • 编译imx Android

      cd ${MYANDROI}
      source build/envsetup.sh
      lunch sabresd_6q-userdebug
      make 2>&1 | tee build-log.txt
      #编译完成后,查看log文件,是否有错误,更改build_id或者build_number,更新${MY_ANDROID}目录的 build_in.mk
      #Android system image production build method 2
      #$ make PRODUCT-sabreauto_6q-userdebug 2>&1 | tee build-log.txt
      注:在此处碰到问题:
          1. 编译android 7.0 出现Try increasing heap size with java option '-Xmx'错误解决方案
              export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
              ./prebuilts/sdk/tools/jack-admin kill-server 
              ./prebuilts/sdk/tools/jack-admin start-server
              然后继续编译
    
  • 获取I.MX Kernel

      cd ~/androidsource
      git clone git://git.freescale.com/imx/linux-2.6-imx.git kernel_imx      
      cd kernel_imx
      git checkout imx-o8.0.0_1.0.0_ga
    
  • 获取I.MX U-boot

      cd ~/androidsource/bootable
      cd bootloader
      git clone git://git.freescale.com/imx/uboot-imx.git uboot-imx
      cd uboot-imx
      git checkout imx-o8.0.0_1.0.0_ga
    

部分实用指令

  1. 更新默认的 Java 版本

     sudo update-alternatives --config java
     sudo update-alternatives --config javac 
    

repo指令

Google源码编译介绍
repo是我们以 Git 为基础构建的代码库管理工具。Repo 可以在必要时整合多个 Git 代码库,将相关内容上传到我们的修订版本控制系统,并自动执行 Android 开发工作流程的部分环节。Repo 并非用来取代 Git,只是为了让您在 Android 环境中更轻松地使用 Git。Repo 命令是一段可执行的 Python 脚本,您可以将其放在路径中的任何位置。使用 Android 源代码文件时,您可以使用 Repo 执行跨网络操作。例如,您可以借助单个 Repo 命令,将文件从多个代码库下载到本地工作目录。

  1. repo status 列出文件状态
  2. repo diff 查看未提交的修改
  3. repo start 新建一个主题分支
  4. git add 暂存更改
  5. repo upload 将更改上传到审核服务器
  6. repo sync 同步所有可用项目的文件 此处可用于检测文件是否下载完全,或者从新开始下载,在文件下载终止或卡住时,可用Ctrl+Z,中止指令后重新恢复
  7. repo branches 查看现有分支的列表
  8. repo prune 安全移除已过时的主题分支 在本地文件分支出问题时可调用
  9. repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
    初始化 Android 源代码到工作目录 -b 来指定相应分支

你可能感兴趣的:(Android IMX6Q源码编译)