Android4.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 kernel:

 

[plain]  view plain copy print ?
  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  

但是我们可以在 浏览器里输入
[plain]  view plain copy print ?
  1. android.git.kernel.org/kernel/common.git  
它实际上已经被重定向到

 

 

[plain]  view plain copy print ?
  1. android.googlesource.com/kernel/common.git  
但是这个repo 里已经不包含 goldfish的分支了。如果同步下来后我们用 git branch -a 将看到只有最新的 3.0 和2.6.39的分支:

 

 

[plain]  view plain copy print ?
  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

 

以下是最新的正确的 同步步骤:

 

[plain]  view plain copy print ?
  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</pre>  
  10. <pre></pre>  
  11. <p></p>  
  12. <p>编译步骤基本没有变,但需要使用新的config:</p>  
  13. <pre name="code" class="plain">$ make ARCH=arm goldfish_armv7_defconfig  
  14. $make ARCH=arm CROSS_COMPILE=arm-eabi-   
  15.   
  16. ...  
  17. OBJCOPY arch/arm/boot/zImage  
  18.   Kernel: arch/arm/boot/zImage is ready</pre><br>  
  19. <p>然后就可以用着新的kernel img 来启动模拟器了:</p>  
  20. <p></p>  
  21. <pre name="code" class="plain">$emulator -kernel ...../kernel/goldfish/arch/arm/boot/zImage &</pre><br>  
  22. 启动模拟器,到 Setting => About 去看,kernel的确编程我们自己编译的版本。 可以手工了。<br>  
  23. <p></p>  
  24. <p><br>  
  25. </p>  
  26. <p>另外,Google 似乎有意提供一个简单脚本来编译 kernel,可以看看 external/qemu/docs/ANDROID-KERNEL.TXT 有提到那个 distrib/rebuild-kernel.sh.<br>  
  27. </p>  
  28. <p>但搜索后这个文件并不存在。最接近的两个脚本是 prebuild/android-arm/kernel/rebuild.sh.</p>  
  29. <p>但是这个脚本明显的是个半成品,--help里的信息和脚本的实现还是有出去的。正确的用法是:</p>  
  30. <p></p>  
  31. <pre name="code" class="plain">$cd ics/platform  ( your $TOP)  
  32. $prebuild/android-arm/kernel/rebuild.sh kernel/goldfish/   (刚才同步的goldfish kernel 目录)  
  33. </pre><br>  
  34. <br>  
  35. 编译可以顺利完成,并且生成的新的kernel 会被自动拷贝到 prebuild/android-arm/kernel 里去。但是如果不指定 kernel img 启动,发现用的还是原来自带的的img。<br>  
  36. 还是需要再启动 emulator是 用 -kernel 参数 显式的指定编译出来的img:<br>  
  37. <br>  
  38. 这样子的话,google提供的这个脚本根本就是鸡肋了...<br>  
  39. <br>  
  40. <p><br>  
  41. </p>  
  42. <p><br>  
  43. </p>  
  44. <br>  
  45. <pre></pre>  

你可能感兴趣的:(Android4.0)