歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 在Ubuntu上編譯 emulat Android avd內核源代碼(Linux Kernel)

在Ubuntu上編譯 emulat Android avd內核源代碼(Linux Kernel)

日期:2017/3/1 9:47:51   编辑:Linux編程

/*********************************************************************
* Author : Samson
* Date : 02/28/2014
* Test platform:
* Linux Ubuntu 3.2.0-58-generic-pae
* GNU bash, version 4.2.39
* *******************************************************************/

The goldfish project contains the kernel sources for the emulated platforms.

一、首先,到

git clone https://Android.googlesource.com/kernel/goldfish.git下載Linux Kernel for Android emulator源代碼。

1、使用GIT工具下載,執行以下命令:
USER-NAME@MACHINE-NAME:~/$ git clone https://android.googlesource.com/kernel/goldfish.git
同樣是經過漫長的等待後,在home目錄下有一個goldfish目錄,Linux內核代碼就在這裡了。
2、下載完成後,可以查看下載的內核代碼版本:
USER-NAME@MACHINE-NAME:~$ cd goldfish
USER-NAME@MACHINE-NAME:~/goldfish$ ls -a
. .. .git

3、 .git include 內核源代碼,現在我們需要適用於模擬器用的內核,因此,我們需要checkout goldfish版本:
USER-NAME@MACHINE-NAME:~/goldfish$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/android-goldfish-2.6.29
remotes/origin/android-goldfish-3.4
remotes/origin/linux-goldfish-3.0-wip
remotes/origin/master
選擇remotes/origin/android-goldfish-3.4:
USER-NAME@MACHINE-NAME:~/my_android/kernel/goldfish$ git checkout remotes/origin/android-goldfish-3.4

二、編譯內核代碼。
1、導出交叉編譯工具目錄到$PATH環境變量中去:
USER-NAME@MACHINE-NAME:~/my_android/kernel/goldfish$
export ARCH=arm
export SUBARCH=arm
export PATH=$PATH:/home/v0idp0int/tools/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin
export CROSS_COMPILE=m-linux-androideabi-

2、現在是要得到android的內核編譯參數的配置文件的時候了,該文件需要從已經安裝好的android的模擬器
中得到才行。所以安裝android的sdk也是必須的,
首先啟動android模擬器,然後通過adb得到模擬器中提供的內核配置文件:
USER-NAME@MACHINE-NAME:emulator &
USER-NAME@MACHINE-NAME:adb pull /proc/config.gz .
這時候adb工具會連接模擬器,並從它裡面下載一個叫做config.gz的文件到你的當前目錄下。
把它拷貝到你的kernel/goldfish目錄:
USER-NAME@MACHINE-NAME:cd ~/my_android/kernel/goldfish
USER-NAME@MACHINE-NAME:cp ~/config.gz
解壓縮該文件,並重命名為.config,這一步做了就可以跳過make menuconfig之類的內核參數設置
動作了。
USER-NAME@MACHINE-NAME:gunzip config.gz
USER-NAME@MACHINE-NAME:mv config .config
若是重新編譯一個模擬器的內核版本的話,使用命令make goldfish_defconfig 或者make goldfish_armv7_defconfig產生的.config來編譯內核。
3、 開始編譯:
USER-NAME@MACHINE-NAME:~/goldfish$ make goldfish_defconfig(若操作了第3步,則該命令可省略)
USER-NAME@MACHINE-NAME:~/goldfish$ make

編譯成功後,可看到下面兩行:
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready

三、在模擬器中運行編譯好的內核。
1、在啟動模擬器之前,先設置模擬器的目錄到環境變量$PATH中去:
USER-NAME@MACHINE-NAME:~/my_android$ export PATH=$PATH:~/my_android/out/host/linux-x86/bin
2、設置ANDROID_PRODUCT_OUT環境變量:
USER-NAME@MACHINE-NAME:~/my_android$ export ANDROID_PRODUCT_OUT=~/my_android/out/target/product/generic
3、 在後台中指定內核文件啟動模擬器:
USER-NAME@MACHINE-NAME:~/my_android$ emulator -kernel /opt/hackandroid/goldfish_0228/arch/arm/boot/zImage -avd Android4.2.2

Note: run the command after, emulator is black or empty, please hand on power-on button on the emulator UI.
4、用adb工具連接模擬器,查看內核版本信息,看看模擬器上跑的內核是不是我們剛才編譯出來的內核:
USER-NAME@MACHINE-NAME:~/my_android$ adb shell
這時候如果是第一次運行 adb shell命令,會看到以下輸出,不用管它,再運行一次adb shell命令就可以了。
* daemon not running. start it now on port 5037 *
* daemon started successfully *
error: device offline
切換到proc目錄:
root@generic:/ # cat /proc/version
Linux version 3.4.0-g48b9692 (v0id@ubuntu) (gcc version 4.6.2 (Linaro GCC 4.6-2011.11) ) #1 PREEMPT Fri Feb 28 06:44:40 PST 2014

從日期 Fri Feb 28 06:44:40 PST 2014可以看出,模擬器使用的內核即為剛剛編譯出來的內核。

Linux Kernel 的詳細介紹:請點這裡
Linux Kernel 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved