Android-IMX6Q源碼編譯
基礎知識
一、Android刷機的組件含義
Android啟動流程:
–當你的Android手機啟動時首先會啟動RADIO,然後是SPL。
–此時SPL會根據你的按鍵,確定進入哪個模式( 例如Recovery,Fastboot等等),
–如果沒有按其他鍵,那麼spl會將kernel載入到記憶體中,ramdisk也會載入到你的設備的根目錄
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
需要使用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.name 「test」
make編譯需求:
–Android 4.0.x (Ice Cream Sandwich)及更低版本需要將make 3.82還原到較低版本,以避免出現編譯錯誤
需要的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位的系統
對應的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.編輯~/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"
3.中間可能碰到下載卡死或失敗的情況Crtl+Z中止後repo sync恢復下載,可嘗試多次,防止下載不全面
4.在下載源碼時,通過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)
source ~/imx-o8.0.0_1.0.0_ga/imx_android_setup.sh
# By default, the imx_android_setup.sh script will create the s ource code build environment in the folder ~/android_build
# $ 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 $
source build/envsetup.sh
lunch sabresd_6q-userdebug
make 2>&1 | tee build-log.txt
#編譯完成後,查看log文件,是否有錯誤,更改build_id或者build_number,更 新$目錄的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
部分實用指令
更新默認的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命令,將文件從多個代碼庫下載到本地工作目錄。
repo status列出文件狀態
repo diff查看未提交的修改
repo start新建一個主題分支
git add暫存更改
repo upload將更改上傳到審核伺服器
repo sync同步所有可用項目的文件此處可用於檢測文件是否下載完全,或者從新開始下載,在文件下載終止或卡住時,可用Ctrl+Z,中止指令後重新恢復
repo branches查看現有分支的列表
repo prune安全移除已過時的主題分支在本地文件分支出問題時可調用
repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1初始化Android源代碼到工作目錄-b來指定相應分支
如果喜歡我的文章,歡迎關注我的簡書更新賬號:Felix_lin
TAG:MiHomes |