編譯環境如下圖所示

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