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生效。