在之前的文章中,為讀者介紹了《Ubuntu Linux下android源碼下載方法》、《Ubuntu11.10下配置android的Eclipse開發環境》、配置過程中遇到的一些問題,以及《Ubuntu11.10下android源碼4.0.3的編譯方法》。本文繼續為讀者介紹Ubuntu11.10下android內核的編譯方法。
編譯android源碼時並不會自動編譯android內核,因此需要手動編譯這部分代碼。編譯內核所用的時間比編譯android源碼要少得多,只需一會就編譯完成。
1、確定內核版本
進入存放android內核源碼的kernel目錄,我下載了common.git與goldfish.git,以goldfish為例,進入goldfish目錄,在命令行輸入以下命令,顯示所有分支及當前所在的分支:
$git branch -a
輸出結果如下:
* master remotes/origin/HEAD -> origin/master remotes/origin/android-goldfish-2.6.29 remotes/origin/master
輸入以下命令選擇當前的最新版本(goldfish為android的模擬器描述的CPU):
$git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29
再次輸入命令git branch -a,將會顯示剛剛選擇的最新分支,表示目前工作在這個被選擇的分支上,輸出如下:
* android-goldfish-2.6.29 master remotes/origin/HEAD -> origin/master remotes/origin/android-goldfish-2.6.29 remotes/origin/master
2、設定環境變量
在編譯android內核時,需要使用交叉編譯器。在所下載的android源碼樹中有一個prebuilt文件夾,包含了編譯內核所需的交叉編譯工具,因此要將其設置到環境變量中去,以方便使用。打開用戶目錄下的.bashrc文件,在后面添加如下代碼
export PATH=$PATH:~/android/source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin export ARCH=arm
保存並退出,通過以下命令在用戶目錄下進行更新。
$source ~/.bashrc
由於有可能在添加之后沒有及時更新,導致在編譯時提示錯誤,如找不到交叉編譯工具目錄等,因此這里需要更新(如果加入了環境變量仍在編譯時提示找不到交叉編譯工具目錄,可以嘗試多更新幾次)。
3、設定交叉編譯參數
在編譯之前還需要設定編譯時所使用的交叉編譯參數。
首先,打開android/kernel/goldfish/目錄下的Makefile文件,找到CROSS_COMPILE變量,將其指向android源碼提供的prebuilt中的arm-eabi編譯器,代碼如下所示:
CROSS_COMPILE ?= arm-eabi-
之后找到如下代碼:
LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\ $(call ld-option, -Wl$(comma)--build-id,))
將其刪除或注釋掉(建議注釋掉即可,以備以后會使用到),並添加一個空的LDFLAGS_BUILD_ID定義,如下所示:
#LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\ # $(call ld-option, -Wl$(comma)--build-id,)) LDFLAGS_BUILD_ID =
4、編譯內核源碼
設置完之后,就是編譯android內核源碼了,進入goldfish目錄,輸入以下命令
$make goldfish_defconfig $make
第一條命令為編譯時的默認配置文件。如果不執行這條命令,編譯時可能會提示“找不到配置文件”。第一條命令執行完后,會在goldfish目錄下生成一個.config文件。
之后便是一段時間的等待了。。。時間不長,一會即可編譯好,比編譯android源碼時間要少得多。
5、編譯完成之后,會在“kernel/arch/arm/boot/”目錄下生成名為zImage的文件。
