ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

KernelSU 旧设备适配指南:在 Linux 4.14+ 非 GKI 内核上集成内核级 root

KernelSU 旧设备适配指南:在 Linux 4.14+ 非 GKI 内核上集成内核级 root KernelSU 旧设备适配指南在 Linux 4.14 非 GKI 内核上集成内核级 root【免费下载链接】KernelSUA Kernel based root solution for Android项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU还在用 4.14 到 5.3 内核的老机型吗官方自 v1.0 起不再为非 GKI 设备打包 boot 镜像但这不代表你 root 无门。本文带你把手头能编译的旧内核集成 KernelSU走完集成、编译、打包到验证的完整流程最终在自己的设备上跑通内核级 root。 版本支持速览哪些旧内核还能集成 KernelSU内核版本区间支持状态集成难度建议方案5.10GKI官方支持低直接刷官方 boot 镜像4.14–5.9非 GKI存档支持中手动集成源码 自编译4.14 以下理论可行高深度移植需逐个补 API为什么官方不直接支持这些旧版本原因有几点非 GKI 内核由各厂商自行维护并大量魔改碎片化极其严重根本不存在一条统一的编译流水线官方无法为每一台旧设备打包并逐一验证 boot 镜像因此从 v1.0 起停止为非 GKI 设备提供支持最后支持版本定格在 v0.9.5。更根本的障碍是内核 API 本身随版本演进——LSM 钩子、SELinux 策略数据结构、系统调用表在不同版本间都存在差异KernelSU 靠条件编译和运行时符号解析去兼容但边界之外的旧代码只能由你自己补齐。所以官方不给你镜像不等于不能 root而是镜像得你自己编。完整背景可参考 非 GKI 集成存档文档。 动手前自检三步确认你的设备值得折腾别急着改代码先花五分钟确认前提是否成立否则后面全白干。第一步确认内核版本落在支持区间内# 记录主版本号如 4.14 / 4.19 / 5.4这是后面对照的关键 adb shell uname -r预期输出形如4.19.191-android11-8-gb2f41e6重点看最前面那两位。第二步确认你能拿到可编译且能开机的内核源码。这是整条链路里最硬的前提很多旧机型的内核并未开源或开源后缺少厂商私有模块编译出来也点不亮。源码拿不到或编出来无法开机就直接停在这里——这台设备不值得继续折腾。第三步确认 kprobe 相关依赖已开启。KernelSU 默认用 kprobe 做内核 hook缺了它整套 hook 都不生效# 在你的 defconfig 中检索 kprobe 依赖项三项都应为 y grep -E CONFIG_(KPROBES|HAVE_KPROBES|KPROBE_EVENTS) arch/arm64/configs/vendor/设备代号_defconfig三项均为y说明走 kprobe 自动集成没问题若CONFIG_MODULES未启用KPROBES 会连带失效需要一并打开。满足全部三项进入下一节开始集成任何一项不满足尤其第二步建议换一台开源程度更高的设备或就此作罢。 集成 KernelSU 到旧内核三个关键改动整个集成做三件事把代码挂进内核树、打开总开关、插好 hook 入口。改动点 1把 KernelSU 代码挂进内核树。官方提供了 集成脚本它会自动 clone、建符号链接并改 Makefile/Kconfig但该脚本内部指向上游仓库离线环境更适合手动等效操作。进入你的内核源码根目录执行# 拉取 KernelSU 并固定到最后一个支持非 GKI 的版本 git clone https://gitcode.com/GitHub_Trending/ke/KernelSU cd KernelSU git checkout v0.9.5 cd .. # 建立 drivers/kernelsu 符号链接指向实际代码 ln -sf KernelSU/kernel drivers/kernelsu为什么用 v0.9.5因为 v1.0 起已删除非 GKI 支持代码再新的 tag 集成进来也不会工作。改动点 2挂上构建入口并打开总开关。分别在三个文件里各加一行# drivers/Makefile让内核树认识 kernelsu 子目录 obj-$(CONFIG_KSU) kernelsu/ # drivers/Kconfig把 KernelSU 的选项挂进菜单 source drivers/kernelsu/Kconfig# 你的 defconfig路径见下方说明启用 KernelSU CONFIG_KSUydefconfig 通常位于arch/arm64/configs/设备代号_defconfig或arch/arm64/configs/vendor/设备代号_defconfig按你的内核找。这里有个容易踩的坑Kconfig 定义 里CONFIG_KSU依赖KPROBES和EXT4_FS两者任一为 n 都会让 KSU 自动禁用务必确认都开着。为什么加这一行而不直接改源码因为它是唯一的编译总开关后续所有功能都以它为闸门。改动点 3插好 hook 入口。这是旧内核最该下工夫的地方——四个文件系统函数需要手动插入 KernelSU 的处理入口才能让 su、文件访问、stat 等走通。以fs/exec.c为例// fs/exec.c在 do_execveat_common 里插入 su 兼容处理钩子 #ifdef CONFIG_KSU extern int ksu_handle_execveat_sucompat(int *fd, struct filename **filename_ptr, void *argv, void *envp, int *flags); #endif static int do_execveat_common(int fd, struct filename *filename, ...) { #ifdef CONFIG_KSU ksu_handle_execveat_sucompat(fd, filename, argv, envp, flags); #endif return __do_execve_file(fd, filename, argv, envp, flags, NULL); }同样思路改另外三处do_faccessatfs/open.c早于 4.17 没有它就改faccessat系统调用定义、vfs_readfs/read_write.c、vfs_statxfs/stat.c内核没有它就用vfs_fstatat替代。为什么要手动插因为这些函数在不同版本内核里签名、位置都不一样kprobe 覆盖不到的入口只能靠源码级 hook 兜底。另外强烈建议一并集成安全模式在drivers/input/input.c的input_handle_event里挂上ksu_input_hook与ksu_handle_input_handle_event。它能让开机第一屏后连按音量下进入安全模式、自动禁用所有模块是旧设备救砖的救命稻草。注意如果你走的是手动集成路径记得关掉CONFIG_KPROBES否则开机按音量下可能被 kprobe 误触发进安全模式。 编译与 boot 镜像打包流程配置、编译、打包三步走完就能拿到可刷的镜像。# 以设备代号生成配置路径与代号按你的内核调整 make ARCHarm64 CROSS_COMPILEaarch64-linux-android- 设备代号_defconfig # 全量编译内核 make ARCHarm64 CROSS_COMPILEaarch64-linux-android- -j$(nproc) # 打包 boot 镜像参数按你的设备调整 mkbootimg --kernel arch/arm64/boot/Image.gz --ramdisk ramdisk.img --output boot-ksu.img配置完成后先确认CONFIG_KSUy真的进了最终.config编译阶段留意有没有因旧内核缺失符号报的错按提示补对应头文件即可打包时注意 boot 镜像格式要和原厂一致gz与lz4不通用格式刷错是变砖最常见的原因之一。 排错速查集成后最常见的四类故障开机卡 logo / 黑屏。大概率是 boot 格式刷错或镜像本身没编译好。用原厂 boot 刷回即可恢复前提是刷前已备份原厂 boot。能开机但 su 无响应。通常是 hook 入口没插对或CONFIG_KSU因依赖未满足被静默禁用。检查.config里 KSU/KPROBES/EXT4_FS 三项再核对四个 fs 函数是否都插了入口。开机后莫名进安全模式。手动集成却没关CONFIG_KPROBES音量键事件被 kprobe 误捕获所致。把CONFIG_KPROBES置为 n 重编即可。模块挂载或卸载失败、pm 命令报错。旧内核缺少path_umount可从 5.9 向后移植该函数以获得卸载模块能力pm异常则需按存档文档补fs/devpts/inode.c的 hook。详见 救砖文档。✅ 验证收尾确认 root 生效并保持稳定刷入后先做基础验证adb shell su -v # 应打印 KernelSU 版本 adb shell su -c id # 应输出 uid0(root) gid0(root)稳定性观察建议连续重启 5 次每次都应能正常点亮并进系统日常使用一两天重点盯dmesg里lsm_hook、syscall_hook相关的pr_err输出有报错说明对应 hook 在你这颗内核上没对齐。给想回馈社区的人两条参与路径把适配补丁整理成清晰的 diff设备代号 内核版本 改动点提交给上游参考或在社区分享你踩过的坑哪怕只救下一台同型号设备也值。随着更多旧设备经验沉淀KernelSU 对低版本内核的兼容边界还会继续外扩。一句话总结先自检再动手内核版本、可编译源码、kprobe 三项齐了才开工。代码固定 v0.9.5别用新 tag否则非 GKI 支持已被移除。四个 fs 函数入口一个都别漏安全模式务必集成为救砖兜底。安全操作提示先用fastboot boot临时验证镜像能正常开机、功能都通了再刷回原 boot 备份并永久写入——原厂 boot 是你变砖后唯一的退路。【免费下载链接】KernelSUA Kernel based root solution for Android项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表