TShopping

 找回密碼
 註冊
搜索
查看: 395|回復: 1

[教學] 下載編譯android kernel

[複製鏈接]
發表於 2013-11-23 01:14:06 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk Push to Twitter 
在ubuntu10.04中用git和repo獲得的 android源碼目錄中沒有kernel目錄, kernel需要我們在重新下載。

編譯linux內核映像
a)準備交叉編譯工具鏈
android代碼樹中有一個prebuilt項目,包含了我們編譯內核所需的交叉編譯工具。
註意:雖然Prebuilt下包含了交叉編譯工具,但是編譯時有可能會出現“/bin/sh: arm-eabi-gcc: not found” 這樣的錯誤,因此最好從CodeSourcery上面載用於交叉編譯的工具鏈:
選擇   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:28 | 顯示全部樓層
牛X海海!!!

版主招募中

您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



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

GMT+8, 2016-12-11 18:18 , Processed in 0.059978 second(s), 22 queries .

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表