下面進入正題:
linux
第一步:下載goldfish源碼android
在Android源碼根目錄下新建kernel文件夾git
$mkdir kernel shell
$cd kernel 工具
下載源碼:ui
$git clone http://android.googlesource.com/kernel/goldfish.git google
下載完畢以下圖:spa
此時在kernel目錄下會生成一個goldfish文件夾。進入此目錄:.net
cd goldfish
此目錄下有一個隱藏的目錄.git,經過code
ls -al
可看到此目錄:
查看全部分支:
git branch -a
以下圖:
check out:
git checkout remotes/origin/android-goldfish-2.6.29
此時你會看到goldfish目錄下會出現不少文件:
ls
這個時候goldfish源碼就已經下下來了,接下來的事情就是編譯了.
第二步:編譯goldfish
導出交叉編譯工具目錄到$PATH環境變量中去.
export PATH=$PATH:/uslocalandroidsource/bin/WORKING_DIRECTORY/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
咱們將使用上述這個目錄下的交叉編譯器arm-eabi-gcc
而後在glodfish目錄下用gedit打開Makefile文件,找到這兩行文字:
# ARCH ?= (SUBARCH)
# CROSS_COMPILE?=
修改成:
ARCH ?= arm
CROSS_COMPILE ?= arm-eabi-
gedit Makefile
注意:ARTH ?=arm,的arm後邊不要有空格,否則就會出現以下相似錯誤:
Make:...../kernel/goldfish/arch/arm: Is a directory. Stop.
害我白白浪費了幾個小時.
關閉gedit,接下來就開始make了,執行以下指令:
$ make goldfish_armv7_defconfig
$ make
注:用$make goldfish_defconfig這樣配置也能夠編譯經過,模擬器也能夠啓動,可是Android的開機畫機就顯示不了,$adb shell也死活連不上,緣由就是這個goldfish_defconfig這個配置文件問題.
提示:
$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/
能夠看到zImage文件.
第三步:在模擬器中啓動編譯好的內核
$ export PATH=$PATH:/usr/local/androidsource/bin/WORKING_DIRECTORY/out/host/linux-x86/bin
$ export ANDROID_PRODUCT_OUT= /usr/local/androidsource/bin/WORKING_DIRECTORY/ out/target/product/generic
$ emulator -kernel /usr/local/androidsource/bin/WORKING_DIRECTORY/kernel/goldfish/arch/arm/boot/zImage &
模擬器啓動界面:
進入模擬器從設置裏看版本信息:
從上圖能夠看出當前Android版本是4.0.1,內核版本是2.6.29,說明成功了.
一樣也能夠經過adb shell來查看內核版本信息,以下圖:
$adb shell
#cd proc
#cat version
完!