Build Android-x86 ICS 4 Virtualbox from Google Virtualbox Target and Intel Kernel 編譯體驗

weixin_34126215發表於2013-09-20

最近一直在研究android原始碼的編譯,應該說研究的很辛苦,最難的是下原始碼,總是不停的斷掉,最後感謝公司的高網速,找到方法後12G的原始碼只花了1個小時就下完了。

參考以下網址:http://software.intel.com/en-us/blogs/2012/03/06/hands-on-notesbuild-android-x86-ics-4-virtualbox-from-google-virtualbox-target-and-intel-kernel

一、環境設定:

官網上已經寫明ubuntu10.04,如果用其它版本編譯,可能會出現許多奇怪的問題,我採用的為ubuntu10.04-desktop-64bit,參考文章:http://www.cnblogs.com/jqyp/archive/2012/02/27/2369291.html

1、jdk的安裝

去jdk官網下載此檔案:jdk-6u45-linux-x64.bin,然後是安裝和設定java的環境變數,參考此網址:http://blog.csdn.net/jjjkl81/article/details/5895845

配置java環境變數,假設使用者名稱為:sa

# sudo gedit /home/alex/.bashrc 
在 .bashrc檔案中加入: 

export JAVA_HOME=/usr/lib/jvm/java/jdk1.6.0_45
export JRE_HOME=/usr/lib/jvm/java/jdk1.6.0_45/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib 
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

 

2、安裝依賴庫

$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
  x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
  libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
  libxml2-utils xsltproc

3、升級git,現在要求git版本最低1.7.2,因此如果發現下載的git低於1.7.2,可作如下動作:

$ sudo add-apt-repository ppa:git-core/ppa
$ sudo apt-get update
$ sudo apt-get install git-core curl

二、原始碼下載

(一)android4.0.1_r1原始碼下載

建議先改/etc/hosts檔案,增加檔案如下:
74.125.237.1      dl-ssl.google.com
74.125.31.82    www.googlesource.com 74.125.31.82    android.googlesource.com 203.208.46.172   cache.pack.google.com 59.24.3.173     cache.pack.google.com

1、下載Repo

$ mkdir ~/bin 
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo 
正常情況下,你已經在hosts中做了相應的更改並且重啟了機器,是不會出錯的了,如果很不幸,你連不上去,可參考這篇文章:http://www.w3c.com.cn/repo-%E8%8E%B7%E5%8F%96android%E6%BA%90%E7%A0%81,此文章可以得到可用的repo。之前我主要就是卡在域名對映這一塊,怎麼都下載不了,然後用上篇的方法下到了repo,也下到了一部份原始碼,可惜最多也只下到了5G,然後就一直連不上了,足足卡在這兒一個多星期,無比的痛苦。

2、修改執行許可權:

$ chmod a+x ~/bin/repo

3、建立並進入原始碼目錄:

$ mkdir android-4.0.1_r1
$ cd android-4.0.1_r1

4、下載android-4.0.1_r1的原始碼

$ repo init -u https://android.googlesource.com/platform/manifest

$ git --git-dir .repo/manifests/.git/ branch –a

$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

$ repo sync

這一步正常的話,就是等待原始碼下載結束了,大約有12G多點。如果中途斷掉了,你可以重新執行以下命令,得以繼續下載。

$ repo sync

(二)kernel_sdk_x86原始碼下載

http://software.intel.com/en-us/blogs/2012/03/06/hands-on-notesbuild-android-x86-ics-4-virtualbox-from-google-virtualbox-target-and-intel-kernel此網頁中有一個Intel外掛的介紹:kernel_sdk_x86.tar.gz,這個是必須要用到的,點選其中的連結Intel_x86_sysimg_2.3.7_Source_Files.zip,將其下載下來即可,建議解壓縮直接到linux環境下進行,因在windows環境下會有檔案覆蓋的現象,恐會導致後面的編譯出錯。

三、原始碼編譯:

(一)kernel_sdk_x86原始碼編譯

1、之前下載的zip解壓後有一個壓縮包kernel_sdk_x86.tar.gz,這個正是我們需要的核心原始碼,將其再解壓,放置於home目錄,與android-4.0.1_r1目錄處於同一級

$ cd ~/kernel_sdk_x86

$ cp arch/x86/configs/vbox_defconfig  .config

$ make  ARCH=x86 menuconfig

彈出以下對話方塊:

image

特別注意:不能選中64-bit kernel,否則很可能編到最後會出錯,再選中兩處:

Device Driver->Input Device Support –> Mice

Network Device –>Wireless

點選Esc鍵(可能是兩次)退出儲存

2、編譯(j代表執行緒,一般用處理器數的2倍,我的有4核,所以用8執行緒編譯)

$ make ARCH=x86 –j8

After the compiling, if you see the last line that Kernel: arch/x86/boot/bzImage is ready .Then, your make is successful.

(二)android-4.0.1_r1原始碼編譯

1、進入原始碼目錄

cd ~/android-4.0.1_r1

2、拷貝核心資訊到此目錄

cp ~/kernel_sdk_x86/arch/x86/boot/bzImage ~/android-4.0.1_r1/prebuilt/android-x86/kernel/kernel-vbox
cp ~/kernel_sdk_x86/vmlinux ~/android-4.0.1_r1/prebuilt/android-x86/kernel/vmlinux-vbox

3、編譯原始碼

source build/envsetup.sh

你應該能看到以下資訊:

including device/samsung/maguro/vendorsetup.sh
including device/samsung/tuna/vendorsetup.sh
including device/ti/panda/vendorsetup.sh
including sdk/bash_completion/adb.bash

4、lunch

$ lunch

出現以下資訊:

1. full-eng
2. full_x86-eng
3. vbox_x86-eng
4. full_maguro-userdebug
5. full_tuna-userdebug
6. full_panda-eng

Which would you like? [full-eng] 3   (Note: make sure you select 3.vbox_x86-eng)

5、編譯

$ make   -j8
編譯時間比較久,完了後會看到生成了一堆.img檔案。

6、設定DNS

echo "Net.eth0.dns1 = 8.8.8.8"  >> ~/android-4.0.1_r1/out/target/product/vbox_x86/root/default.prop
echo "Net.dns1 = 8.8.8.8"  >> ~/android-4.0.1_r1/out/target/product/vbox_x86/root/default.prop

7、安裝virtualbox

apt-get install virtualbox-ose

8、編譯成vdi檔案

$ make android_disk_vdi –j8

$ make installer_vdi  -j8

 

四、總結

至此,android原始碼基本算是結束了,關於jdk的安裝稍顯複雜了點,後面有機會我會測試直接通過命令安裝是否不需要這麼麻煩,virtualbox是必須要安裝的,否則無法生成vdi檔案,同樣,第2步拷貝的內容也是必須的,之前我忘記了這一步驟,結果一直報錯No rule to make target,把我折騰好久。

相關文章