目的:修改內核源碼,並刷入手機
步驟如下:
1.獲取手機對應的內核下載地址
參考https://source.android.com/setup/build/building-kernels
我的設備是pixel sailfish,所以對應的源碼地址是kernel/msm,編譯配置是marlin_defconfig
使用git下載:
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/msm.git
2.獲取手機對應的內核版本
使用如下命令查看:
adb shell cat /proc/version
Linux version 3.18.100-g4212e6b8dac58 (gcc version 4.9.x 20150123 (prerelease) (GCC) ) #42 SMP PREEMPT Sat Dec 29 19:19:56 CST 2018
其中4212e6b8dac58便是這臺手機內核的git commit id,通過git切換到對應的id處:
git checkout 4212e6b8dac58
3.編譯前的準備
a.先下載32位的編譯工具鏈:
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9
b.在內核源碼目錄下依次執行以下幾個命令:
export CROSS_COMPILE=${NDK_PATH}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-
export CROSS_COMPILE_ARM32=${NDK_PATH_32}/arm-linux-androideabi-4.9-master/bin/arm-linux-androideabi-
export ARCH=arm64
export SUBARCH=arm64
make marlin_defconfig
其中${NDK_PATH}是ndk的路徑,${NDK_PATH_32}是剛下載的32位工具的路徑
執行make marlin_defconfig後會在根目錄下產生一個.config文件,如果想修改某些編譯選項可以直接修改這個文件.
如同的手機可能對應的配置文件不同,參考上圖1即可.
4.開始編譯
直接在根目錄執行make即可
5.編譯成功:
Image.lz4-dtb便是編譯好的內核文件
6.生成新的boot.img
需要生成boot.img才能輸入手機,在aosp目錄下執行如下命令:
export TARGET_PREBUILT_KERNEL=/home/yanchen/Dev/android-source/kernel/msm_pixel_9.0_sailfish/arch/arm64/boot/Image.lz4-dtb
rm out/target/product/sailfish/boot.img && make bootimage
TARGET_PREBUILT_KERNEL指向剛編譯好的內核文件.
by the way,如果想要替換boot.img中的default.prop,可以在build/core/Makefile中做如下修改:
7.刷入手機
執行如下命令即可:
fastboot flash boot boot.img