天天看點

Android系統6.0源代碼編譯過程分析(2)之編譯SDK及核心

通過上篇文章《Android系統6.0源代碼編譯過程分析(1)》分析下載下傳Android6.0系統源碼和編譯源碼的過程,編譯源碼成功後運作模拟器,如圖所示:

Android系統6.0源代碼編譯過程分析(2)之編譯SDK及核心

經過漫漫長路,終于把下載下傳源碼和編譯源碼搞定了,接下來,繼續分析編譯SDK和核心。

1 編譯SDK

注意:編譯SDK的時候會把之前編譯好的out檔案夾下的部分内容删除重新編譯,讀者可以在編譯SDK之前最好備份out檔案,其實不備份也沒有關系,畢竟源碼經過無數次的修改,才會達到讀者的要求(除非是有的讀者隻看看源碼裡面的結構);不過從第二次開始重新 make -jN 編譯的時候,會編譯快的多。

進入Android源碼目錄檔案夾下,先初始化編譯環境:

source build/envsetup.sh
           
Android系統6.0源代碼編譯過程分析(2)之編譯SDK及核心

設定編譯目标:

Android系統6.0源代碼編譯過程分析(2)之編譯SDK及核心

最後一步開始編譯sdk:

make sdk
           
Android系統6.0源代碼編譯過程分析(2)之編譯SDK及核心

編譯成功,如圖所示:

Android系統6.0源代碼編譯過程分析(2)之編譯SDK及核心

在/out/host/linux-x86/sdk/sdk 目錄下就可以看到編譯好的SDK:

Android系統6.0源代碼編譯過程分析(2)之編譯SDK及核心

建議把編譯好的SDK也備份一下,以防在以後修改源碼的時候丢失或者損壞。

2 下載下傳、編譯 kernel

(1)下載下傳kernel

在上篇文章《Android系統6.0源代碼編譯過程分析(1)》中,下載下傳下來的Android源代碼,是不包括linux kernel核心代碼的,是使用的谷歌工程師們預先編譯好的核心(在prebuilts/qemu-kernel檔案中),它們是兩個部分。下載下傳下來是為了友善檢視裡面的核心結構。Android源碼預設的核心如圖所示:

Android系統6.0源代碼編譯過程分析(2)之編譯SDK及核心

可以看出Android6.0是用的3.4版本的核心,是以自己也要下載下傳Android源碼系統對應的核心版本。

下載下傳kernel源碼,初始化倉庫:

如圖所示:

Android系統6.0源代碼編譯過程分析(2)之編譯SDK及核心

會自動建立一個goldfish目錄,進入goldfish目錄:

cd goldfish
           

檢視所有分支:

如圖所示:

Android系統6.0源代碼編譯過程分析(2)之編譯SDK及核心

下載下傳檢出檔案到本地:

如圖所示:

Android系統6.0源代碼編譯過程分析(2)之編譯SDK及核心

現在kernel源碼就下載下傳到goldfish目錄下了。

(2)編譯核心源碼

在下載下傳好的Android系統源碼目錄中建立kernel檔案夾,把goldfish複制到kernel檔案夾下。

修改goldfish目錄下makefile檔案配置:

sudo gedit Makefile
           

定位大約第195行:

ARCH            ?= $(SUBARCH)
CROSS_COMPILE   ?= $(CONFIG_CROSS_COMPILE:"%"=%)
           

更改為

ARCH            ?= arm
CROSS_COMPILE   ?= arm-eabi-
           

進入goldfish目錄,配置環境變量:

export PATH=$PATH:~/android-./prebuilts/gcc/linux-x86/arm/arm-eabi-/bin
           

編譯:

make goldfish_armv7_defconfig
           

最後執行:

Android系統6.0源代碼編譯過程分析(2)之編譯SDK及核心

注意:(/media/wang/d1756fc5-46fe-4779-bee7-3912f0ce4e01/home/wang/)是筆者自己機械硬碟的路徑名稱,請讀者換成自己的,或者用“~”代替

編譯成功,如圖所示:

Android系統6.0源代碼編譯過程分析(2)之編譯SDK及核心

傳回Android系統源碼目錄,運作模拟器:

source build/envsetup.sh
lunch sdk-eng
emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage & //從核心檔案啟動模拟器
           

檢視剛編譯過的核心版本資訊,如圖所示:

Android系統6.0源代碼編譯過程分析(2)之編譯SDK及核心

分析的此次,Android系統源碼下載下傳、源碼編譯、SDK編譯、核心編譯就結束了。接下來,就開始該讀者分析源碼、解讀源碼、修改源碼了。

繼續閱讀