一直说想给用的G2编译一个Android的内核然后一直懒得研究,这几天装Gentoo倒腾PC的内核于是我说干脆手机也编译一个吧~(早已对CPU只有368-768-806MHz对选择表示十分不爽= =试着加一点中间档)
准备工具链
由于我们只需要编译内核而不需要依赖别的组件,所以对toolchain(NDK)的选择上宽松得多。大体来讲有这样几种可能性:自己编译arm-eabi的gcc toolchain,使用Sourcery的toolchain,使用Google提供的NDK构建toolchain,或者使用第三方(比如crystax)修改过的NDK。
我选择的是最后一种(我是拿下来自己编译的,也可以用预编译的版本)。
准备内核源码
我用的是CyanogenMod改过的2.6.32,从git://github.com/CyanogenMod/htc-kernel-msm7x30可以取得(从git://github.com/tyeken8/htc-kernel-msm7x30可以拿到我修改过的版本)
1
|
$ //github .com /tyeken8/htc-kernel-msm7x30
|
导出内核配置
有两种方式导出:从/proc/config.gz或者用kernel提供的脚本
注意,一定要用和内核版本相同的config,否则会出一堆诡异的问题(而且解决它们超出我的能力范围)
/proc/config.gz
1
2
|
$ /proc/config .gz $ |
extract-ikconfig
1
|
$ /extract-ikconfig
|
配置内核
1
2
3
|
$ make
... ... |
会有少许新的配置出现,看着选吧(如果新配置很多就说明你的config有问题了,自重小心)
1
|
$ make
|
看着改一些东西,比如说把werror(也就是FORCE_WARNING_AS_ERROR)去掉(我不知道为什么要开werror)
编译内核
查看了一下发现gcc在toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin,prefix是arm-linux-androideabi-。
于是
1
|
$ make
|
编译起来~
打包内核
我是拿的CM7的内核升级包来改,也可以使用这篇的方法(注意android源码从android.git.kernel.org迁移到android.googlesource.com了)
1
2
3
4
5
6
|
$ mkdir
$ cd
$ /path/to/cm7-kernel .zip $ cp
/arch/arm/boot/zImage
|