TShopping

 找回密碼
 註冊
搜索
TShopping 精選文章 Android 手機開發 查看內容

下載編譯android kernel

2013-11-25 00:24| 發佈者: woff| 查看: 1729| 評論: 1|原作者: woff

摘要: 在ubuntu10.04中用git和repo獲得的 android源碼目錄中沒有kernel目錄, kernel需要我們在重新下載。 編譯linux內核映像 a)準備交叉編譯工具鏈 android代碼樹中有一個prebuilt項目,包含了我們編譯內核所需的交叉編 ...
 

在ubuntu10.04中用git和repo獲得的 android源碼目錄中沒有kernel目錄, kernel需要我們在重新下載。


編譯linux內核映像
a)準備交叉編譯工具鏈
android代碼樹中有一個prebuilt項目,包含了我們編譯內核所需的交叉編譯工具。

註意:雖然Prebuilt下包含了交叉編譯工具,但是編譯時有可能會出現“/bin/sh: arm-eabi-gcc: not found” 這樣的錯誤,因此最好從CodeSourcery上面載用於交叉編譯的工具鏈:

http://www.codesourcery.com/gnu_toolchains/arm/download.html

選擇   EABI

解壓縮交叉編譯工具鏈:
$ cd /usr/local/
$ sudo cp ~/arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
$ sudo tar jxvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
此時會解壓出來一個叫做arm-2010q1的一個目錄,這裏面就是工具鏈了。

設置一下環境變量:
$ export PATH=$PATH:/usr/local/arm2007q3/bin
好了,到此,基本的內核編譯環境就搞好了。


b)設定環境變量
$ emacs ~/.bashrc
增加如下兩行:
export PATH=$PATH:~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin
export ARCH=arm
保存後,同步變化:
$ source ~/.bashrc

c)獲得合適的內核源代碼
$ cd ~/android
獲得內核源代碼倉庫
$ git clone git://android.git.kernel.org/kernel/common.git   kernel
$ cd kernel
$ git branch
顯示
* android-2.6.27
說明你現在在android- 2.6.27這個分支上,也是kernel/common.git的默認主分支。
顯示所有head分支:
$ git branch -a
顯示
* android-2.6.27
remotes/origin/HEAD -> origin/android-2.6.27
remotes/origin/android-2.6.25
remotes/origin/android-2.6.27
remotes/origin/android-2.6.29
remotes/origin/android-goldfish-2.6.27
remotes/origin/android-goldfish-2.6.29
我們選取最新的android-goldfish-2.6.29,其中goldfish是 android的模擬器模擬的CPU。
$ git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29
$ git branch
顯示
android-2.6.27
* android-goldfish-2.6.29
我們已經工作在android-goldfish-2.6.29分支上了。

d)設定交叉編譯參數
打開kernel目錄下的Makefile文件,

1. ARCH        ?= $(SUBARCH) 改為: ARCH        ?= arm

2. 把CROSS_COMPILE指向剛才下載的prebuilt中的arm-eabi編譯器
CROSS_COMPILE ?= arm-eabi-

註意:如果是按照上述方法重新下載的交叉編譯工具則按照下面方法修改


CROSS_COMPILE ?= arm-none-linux-gnueabi-

這個就是剛剛的下載和解壓的工具鏈的前綴了,旨在告訴make,在編譯的時候要使用我們的工具鏈。


3. 把LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\
$(call ld-option, -Wl$(comma)–build-id,))
這一行註釋掉,並且添加一個空的LDFLAGS_BUILD_ID定義,如下:
LDFLAGS_BUILD_ID =

把它註釋掉的原因是目前android的內核還不支持這個選項。--build-id選項,主要是用於在生成的elf

可執行文件中加入一個內置的id,這樣在core dump,或者debuginfo的時候就可以很快定位這個模塊是

哪次build的時候弄出來的。這樣就可以避免,每次都把整個文件做一遍效驗,然後才能得到該文件的是由

哪次build產生的。對於內核開發者來說,這是很不錯的想法,可以節約定位模塊版本和其影響的時間。

目前,該功能還出於early stage的狀態,未來的android或許會支持,但至少目前的版本是不支持的。

所以,用#註釋掉即可,或者害怕不保險的話,就加入LDFLAGS_BUILD_ID=空,這樣即使編譯的時候用了,

也只是一個空格而已。


e)編譯內核映像
$ cd ~/android/kernel
$ make goldfish_defconfig
$ make

f)測試生成的內核映像
$ emulator -avd myavd -kernel ~/android/kernel/arch/arm/boot/zImage


發表評論

最新評論

引用 呵呵 2013-11-23 14:29
牛X海海!!!

查看全部評論(1)



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2017-6-24 02:26 , Processed in 0.039584 second(s), 23 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回頂部