在Ubuntu上編譯 emulat Android avd核心原始碼(Linux Kernel)

來源:互聯網
上載者:User

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


因為我沒有真機的環境  所以需要在模擬器中進行類比進行,所以要下載支援模擬器的原始碼版本,而goldfish這個原始碼版本就是專門為模擬器環境而提供的。

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=arm-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可以看出,模擬器使用的核心即為剛剛編譯出來的核心。

參考:

http://blog.csdn.net/luoshengyang/article/details/6564592

http://source.android.com/source/building-kernels.html

http://blog.csdn.net/farce/article/details/5901531

http://m.blog.csdn.net/blog/wuxiaoer717/9097797#


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.