现在的位置: 首页 > 综合 > 正文

Android内核的编译与裁剪

2013年06月11日 ⁄ 综合 ⁄ 共 2140字 ⁄ 字号 评论关闭
文章目录

概述

如果我们仅仅对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.git

goldfish这个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

编译完毕之后,再去看看编译好的映像,没什么问题的话,发现新映像比未裁剪编译出的映像小了。

抱歉!评论已关闭.