轉自:http://blog.csdn.net/flydream0/article/details/7070392
關於如何下載Android4.0源碼,請查看我的博客內另一篇文章(同樣是圖文教程):
http://blog.csdn.net/flydream0/article/details/7036156
如何編譯Android4.0源碼請看:
http://blog.csdn.net/flydream0/article/details/7046612
下面進入正題:
第一步:下載goldfish源碼
在Android源碼根目錄下新建kernel文件夾
- $mkdir kernel
- $cd kernel
- $git clone http://android.googlesource.com/kernel/goldfish.git
下載完畢如下圖:
此時在kernel目錄下會生成一個goldfish文件夾。進入此目錄:
- $cd goldfish
此目錄下有一個隱藏的目錄.git,通過
- $ls -al
可看到此目錄:
查看所有分支:
- git branch -a
check out:
- $git checkout remotes/origin/android-goldfish-2.6.29
此時你會看到goldfish目錄下會出現很多文件:
- $ls
這個時候goldfish源碼就已經下下來了,接下來的事情就是編譯了.
第二步:編譯goldfish
導出交叉編譯工具目錄到$PATH環境變量中去.
- export PATH=$PATH:~/WORKING_DIRECTORY/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
我們將使用上述這個目錄下的交叉編譯器arm-eabi-gcc
然後在glodfish目錄下用gedit打開Makefile文件,找到這兩行文字:
# ARCH?= (SUBARCH)
修改爲:
ARCH ?= arm
- $gedit Makefile
注意:ARTH ?=arm,的arm後邊不要有空格,不然就會出現如下類似錯誤:
Make:...../kernel/goldfish/arch/arm: Is a directory. Stop.
害我白白浪費了幾個小時.
上述操作的目的是爲了指定目標設備的體系架構和交叉編譯器,其實也可以通過以下指令來完成:
- $ export ARCH=arm
- $ export SUBARCH=arm
- $ export CROSS_COMPILE=arm-eabi-
爲了確保環境參數正確,接下來執行下面兩條指令,否則有可能不能正常啓動模擬器.(注:以下兩條指令是在Android源碼根目錄下執行)
- $ source build/envsetup.sh //缺少這條指令,可能會導致無法編譯通過
- $ lunch full-eng //缺少這條指令,可能會導致無法啓動模塊器,系統報無法找到AVD,並要求你創建AVD。
關閉gedit,接下來就開始make了,執行如下指令:
- $ make goldfish_defconfig
- $ make
提示:
$make goldfish_armv7_defconfig指令的意思是將目錄WORKING_DIRECTORY/kernel/goldfish/arch/arm/configs/下的goldfish_armv7_defconfig文件內的Kconfig配置內容複製到WORKING_DIRECTORY/kernel/goldfish/目錄下的.config文件中,.config文件是一個隱藏目錄,保存着各個目錄下Kconfig文件的配置.
最終結果如下圖所示:
這樣就表示編譯成功了.
- $ ls arch/arm/boot/
第三步:在模擬器中啓動編譯好的內核
按下來再運行其下指令:
- $ export PATH=$PATH:~/WORKING_DIRECTORY/out/host/linux-x86/bin
- $ export ANDROID_PRODUCT_OUT=~/WORKING_DIRECTORY/out/target/product/generic
- $ emulator -kernel ~/WORKING_DIRECTORY/kernel/goldfish/arch/arm/boot/zImage &
進入模擬器從設置裏看版本信息:
從上圖可以看出當前Android版本是4.0.1,內核版本是2.6.29,說明成功了.
同樣也可以通過adb shell來查看內核版本信息,如下圖:
- $adb shell
- #cd proc
- #cat version