在以前的文章中,爲讀者介紹了《Ubuntu Linux下android源碼下載方法》、《Ubuntu11.10下配置android的Eclipse開發環境》、配置過程當中遇到的一些問題,以及《Ubuntu11.10下android源碼4.0.3的編譯方法》。本文繼續爲讀者介紹Ubuntu11.10下android內核的編譯方法。linux
編譯android源碼時並不會自動編譯android內核,所以須要手動編譯這部分代碼。編譯內核所用的時間比編譯android源碼要少得多,只需一會就編譯完成。android
一、肯定內核版本git
進入存放android內核源碼的kernel目錄,我下載了common.git與goldfish.git,以goldfish爲例,進入goldfish目錄,在命令行輸入如下命令,顯示全部分支及當前所在的分支:shell
$git bransh -a
輸出結果以下:bash
* 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,將會顯示剛剛選擇的最新分支,表示目前工做在這個被選擇的分支上,輸出以下:ui
* android-goldfish-2.6.29 master remotes/origin/HEAD -> origin/master remotes/origin/android-goldfish-2.6.29 remotes/origin/master
二、設定環境變量命令行
在編譯android內核時,須要使用交叉編譯器。在所下載的android源碼樹中有一個prebuilt文件夾,包含了編譯內核所需的交叉編譯工具,所以要將其設置到環境變量中去,以方便使用。打開用戶目錄下的.bashrc文件,在後面添加以下代碼code
export PATH=$PATH:~/android/source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin export ARCH=arm
保存並退出,經過如下命令在用戶目錄下進行更新。ip
$source ~/.bashrc
因爲有可能在添加以後沒有及時更新,致使在編譯時提示錯誤,如找不到交叉編譯工具目錄等,所以這裏須要更新(若是加入了環境變量仍在編譯時提示找不到交叉編譯工具目錄,能夠嘗試多更新幾回)。
三、設定交叉編譯參數
在編譯以前還須要設定編譯時所使用的交叉編譯參數。
首先,打開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 =
四、編譯內核源碼
設置完以後,就是編譯android內核源碼了,進入goldfish目錄,輸入如下命令
$make goldfish_defconfig $make
第一條命令爲編譯時的默認配置文件。若是不執行這條命令,編譯時可能會提示「找不到配置文件」。第一條命令執行完後,會在goldfish目錄下生成一個.config文件。
以後即是一段時間的等待了。。。時間不長,一會便可編譯好,比編譯android源碼時間要少得多。
五、編譯完成以後,會在「kernel/arch/arm/boot/」目錄下生成名爲zImage的文件。