在以前的文章中,为读者介绍了《Ubuntu Linux下android源码下载方法》、《Ubuntu11.10下配置android的Eclipse开发环境》、配置过程当中遇到的一些问题,以及《Ubuntu11.10下android源码4.0.3的编译方法》。本文继续为读者介绍Ubuntu11.10下android内核的编译方法。linux
编译android源码时并不会自动编译android内核,所以须要手动编译这部分代码。编译内核所用的时间比编译android源码要少得多,只需一会就编译完成。android
一、肯定内核版本git
进入存放android内核源码的kernel目录,我下载了common.git与goldfish.git,以goldfish为例,进入goldfish目录,在命令行输入如下命令,显示全部分支及当前所在的分支:shell
$git bransh -a
输出结果以下:bash
* master remotes/origin/HEAD -> origin/master remotes/origin/android-goldfish-2.6.29 remotes/origin/master
输入如下命令选择当前的最新版本(goldfish为android的模拟器描述的CPU):工具
$git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29
再次输入命令git branch -a,将会显示刚刚选择的最新分支,表示目前工做在这个被选择的分支上,输出以下:ui
* android-goldfish-2.6.29 master remotes/origin/HEAD -> origin/master remotes/origin/android-goldfish-2.6.29 remotes/origin/master
二、设定环境变量命令行
在编译android内核时,须要使用交叉编译器。在所下载的android源码树中有一个prebuilt文件夹,包含了编译内核所需的交叉编译工具,所以要将其设置到环境变量中去,以方便使用。打开用户目录下的.bashrc文件,在后面添加以下代码code
export PATH=$PATH:~/android/source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin export ARCH=arm
保存并退出,经过如下命令在用户目录下进行更新。ip
$source ~/.bashrc
因为有可能在添加以后没有及时更新,致使在编译时提示错误,如找不到交叉编译工具目录等,所以这里须要更新(若是加入了环境变量仍在编译时提示找不到交叉编译工具目录,能够尝试多更新几回)。
三、设定交叉编译参数
在编译以前还须要设定编译时所使用的交叉编译参数。
首先,打开android/kernel/goldfish/目录下的Makefile文件,找到CROSS_COMPILE变量,将其指向android源码提供的prebuilt中的arm-eabi编译器,代码以下所示:
CROSS_COMPILE ?= arm-eabi-
以后找到以下代码:
LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\ $(call ld-option, -Wl$(comma)--build-id,))
将其删除或注释掉(建议注释掉便可,以备之后会使用到),并添加一个空的LDFLAGS_BUILD_ID定义,以下所示:
#LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\ # $(call ld-option, -Wl$(comma)--build-id,)) LDFLAGS_BUILD_ID =
四、编译内核源码
设置完以后,就是编译android内核源码了,进入goldfish目录,输入如下命令
$make goldfish_defconfig $make
第一条命令为编译时的默认配置文件。若是不执行这条命令,编译时可能会提示“找不到配置文件”。第一条命令执行完后,会在goldfish目录下生成一个.config文件。
以后即是一段时间的等待了。。。时间不长,一会便可编译好,比编译android源码时间要少得多。
五、编译完成以后,会在“kernel/arch/arm/boot/”目录下生成名为zImage的文件。