编译环境如下图所示

1.下载源码
由于国内有限制,所以我买了一台香港的VPS用来下载国外的资源。
git clone https://android.googlesource.com/kernel/msm.git
cd msm
git branch-a
git checkout remotes/origin/android-msm-hemmerhead-3.4 //根据实际的项行进设置
2.设置环境
1 终端进入原Android源码目录设置编译环境:
cd android-src/android4.4
source build/envsetup.sh
lunch 选择12,编译hemmerhead
export ANDROID_SRC_PATH=/home/(你的源码的位置)/android4.4
export PATH=$ANDROID_SRC_PATH/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-
3 切换到kernel内核源码所在目录,进行编译:
cd ../kernel-hammerhead/msm
make hammerhead_defconfig
make
编译完成后bin文件在 arch/arm/boot/zimage-dtb目录下
重新生成boot.img
export TARGET_PREBUILT_KERNEL=$your_kernel_path/arch/arm/boot/zImage-dtb
编译成功后可以看到下面的输出:
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
CAT arch/arm/boot/zImage-dtb
Kernel: arch/arm/boot/zImage-dtb is ready
编译完内核后,内核生成的路径为:kernel/msm/arch/arm/boot目录下的zImage-dtb文件(nexus 5是这个文件,nexus 4是zImage文件,请注意别弄错了
),把该文件复制到源码下的device/lge/hammerhead-kernel夹下(注意:nexus 4则为mako-kernel文件夹),覆盖掉同名文件。
编译内核:make bootimage
4.将生成的内核烧写至手机
adb reboot bootloader
fastboot flash boot boot.img
5.碰到的一些问题
问题:在编译嵌入式Linux内核时出现了以下错误提示:Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
解决方法:把kernel/timeconst.pl 文件中 373行的if (!defined(@val))改为if ([email protected]) 后,编译成功。
内核源码:链接:http://pan.baidu.com/s/1bpabsNP 密码:1m5j