目的:修改内核源码,并刷入手机
步骤如下:
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