如果不愿使用android系统源代码预编译好的内核,就需要自己编译内核。
一、通过git工具下载最新版的android linux kernel源代码
1、在android源代码根目录中,新建kernel目录
~/Android$ cd mkdir kernel
~/Android$ cd kernel
2、下载适合模拟器平台的内核源代码
~/Android/kernel$ git clonehttp://android.googlesource.com/kernel/goldfish.git
需要其他平台内核源代码,可以查阅android官网内核编译页面:
http://source.android.com/source/building-kernels.html
clone完成后,有一个空的目录goldfish,此目录下有一个隐藏的目录.git,进入该目录,查看该分支上都有哪些分支版本
~/Android/kernel$cd goldfish
~/Android/kernel/goldfish$git branch -a
选择goldfish最新版本,把这个版本check out到本地
~/Android/kernel$git checkoutremotes/origin/archive/android-gldfish-2.6.29
这个时候goldfish源码就已经下下来了,接下来的事情就是编译了.
二、编译内核源代码
1、设置交叉编译工具gcc的路径到环境变量PATH
~/Android$ export PATH=$(pwd)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH
我们将使用上述这个目录下的交叉编译器arm-eabi-gcc
确保有预编译目录prebuilt,没有的话,需要clone下来
~/Android$git clone https://android.googlesource.com/platform/prebuilt
2、设置环境变量:指明目标设备的体系架构和交叉编译器
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=arm-eabi-
为arm体系架构和arm-eabi-类型编译器
3、开始编译
~/Android/kernel/goldfish$make goldfish_armv7_defconfig
~/Android/kernel/goldfish$ make
注:用$make goldfish_defconfig这样配置也可以编译通过,模拟器也可以启动,但是Android的开机画机就显示不了, $adb shell也死活连不上,原因就是这个goldfish_defconfig这个配置文件问题.
提示:
$make goldfish_armv7_defconfig指令的意思是将目录WORKING_DIRECTORY/kernel/goldfish/arch/arm/configs/下的goldfish_armv7_defconfig文件内的Kconfig配置内容复制到WORKING_DIRECTORY/kernel/goldfish/目录下的.config文件中,.config文件是一个隐藏目录,保存着各个目录下Kconfig文件的配置.
4、查看编译的镜像文件zImage
~/Android/kernel/goldfish$ ls arch/arm/boot/
三、在模拟器中运行编译好的内核
1、运行模拟器前先设置模拟器的路径到环境变量PATH中去,同时设置ANDROID_PRODUCT_OUT环境变量
$ export PATH=$PATH:~/WORKING_DIRECTORY/out/host/linux-x86/bin
$ export ANDROID_PRODUCT_OUT=~/WORKING_DIRECTORY/out/target/product/generic
2、指定新编译的内核文件启动模拟器
$ emulator -kernel ~/WORKING_DIRECTORY/kernel/goldfish/arch/arm/boot/zImage &
3、用adb(android调试桥)工具连接模拟器,查看内核版本信息,看看模拟器上跑的内核是不是我们刚才编译出来的内核
$adb shell
4、切换到proc目录,查看内核版本
$cd proc
$cat version