一. 引言
誠如老羅所言,android源代碼裏面並沒有帶linux kernel代碼。它使用的是預先編譯好的kernel,大家可以使用adb shell cat proc/version就可以查看到,如下:
android@ubuntu:~/working_directory$ adb shell cat proc/version
Linux version 2.6.29-00261-g0097074-dirty ([email protected]) (gcc version 4.4.0 (GCC) ) #20 Wed Mar 31 09:54:02 PDT 2010
android@ubuntu:~/working_directory$
從kernel版本可以看到現在使用的還是google在2010編譯的kernel,那怎麼下載/編譯/運行自己的kernel呢?
二. 下載kernel
下載方法請參考老羅的博客
http://blog.csdn.net/luoshengyang/article/details/6564592
不過有個地方要注意,跟第1篇帖子類似,由於地址被牆,不能下載成功(至少我沒有成功...)
所以得去清華大學的鏡像站下載
下載地址https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git
1. 新建kernel目錄
mkdir kernel
cd kernel
2. git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git
clone完成後進入goldfish目錄
3. cd goldfish
4. git branch -a 查看遠程分支
android@ubuntu:~/working_directory/kernel/goldfish$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/android-3.10
remotes/origin/android-3.18
remotes/origin/android-3.4
remotes/origin/android-goldfish-2.6.29
remotes/origin/android-goldfish-3.10
remotes/origin/android-goldfish-3.10-l-mr1-dev
remotes/origin/android-goldfish-3.10-m-dev
remotes/origin/android-goldfish-3.18-dev
remotes/origin/android-goldfish-3.4
remotes/origin/android-goldfish-3.4-l-mr1-dev
remotes/origin/linux-goldfish-3.0-wip
remotes/origin/master
android@ubuntu:~/kerle_test/goldfish$
5. 切換到android-goldfish-2.6.29分支,因爲這個分支和2.3版本是最相近的。
git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29
6. 查看本地分支和遠程分支對應情況
git branch -avv
可以看到我們本地所處的android-goldfish-2.6.29分支和遠程分支“4bb8fa0 [origin/android-goldfish-2.6.29] goldfish: Add encrypted SD Card support.”是對應的。
至此,kernel代碼就下載完成了。
另外,我發現默認下載的kernel文件夾是goldfish,不知道爲啥老羅的是common,也許他的git命令指定了文件夾吧。
三. 編譯kernel
編譯kernel的話請參考老羅的方法,配置交叉編譯環境,使用make命令編譯
http://blog.csdn.net/luoshengyang/article/details/6564592
ps:
make menuconfig是啓動配置菜單,可以配置編譯選項。
四. 運行自己的kernel
emulator -kernel ./kernel/common/arch/arm/boot/zImage
老羅的命令是emulator -kernel ./kernel/common/arch/arm/boot/zImage &
但是發現沒有這個&也是可以運行的
五. 驗證是不是自己的kernel
等模擬器啓動完成後,跟第一步一樣,在命令行裏面輸入adb shell cat proc/version
查看輸出的內容和第一步是不是不一樣了呢?