为 红米 K60 / POCO F5 Pro(代号 mondrian) 在 LineageOS 上自动编译带
KernelSU 与 SusFS 的内核,并通过 GitHub Actions 实现:
- ✅ 随 LineageOS 内核源码更新 自动重新编译
- ✅ KernelSU / SusFS 固定到互相匹配的提交(改
config.env里的引用即可升级) - ✅ 手动一键触发(可覆盖 KernelSU 提交 / 内核分支)
- ✅ 产出 AnyKernel3 可刷入 zip(+ 原始
Image),并以 GitHub Release 发布
| 项 | 取值 |
|---|---|
| 设备 | mondrian(SM8475 "cape",红米 K60 / POCO F5 Pro) |
| 内核源码 | LineageOS/android_kernel_xiaomi_sm8450,lineage-23.2 分支,Linux 5.10(GKI 2.0) |
| defconfig | gki_defconfig + vendor/waipio_GKI.config + vendor/xiaomi_GKI.config + vendor/mondrian_GKI.config + vendor/debugfs.config |
| Root | 官方 KernelSU(固定提交,与 SusFS 补丁匹配) |
| 隐藏 | SusFS(gki-android12-5.10 分支,v2.0+ inline hook) |
| 打包 | Kernel-SU/AnyKernel3(GKI 变体) |
| 工具链 | AOSP clang(LLVM=1,无需额外 binutils) |
为什么选官方 KernelSU +
gki-android12-5.10:SusFS 补丁是针对特定 KernelSU 源码 编写的,KernelSU 一旦更新可能打不上补丁;因此这里把 KernelSU 与 SusFS 都固定到 互相匹配的提交(config.env的KSU_REF/SUSFS_REF),保证稳定可复现。
- 在 GitHub 新建一个公开或私有仓库(如
mondrian-kernelsu)。 - 把本项目所有文件上传进去(保留
.github/workflows/build.yml的相对路径)。 最简单的方式:git clone https://github.com/<你>/<仓库>.git cd <仓库> # 把本目录下的 config.env、build.sh、state/、.github/、README.md、.gitignore 复制进来 git add -A && git commit -m "init mondrian kernelsu builder" git push
- 打开仓库 Settings → Actions → General:
- Workflow permissions 选择 Read and write permissions(用于写 release 和提交状态文件)。
- 无需配置任何 Secret(内核、KernelSU、SusFS 均为公开源,
GITHUB_TOKEN自动可用)。
仓库 Actions → "Build KernelSU + SusFS kernel (mondrian)" → Run workflow:
ksu_ref:留空 = 用config.env里固定的KSU_REF;也可填某个 commit SHA/tag 临时覆盖。kernel_branch:默认lineage-23.2(LineageOS 22.2 用lineage-22.2)。force:默认勾选 = 无条件编译;取消勾选则只在有更新时编译。
- 每日定时(
cron: 30 4 * * *,北京时间 12:30)轮询一次。 - 若
KSU_REF(config.env 里的 KernelSU 提交) 或 内核分支 HEAD 提交 与state/last_build.json记录不同,才触发编译;否则跳过(节省 CI 分钟数)。
产物 KernelSU-<版本>-SusFS-mondrian-<分支>.zip 是 AnyKernel3 包,只在 boot 分区
替换内核,不动 ramdisk / dtb / 数据,风险低。刷入方式任选其一:
- KernelSU 管理器:安装 KernelSU 管理器 APK 后,在“安装”里选择本地 zip 刷入。
- Recovery(LineageOS Recovery 或 TWRP):
Apply update → 从存储选择 zip侧载刷入。 - Magisk/KernelSU 模块方式:等同 AnyKernel3 用法。
⚠️ 刷机前请务必备份当前boot分区(dd if=/dev/block/bootdevice/by-name/boot of=/sdcard/boot_backup.img), 以便出问题时回滚。首次刷入建议先手动触发一次构建并确认能正常开机。
刷入后验证:
- KernelSU 管理器能打开并显示内核版本 → KernelSU 生效。
- SusFS 需配合 SusFS 的 KernelSU 模块(
ksu_module_susfs)使用,模块由 susfs4ksu 仓库提供,可单独下载刷入。
SusFS 补丁是针对特定 KernelSU 源码结构编写的。若 KernelSU 上游大改导致补丁打不上,
build.sh 会立即报错中止(fail-fast),绝不产出损坏的内核。此时:
- 方案 A:在
config.env里把KSU_REF/SUSFS_REF固定到上一组能编译成功的提交; - 方案 B:同步升级
KSU_REF与SUSFS_REF(SusFS 上游会定期Sync with official KernelSU main)。
LineageOS 对 mondrian 提供 lineage-22.2 / lineage-23.0 / lineage-23.2 分支。
改 config.env 的 KERNEL_BRANCH_DEFAULT,或手动触发时填 kernel_branch 即可。
换到新分支前请确认
arch/arm64/configs/vendor/mondrian_GKI.config等文件仍存在 (一般会保留,但不同版本内核目录结构可能微调)。
build.sh 会按 clang-r458507 → r487747 → r510928 → r522817 顺序回退尝试。
若仍失败,在 config.env 修改 CLANG_VERSION 或直接指定 CLANG_URL。
将 config.env 中 KSU_REPO 改为 https://github.com/rifsxd/KernelSU-Next,并把
KSU_REF 改成 Next 对应的提交(SusFS 同样支持 Next;但 Next 更新更激进,稳定性略低)。
把 config.env 里 SUSFS_* 相关步骤注释掉、并删除 build.sh 中 SusFS 段与
ksu_susfs.config 里的 CONFIG_KSU_SUSFS* 行即可(默认保留 SusFS)。
| 文件 | 作用 |
|---|---|
.github/workflows/build.yml |
调度/版本检测/构建/发布的主工作流 |
config.env |
所有可调配置(内核、KernelSU、SusFS、clang 等) |
build.sh |
完整构建脚本(克隆 → 打补丁 → 配置 → 编译 → 打包) |
state/last_build.json |
记录上次构建的版本号,用于“有更新才编译”判断 |
- xddxdd/nix-kernelsu-builder(本项目的补丁/打包思路参考)
- tiann/KernelSU
- simonpunk/susfs4ksu
- Kernel-SU/AnyKernel3
- LineageOS(内核与设备树)