前一段时间一直在弄毕业论文和答辩的事情,还要急着赶回来上班,已经有一段时间没有弄Android开发了,话不多说,在老罗前一篇文章提到,从源代码树下载下来的最新Android源代码,是不包括内核代码的,也就是Android源代码工程默认不包含Linux Kernel代码,而是使用预先编译好的内核,也就是prebuilt/android-arm/kernel/kernel-qemu文件。众所周知,一个新的Android系统必须使用自己的Android内核,才可以添加一些特有的功能,进行一些定制化的开发,那么怎样运行自己的Android内核呢?因为谷歌官网上已经有可以下载到的Android内核源码,还有就是三星和HTC也公布了自己的Android内核源码,让开发者可以有更大权限开发一些特定的应用,本人愚见,这种策略对于三星和HTC也有很大的利益!
因为谷歌上有可以在模拟器中运行的goldfish Android内核源码,用这个来学习DIY Android内核是非常好的选择,我在学习过程中主要参考了老罗的Android之旅,具体参考如下:
参考文档:http://blog.csdn.net/luoshengyang/article/details/6564592
另外我想说的是,任何知识都需要亲自去尝试,才能学得更牢!
一 ==下载Linux Kernel for Android源代码。
1. 使用GIT工具下载,执行以下命令:
USER-NAME@MACHINE-NAME:~/Android$ mkdir kernel
USER-NAME@MACHINE-NAME:~/Android$cd kernel
USER-NAME@MACHINE-NAME:~/Android/kernel$git clone http://android.googlesource.com/kernel/goldfish.git
然后转到刚才同步的文件中,我同步之后只有一个goldfish目录
接着就是检出能够在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.
修改common目录下的Makefile文件的以下两行为:
# ARCH ?= (SUBARCH)
# CROSS_COMPILE
?=
ARCH ?= arm #体系结构为arm
CROSS_COMPILE ?= 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内核
emulator -kernel /home/hu/android-2.3/kernel/goldfish/arch/arm/boot/zImage
用adb shell 查看运行的内核信息
显示运行正是刚才编译成功的Android内核
接下来做的应该是在网上下载一个对应于自己的手机Android内核,然后编译一下,下载到手机中用用,这才能正真感受到DIY Android内核的魅力!
附上小米论坛上一位机友编译htc Android内核的图文教程
http://www.miui.com/thread-683503-1-1.html,有htc手机的程序猿可以试试!!!