最近在做Android的一个项目,需要进行内核的编译,参考了官网上以及其他博客的教程,把自己编译内核的步骤记录下来。
1.下载Android模拟器的专用内核代码goldfish
之前我已经下载好了Android的源代码,并把源码放在了~/android目录下面。
利用Ctrl+Alt+t打开shell终端,输入下面命令:
cd ~/android
git clone http://android.googlesource.com/kernel/goldfish.git
cd goldfish
git branch -a
git checkout origin/android-goldfish-2.6.29
2.编译goldfish内核代码
在goldfish目录下面利用vim打开Makefile文件,进行如下修改:
ARCH ?=(SUBARCH)
CROSS_COMPILE ?=
修改为:
ARCH ?=arm
CROSS_COMPILE ?=arm-eabi-
保存后退出。
注意:ARCH ?=arm中的arm后边不要有空格,不然就会出现下面的错误:
Make:...../kernel/goldfish/arch/arm: Is a directory. Stop.
在shell中利用export命令导出交叉编译工具:
export PATH=$PATH:~/android/prebuild/linux-x86/toolchain/arm-eabi-4.4.3/bin
下面开始执行make命令:
make goldfish_armv7_defconfig
注:用$make goldfish_defconfig这样配置也可以编译通过,模拟器也可以正常启动,但是Android的开机画机就显示不了,模拟器启动后一直显示的是黑屏,具体的原因我不是很清除,不过就是用goldfish_defconfig这个配置文件编译出的问题,我最后换成了goldfish_armv7_defconfig后进行编译,模拟器利用goldfish_armv7_defconfig编译出来的内核启动时就可以正常进入系统了。
由于我需要让内核支持动态加载和卸载.ko模块,执行下面命令(不需要的可以直接跳过):
make menuconfig
把Enable loadable module support项按y选上
然后按回车进入选上前三项
退出时选择yes
最后在shell中执行make命令:
make
执行上面的步骤就可以完成Android内核代码的编译。编译后的内核为goldfish/arch/arm/boot/zImage