拉取源码
当前pixel6是android13,所以选择了common-android13-5.10
分支
接着就需要拉取对应分支的内核代码
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export HTTP_PROXY=
export HTTPS_PROXY=
export REPO_URL='https://gerrit-googlesource.lug.ustc.edu.cn/git-repo'
repo init -u git://mirrors.ustc.edu.cn/aosp/kernel/manifest -b common-android13-5.10
# 需要设置代理 :repo init -u https://android.googlesource.com/kernel/manifest -b common-android13-5.10
repo sync
进入内核根目录中拉取KernelSU
的代码
cd common
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -
编译源码
接着编译内核,GKI的内核编译与低版本android内核的编译略有区别。
LTO=thin BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh
// bazel : tools/bazel build --config=fast //common:kernel_aarch64_dist
编译完成之后在out目录中会生成Image
和Image.lz4
以及包含有avdtool
签名工具的压缩包
打包boot.img镜像
利用源码tool
目录中的mkbootimg.py
打包boot.img
。
创建tmp目录存放打包的镜像。因为google在android13
中将ramdisk
从boot.img
中移除放在其他镜像中,boot.img
中不在包含ramdisk
,但是因为mkbootimg.py
需要指定ramdisk
文件位置,所以可以创建一个空的ramdisk
放在tmp目录中。将之前编译生成的Image.lz4
重命名为kernel
放在tmp目录中。将avdtool
签名工具放在tmp目录中。
运行如下命令打包生成boot.img
./mkbootimg.py --header_version 4 --kernel ./tmp/kernel --ramdisk ./tmp/ramdisk --gki_signing_algorithm SHA256_RSA2048 --gki_signing_key ./gki/testdata/testkey_rsa2048.pem --gki_signing_signature_args '--prop foo:bar --prop gki:nice' --gki_signing_avbtool_path ./tmp/avbtool -o ./tmp/new_boot.img
刷入手机后查看KernelSU
中的内核版本
搭建内核源码开发环境
vscode + wsl + clangd即可进行内核开发,具体参考https://github.com/amezin/vscode-linux-kernel.git