美文网首页
Android IMX6Q源码编译

Android IMX6Q源码编译

作者: Felix_lin | 来源:发表于2018-04-26 10:31 被阅读105次

    参考文档:

    基础知识

    一、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 “test@test.com” 
          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<size>'错误解决方案
                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源码编译

          本文链接:https://www.haomeiwen.com/subject/mnrplftx.html