當前位置:
首頁 > 最新 > Android-IMX6Q源碼編譯

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


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 MiHomes 的精彩文章:

TAG:MiHomes |