歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android 4.0.1 模擬器內核 最新下載地址及編譯步驟

Android 4.0.1已經放出來了,但是其模擬器內核是預編譯的bianry。沒有提供內核源代碼。 想自己編譯一個內核,這樣子可以改內核代碼完,可是找了網上的資料,發現都已經過時了。 本文提供最新的 地址和方法。

由於android kernel的部分封閉策略,kernel org已經將 android kernel踢出主線。原有的 同步地址已經被重定向,再加上android kernel本身結構的調整,很多原來的同步方法已經不能使用。 下面是最新的方法,適用於編譯 android 4.0.1 模擬器的內核 ( qemu kernel, goldfish branch)。


原有的方法大多使用一下地址同步 android goldfish

  1. $ git clone git://android.git.kernel.org/kernel/common.git  
  2.   
  3. $ cd common  
  4.   
  5. $ git branch -a  
  6.   
  7. $git checkout remotes/origin/archive/android-gldfish-2.6.29  
但是我們可以在 浏覽器裡輸入
  1. android.git.kernel.org/kernel/common.git  
它實際上已經被重定向到
  1. android.googlesource.com/kernel/common.git  
但是這個repo 裡已經不包含 goldfish的分支了。如果同步下來後我們用 git branch -a 將看到只有最新的 3.0 和2.6.39的分支:
  1. $git branch -a  
  2. * (no branch)  
  3.   master  
  4.   remotes/origin/HEAD -> origin/master  
  5.   remotes/origin/android-2.6.39  
  6.   remotes/origin/android-3.0  
  7.   remotes/origin/master  

其實 goldfish分支已經被獨立為一個單獨的repo:http://android.googlesource.com/kernel/goldfish.git

以下是最新的正確的 同步步驟:

  1. $git clone http://android.googlesource.com/kernel/goldfish.git  
  2. $cd goldfish  
  3. $git branch -a  
  4. * (no branch)  
  5.   master  
  6.   remotes/origin/HEAD -> origin/master  
  7.   remotes/origin/android-goldfish-2.6.29  
  8.   remotes/origin/master  
  9. $git checkout <pre name="code" class="plain">remotes/origin/android-goldfish-2.6.29  

編譯步驟基本沒有變,但需要使用新的config:

  1. $ make ARCH=arm goldfish_armv7_defconfig  
  2. $make ARCH-arm CROSS_COMPILE=arm-eabi-   
  3.   
  4. ...  
  5. OBJCOPY arch/arm/boot/zImage  
  6.   Kernel: arch/arm/boot/zImage is ready  

然後就可以用著新的kernel img 來啟動模擬器了:

  1. $emulator -kernel ...../kernel/goldfish/arch/arm/boot/zImage &  
啟動模擬器,到 Setting => About 去看,kernel的確編程我們自己編譯的版本。 可以手工了。

另外,Google 似乎有意提供一個簡單腳本來編譯 kernel,可以看看 external/qemu/docs/ANDROID-KERNEL.TXT 有提到那個 distrib/rebuild-kernel.sh.

但搜索後這個文件並不存在。最接近的兩個腳本是 prebuild/android-arm/kernel/rebuild.sh.

但是這個腳本明顯的是個半成品,--help裡的信息和腳本的實現還是有出去的。正確的用法是:

  1. $cd ics/platform  ( your $TOP)  
  2. $prebuild/android-arm/kernel/rebuild.sh kernel/goldfish/   (剛才同步的goldfish kernel 目錄)  
編譯可以順利完成,並且生成的新的kernel 會被自動拷貝到 prebuild/android-arm/kernel 裡去。但是如果不指定 kernel img 啟動,發現用的還是原來自帶的的img。
還是需要再啟動 emulator是 用 -kernel 參數 顯式的指定編譯出來的img:
  1. ./emulator -avd ics -kernel  <$TOP>/prebuilt/android-arm/kernel/kernel-qemu-armv7  
這樣子的話,google提供的這個腳本根本就是雞肋了...
Copyright © Linux教程網 All Rights Reserved