Ubuntu11.10下編譯android內核源碼


在之前的文章中,為讀者介紹了《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的文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM