1. 程式人生 > >下載並編譯Android模擬器Linux核心goldfish教程

下載並編譯Android模擬器Linux核心goldfish教程

1. 下載goldfish原始碼 在Android原始碼根目錄下新建kernel資料夾:
$ mkdir kernel
$ cd kernel
下載原始碼:
$ git clone http://android.googlesource.com/kernel/goldfish.git
下載完畢會在kernel目錄下會生成一個goldfish資料夾,進入此目錄:
$ cd goldfish
此目錄下有一個隱藏的目錄.git,檢視所有分支:
$ git branch -a
如下圖所示:

check out切換分支:
$ git checkout remotes/origin/android-goldfish-2.6.29
此時你會看到goldfish目錄下會出現很多檔案,這個時候goldfish原始碼就已經下載下來了,接下來的事情就是編譯了。 2. 編譯goldfish 匯出交叉編譯工具目錄到$PATH環境變數中去:
$ export PATH=$PATH:~/WORKING_DIRECTORY/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
我們將使用上述這個目錄下的交叉編譯器arm-eabi-gcc。然後在goldfish目錄下用gedit開啟Makefile檔案,找到這兩行文字:
# ARCH 		?= (SUBARCH)
# CROSS_COMPILE	?=
修改為:
ARCH 		?= arm
CROSS_COMPILE	?= arm-eabi-
注意:ARCH ?= 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_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檔案。 3. 在模擬器中啟動編譯好的核心 接下來再執行以下指令:
$ 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
輸出結果如下圖所示:

參考: http://blog.csdn.net/flydream0/article/details/7070392