如果我们仅仅对Android内核感兴趣,我们可以选择合适的Android内核下载并编译。
可供选择的内核源码有很多版本:
$ git clone https://android.googlesource.com/kernel/common.git $ git clone https://android.googlesource.com/kernel/exynos.git $ git clone https://android.googlesource.com/kernel/goldfish.git $ git clone https://android.googlesource.com/kernel/msm.git $ git clone https://android.googlesource.com/kernel/omap.git $ git clone https://android.googlesource.com/kernel/samsung.git $ git clone https://android.googlesource.com/kernel/tegra.gitgoldfish这个project包含了适合于模拟器平台的源码;
msm这个project包含了适合于ADP1、ADP2、Nexus One、Nexus 4的源码,并且可以作为高通MSM芯片组开发定制内核工作的起始点;
omap这个project包含了适合于PandaBoard、Galaxy Nexus的源码,并且可以作为德州仪器OMAP芯片组内核开发定制工作的起始点;
samsung这个project包含了适合于Nexus S的源码,并且可以作为三星蜂鸟芯片组内核开发定制工作的起始点;
tegra这个project包含了适合于Xoom和Nexus 7的源码,并且可以作为英伟达图睿芯片组内核开发定制工作的起始点;
exynos这个project包含了适合与Nexus 10的源码,并且可以作为三星猎户座芯片组内核开发定制工作的起始点。
1. 我选择的是goldfish这个版本,也即把goldfish给clone下来即可。
$ mkdir AndroidKernel $ git clone https://android.googlesource.com/kernel/goldfish.git
需要等待一会,视网速而定:
2. 接着进入goldfish,发现里面没有文件,别急,我们还要选择分支,下载真正的源码:
可以通过执行:
$ git branch -a
来查看所有分支,接着:
$ git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29
下载源码:
3. 下载编译所必需的prebuilt工具:
$ git clone https://android.googlesource.com/platform/prebuilt
等待一会:
4. 将prebuilt工具添加到环境变量中以备后续使用:
$ export PATH=$(pwd)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH
5. 接着配置其他必要的环境变量:
$ export ARCH=arm $ export SUBARCH=arm $ export CROSS_COMPILE=arm-eabi-
6. 我们执行:
$ make goldfish_defconfig
来在内核源码根目录下生成一个默认的.config文件:
7. 最后,我们就可以编译了:
$ make
编译过程截图:
映像的输出为:arch/arm/boot/zImage,这样就通过默认的配置完成了Android内核的编译。
裁剪要用到一个很有用的命令:
$ make menuconfig
上述命令的运行需要以下库,必须提前安装:
$ sudo apt-get install ncurses-dev
make menuconfig这个命令在编译Linux内核时会用到,有关于它的详细说明可以参考以下地方,详细阅读:
http://blog.csdn.net/xdw1985829/article/details/6833319
http://hi.baidu.com/modygewlmsdnpre/item/b604b1c2ff676b1450505825
http://www.linuxidc.com/Linux/2012-06/63092.htm
简单说来就是编译的过程中编译器通过配置文件得知如何编译,得知该把哪个模块编译进去。这个命令会打开一个蓝色的命令行菜单让你更改编译时的配置,在裁剪时也会通过这个命令打开一个菜单来更改编译配置,在退出时如果有变化它会自动提示你保存。
我们在make menuconfig打开的菜单中修改菜单项进行裁剪,这个菜单还是很友好的,你一下就能知道改如何根据需要裁剪,裁剪完成后,退出时询问是否保存,当然要保存(实际上是更新了上文中所述的默认的源码根目录下的.config文件)。
接着我们就可以编译裁剪之后的内核了(当然,编译过程中读取的也是更新后的配置文件):
$ make
编译完毕之后,再去看看编译好的映像,没什么问题的话,发现新映像比未裁剪编译出的映像小了。