前一段時間一直在弄畢業論文和答辯的事情,還要急着趕回來上班,已經有一段時間沒有弄Android開發了,話不多說,在老羅前一篇文章提到,從源代碼樹下載下來的最新Android源代碼,是不包括內核代碼的,也就是Android源代碼工程默認不包含Linux Kernel代碼,而是使用預先編譯好的內核,也就是prebuilt/android-arm/kernel/kernel-qemu文件。衆所周知,一個新的Android系統必須使用自己的Android內核,纔可以添加一些特有的功能,進行一些定製化的開發,那麼怎樣運行自己的Android內核呢?因爲谷歌官網上已經有可以下載到的Android內核源碼,還有就是三星和HTC也公佈了自己的Android內核源碼,讓開發者可以有更大權限開發一些特定的應用,本人愚見,這種策略對於三星和HTC也有很大的利益!
因爲谷歌上有可以在模擬器中運行的goldfish Android內核源碼,用這個來學習DIY Android內核是非常好的選擇,我在學習過程中主要參考了老羅的Android之旅,具體參考如下:
參考文檔:http://blog.csdn.net/luoshengyang/article/details/6564592
另外我想說的是,任何知識都需要親自去嘗試,才能學得更牢!
一 ==下載Linux Kernel for Android源代碼。
1. 使用GIT工具下載,執行以下命令:
USER-NAME@MACHINE-NAME:~/Android$
mkdir kernel
USER-NAME@MACHINE-NAME:~/Android$cd kernel
然後轉到剛纔同步的文件中,我同步之後只有一個goldfish目錄
接着就是檢出能夠在Android模擬器中運行的Android內核源碼,cd goldfish ;接着git checkout remotes/origin/archive/android-gldfish-2.6.29
二 ==編譯下載下來的Android內核源碼goldfish
1. 導出交叉編譯工具目錄到$PATH環境變量中去:
USER-NAME@MACHINE-NAME:~/Android/kernel/common$export PATH=$PATH:~/Android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
2. 修改common目錄下的Makefile文件的以下兩行爲:
# ARCH
?= (SUBARCH)
# CROSS_COMPILE?=
ARCH ?= arm #體系結構爲arm
CROSS_COMPILE ?= arm-eabi- #交叉編譯工具鏈前綴,參考~/Android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin目錄
3. 開始編譯:
USER-NAME@MACHINE-NAME:~/Android/kernel/common$make goldfish_defconfig
出現莫名錯誤,make: ***/root/build_kernel/linux-2.6.14.1/arch/arm Is a directory .Stop
網上查詢得知,原來是原來是因爲 ARCH ?= arm後面多了一個空格的緣故,我以爲是配置錯誤了!!!囧!!!
修改Makefile,把空格去掉,接着編譯
USER-NAME@MACHINE-NAME:~/Android/kernel/common$make
成功編譯了!
三==運行編譯成功的Android內核
emulator -kernel /home/hu/android-2.3/kernel/goldfish/arch/arm/boot/zImage
用adb shell 查看運行的內核信息
顯示運行正是剛纔編譯成功的Android內核
接下來做的應該是在網上下載一個對應於自己的手機Android內核,然後編譯一下,下載到手機中用用,這才能正真感受到DIY Android內核的魅力!
附上小米論壇上一位機友編譯htc Android內核的圖文教程