编译nexus5的linux kernel源码

ubuntu14.04编译android4.4对应的linux内核 中讲述了适用于模拟器的linux kernel源码编译。适用于真机的有一些不同。为了能够对比,本文编译的目标是:

nexus5
android-4.4.4

0x01: 下载源码
在适用于模拟器的版本里,下载的路径是:

git clone https://android.googlesource.com/kernel/goldfish.git

而真机根据芯片组不同又有很多分支,根据官方的文档:

Paste_Image.png

我们应该选择这个路径:

git clone https://android.googlesource.com/kernel/msm.git

这个路径下都是Qualcomm MSM 芯片组的,里面包含了不同的分支,适用于不同的手机版本。

0x02: 选择分支
在第一步clone完成之后,进入msm目录,执行git branch -a查看所有分支:

Paste_Image.png

可以看到有不同版本的分支,我们针对nexus5/android-4.4.4,所以选择hammerhead,以下几个应该随便选择一个就行:

Paste_Image.png

我选择了第二个:

git checkout remotes/origin/android-msm-hammerhead-3.4-kitkat-mr2

另外一种选择和Android源码中自带kernel同版本的方法:

cd device/lge/hammerhead-kernel
bzgrep -a 'Linux version' vmlinux.bz2

得到编译的tag,比如是:

Linux version 3.4.0-gd59db4e (android-build@vpbs1.mtv.corp.google.com) (gcc version 4.7 (GCC) ) #1 SMP PREEMPT Mon Mar 17 15:16:36 PDT 2014
Linux version CIFS VFS Client for Linux<7>%s: sess setup type %d

然后,checkout对应tag的源码:

git checkout 3.4.0-gd59db4e

即可得到同版本的代码。

0x03: 编译
编译前有一堆的环境变量要设置,为了方便,我写了个build.sh,内容如下:

#!/bin/bash
export PATH=${aosp}/android-4.4.4_r1/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH  
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-
make hammerhead_defconfig
make -j4

其中,${aosp}/android-4.4.4_r1是你自己的aosp源码目录,做个替换就行,将这个文件放置到msm目录下,赋予权限,执行,等待一会就编译完成了:

Paste_Image.png

编译后的kernel路径为:arch/arm/boot/zImage-dtb

0x04:替换生效
arch/arm/boot/zImage-dtb复制到AOSP源码的device/lge/hammerhead-kernel下,替换同名文件,然后再编译AOSP源码,刷机,即可让kernel生效。

推荐阅读更多精彩内容