自编译内核集成 KernelSU——GKI 源码构建与 setup.sh 一键集成
什么时候需要自己编译
三种场景:管理器显示「不支持」的非 GKI 设备;想深度定制内核功能的玩家;需要为旧内核移植 KernelSU 的贡献者。开始前建议先读 Android 官方的内核构建与 GKI 发布构建文档,本页只讲 KernelSU 侧的增量步骤。
注意:官方文档已注明本路线仅供参考存档——自 v3.0 起官方放弃 GKI 镜像模式的构建支持,为更快迭代改用 LKM 构建方案(推荐社区 ddk 构建方式)。目标形态选 LKM 的用户请优先研究该方案。
同步内核源码
用 repo 拉取与设备匹配的内核源码,替换清单文件后同步:
repo init -u 加官方内核清单仓库地址(从 Android 官方 GKI 发布构建页面获取)
mv kernel_manifest.xml .repo/manifests/
repo init -m manifest.xml
repo sync
清单文件从 Android 官方的 GKI 发布构建页面下载,它唯一确定一次可复现的构建。
构建裸内核先跑通
先不带 KernelSU 编译一遍,确认环境没问题。老式 build.sh 路线(Android 12 及以前):
LTO=thin BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh
LTO=thin 别省——内存小于 24GB 时省掉它构建可能直接失败。Android 13 起改用 bazel:
tools/bazel build --config=fast //common:kernel_aarch64_dist
集成 KernelSU
裸内核能出镜像后,在内核源码根目录执行官方提供的 setup.sh 一键集成脚本(完整脚本地址见项目仓库 kernel 目录下的说明;示例为拉取最新稳定 tag 的调用方式):
curl -LSs 加官方仓库 kernel/setup.sh 脚本地址 | bash -
脚本支持三种模式:最新 tag(稳定版)、main 分支(开发版)、指定 tag(如 bash -s v0.5.2)。执行后重新构建内核,得到的镜像即内置 KernelSU。
编译完成后
产出的内核 Image 可以打包为 AnyKernel3 刷入,或按 magiskboot 手动修补进 boot.img,路径见 Recovery 与变通安装方法。非 GKI 设备的源码集成方式有专门一章,见 非 GKI 老设备怎么用。
内核构建环境差异极大,编译失败先对照 Android 官方文档核对工具链版本。