前一段时间一直在弄毕业论文和答辩的事情,还要急着赶回来上班,已经有一段时间没有弄Android开发了,话不多说,在老罗前一篇文章提到,从源代码树下载下来的最新Android源代码,是不包括内核代码的,也就是Android源代码工程默认不包含Linux Kernel代码,而是使用预先编译好的内核,也就是prebuilt/android-arm/kernel/kernel-qemu文件。众所周知,一个新的Android系统必须使用自己的Android内核,才可以添加一些特有的功能,进行一些定制化的开发,那么怎样运行自己的Android内核呢?因为谷歌官网上已经有可以下载到的Android内核源码,还有就是三星和HTC也公布了自己的Android内核源码,让开发者可以有更大权限开发一些特定的应用,本人愚见,这种策略对于三星和HTC也有很大的利益!

   因为谷歌上有可以在模拟器中运行的goldfish Android内核源码,用这个来学习DIY Android内核是非常好的选择,我在学习过程中主要参考了老罗的Android之旅,具体参考如下:

参考文档:

另外我想说的是,任何知识都需要亲自去尝试,才能学得更牢!

一 ==下载Linux Kernel for Android源代码。

      1. 使用GIT工具下载,执行以下命令:

      USER-NAME@MACHINE-NAME:~/Android$ mkdir kernel


      USER-NAME@MACHINE-NAME:~/Android$cd kernel



      然后转到刚才同步的文件中,我同步之后只有一个goldfish目录


     

Android使用Selector Android使用blink内核demo_android


     接着就是检出能够在Android模拟器中运行的Android内核源码,cd goldfish ;接着git checkout remotes/origin/archive/android-gldfish-2.6.29


 


==编译下载下来的Android内核源码goldfish


1. 导出交叉编译工具目录到$PATH环境变量中去:

   

USER-NAME@MACHINE-NAME:~/Android/kernel/common$export PATH=$PATH:~/Android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin 
 
 
 
     2. 
 
 
 
        # ARCH  ?= (SUBARCH) 
 
 
 
 
        # CROSS_COMPILE 
   
  ?= 
 
 
 
 
   ?= arm  #体系结构为arm 
 
 
 
 
  ?= arm-eabi- #交叉编译工具链前缀, 
  参考~/Android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin目录 
 
 
 
 
  3. 开始编译: 
 
 
 
      USER-NAME@MACHINE-NAME:~/Android/kernel/common$make goldfish_defconfig
 
 
 
  



出现莫名错误,make: ***/root/build_kernel/linux-2.6.14.1/arch/arm Is a directory .Stop



网上查询得知,原来是原来是因为 ARCH ?= arm后面多了一个空格的缘故,我以为是配置错误了!!!囧!!!



修改Makefile,把空格去掉,接着编译



      USER-NAME@MACHINE-NAME:~/Android/kernel/common$make



成功编译了!



Android使用Selector Android使用blink内核demo_fish_02



三==运行编译成功的Android内核



emulator -kernel /home/hu/android-2.3/kernel/goldfish/arch/arm/boot/zImage



用adb shell 查看运行的内核信息




Android使用Selector Android使用blink内核demo_android_03


      显示运行正是刚才编译成功的Android内核


接下来做的应该是在网上下载一个对应于自己的手机Android内核,然后编译一下,下载到手机中用用,这才能正真感受到DIY Android内核的魅力!


附上小米论坛上一位机友编译htc Android内核的图文教程