Android IMX6Q源碼編譯

參考文檔:

基礎(chǔ)知識(shí)

一、Android刷機(jī)的組件含義

  1. Android 啟動(dòng)流程:
    • 當(dāng)你的Android手機(jī)啟動(dòng)時(shí)首先會(huì)啟動(dòng)RADIO,然后是SPL。
    • 此時(shí)SPL 會(huì)根據(jù)你的按鍵,確定進(jìn)入哪個(gè)模式( 例如Recovery,F(xiàn)astboot等等),
    • 如果沒有按其他鍵,那么spl 會(huì)將kernel 載入到記憶體中,ramdisk 也會(huì)載入到你的設(shè)備的根目錄
  1. imag文件:
    Kernel 操作系統(tǒng)內(nèi)核操作系統(tǒng)內(nèi)核是指大多數(shù)Linux操作系統(tǒng)的核心部分。它由操作系統(tǒng)中用于管理存儲(chǔ)器、文件、外設(shè)和系統(tǒng)資源的那些部分組成。操作系統(tǒng)內(nèi)核通常運(yùn)行進(jìn)程,并提供進(jìn)程間的通信
    • data目錄:安卓data目錄,存放用戶的一些私有文件, 會(huì)被掛載到 /data
    • root目錄:安卓root文件系統(tǒng),里面存放init init.rc等文件,會(huì)被掛載到 /
    • recovery目錄:當(dāng)啟動(dòng)到recovery模式時(shí),做root文件系統(tǒng),一般不會(huì)直接使用
    • system目錄:安卓system目錄,存放二進(jìn)制文件和庫,會(huì)被掛載到 /system
    • recovery.img:EXT4格式的img文件,由recovery目錄生成
    • userdata.img 用戶文件系統(tǒng)其實(shí)就是userdata目錄的內(nèi)容
    • system.img 系統(tǒng)文件系統(tǒng)其實(shí)就是system目錄中的內(nèi)容
    • boot.img 集成內(nèi)核的zImage、ramdisk.img、dtb(設(shè)備樹文件)還有啟動(dòng)參數(shù)
    • ramdisk.img 其實(shí)就是/文件目錄下的內(nèi)容,由root目錄生成,然后被集成到boot.img,不會(huì)被直接使用
    • vendor.img: 包含平臺(tái)二進(jìn)制文件,位于/vendor
    • partition-table.img:GPT分區(qū)表映像,,用于SD卡。

二、搭建Android源碼編譯環(huán)境

詳細(xì)可參考: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 還原到較低版本,以避免出現(xiàn)編譯錯(cuò)誤
  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位的系統(tǒng)
  4. 對(duì)應(yīng)的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
    
     請(qǐng)運(yùn)行以下命令:
     
     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
      注: 在此處有碰到幾個(gè)問題:
          1. 提示無法連接到 gerrit.googlesource.com,默認(rèn)repo會(huì)去訪問google鏈接
              解決:1. 編輯 ~/bin/repo文件,修改內(nèi)容REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'
                   2.如果1方法還不行,則在bashrc環(huán)境變量中添加export REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'
          2. 中間可能碰到下載卡死或失敗的情況 Crtl+Z中止后repo sync恢復(fù)下載,可嘗試多次,防止下載不全面
          3. 在下載源碼時(shí),通過repo branches指令,查看repo分支,選擇自己需要的指令即可
    
  • repo在下載源碼過程中會(huì)經(jīng)常終止,啟動(dòng)腳本同步,其中j8,根據(jù)電腦配置,為處理器線程的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文件,是否有錯(cuò)誤,更改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 出現(xiàn)Try increasing heap size with java option '-Xmx<size>'錯(cuò)誤解決方案
              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
              然后繼續(xù)編譯
    
  • 獲取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
    

部分實(shí)用指令

  1. 更新默認(rèn)的 Java 版本

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

repo指令

Google源碼編譯介紹
repo是我們以 Git 為基礎(chǔ)構(gòu)建的代碼庫管理工具。Repo 可以在必要時(shí)整合多個(gè) Git 代碼庫,將相關(guān)內(nèi)容上傳到我們的修訂版本控制系統(tǒng),并自動(dòng)執(zhí)行 Android 開發(fā)工作流程的部分環(huán)節(jié)。Repo 并非用來取代 Git,只是為了讓您在 Android 環(huán)境中更輕松地使用 Git。Repo 命令是一段可執(zhí)行的 Python 腳本,您可以將其放在路徑中的任何位置。使用 Android 源代碼文件時(shí),您可以使用 Repo 執(zhí)行跨網(wǎng)絡(luò)操作。例如,您可以借助單個(gè) Repo 命令,將文件從多個(gè)代碼庫下載到本地工作目錄。

  1. repo status 列出文件狀態(tài)
  2. repo diff 查看未提交的修改
  3. repo start 新建一個(gè)主題分支
  4. git add 暫存更改
  5. repo upload 將更改上傳到審核服務(wù)器
  6. repo sync 同步所有可用項(xiàng)目的文件 此處可用于檢測(cè)文件是否下載完全,或者從新開始下載,在文件下載終止或卡住時(shí),可用Ctrl+Z,中止指令后重新恢復(fù)
  7. repo branches 查看現(xiàn)有分支的列表
  8. repo prune 安全移除已過時(shí)的主題分支 在本地文件分支出問題時(shí)可調(diào)用
  9. repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
    初始化 Android 源代碼到工作目錄 -b 來指定相應(yīng)分支
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評(píng)論 25 709
  • 讀經(jīng) 撒母耳記下23:1-39 經(jīng)文 撒母耳記下23:11-12 其次是哈拉人亞基的兒子沙瑪。一日非利士人聚集成群...
    君自爾出閱讀 319評(píng)論 0 3
  • 親愛的Y先生: 親愛的Y,晚上好呀。此刻我正在飛往casablanca的飛機(jī)上,E47靠窗的位子,窗檐下粘了一塊綠...
    DianaZY閱讀 543評(píng)論 5 5
  • 文/蒙初凝琪 今天,我拜讀了公司總經(jīng)理室領(lǐng)導(dǎo)推薦的《馬明哲:擁有執(zhí)行力才能讓你強(qiáng)大》一文。 記得很多年前,我在營業(yè)...
    蒙初凝琪閱讀 7,320評(píng)論 2 6
  • 最近,由于天氣早晚溫差大,加之霧霾污染不斷增強(qiáng),因?yàn)榘l(fā)燒、流涕、咳嗽等癥狀到醫(yī)院求醫(yī)的患者驟然增多,很多人都知道流...
    菲物語閱讀 256評(píng)論 0 0

友情鏈接更多精彩內(nèi)容