news 2026/9/10 8:43:04

老设备还能不能 root:KernelSU 非 GKI 内核适配完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
老设备还能不能 root:KernelSU 非 GKI 内核适配完整指南

老设备还能不能 root:KernelSU 非 GKI 内核适配完整指南

【免费下载链接】KernelSUA Kernel based root solution for Android项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU

KernelSU 是个跑在内核模式里的 Android root 方案,靠系统调用与 LSM 钩子在内核空间直接放行 root 请求。它的官方镜像只认 GKI 设备(GKI 是 Google 统一的内核镜像规范),最低从内核 4.14 算起。可当你的机器还停在 4.14~5.3 这种非 GKI 内核、管理器却弹出"不支持"时,别急着退——把 KernelSU 源码塞进自己的内核重新编译,照样能拿到内核级 root。这份 KernelSU 旧内核适配 / 非 GKI 设备 root 指南,从"能不能做"讲到"刷入怎么验",照着走就能落地。

🧭 先过三道关:这台机子到底能不能适配

这一步只回答一件事:你该不该花时间。三关都过了再往下。

  1. 内核版本:连上设备跑adb shell uname -r,看主版本号。4.14 起步才在支持区间;低于 4.14 属于深度移植,新手不建议碰。
adb shell uname -r # 例:4.14.187-perf-g...,主版本 4.14 即可继续
  1. 源码在不在手上:非 GKI 内核碎片化极重,没有统一编译流程,官方也不会给你现成 boot 镜像。前提是你已经能拿到这台设备的内核源码、并编出能正常开机的内核。内核闭源基本到此为止。
  2. kprobe 好不好使:KernelSU 默认靠 kprobe(内核探针,运行时给内核函数打钩子的机制)来挂钩子。kprobe 正常就走"自动集成",不正常就转"手动改源码"。

🛣 两条集成路线,先定方向

先选路再动手,选错方向会白改一堆源码。

  • 自动集成(kprobe):kprobe 正常就选它,几乎不改内核代码,只加 KernelSU 源码再开配置。
  • 手动改源码:kprobe 有上游 bug 或内核太老时用,要动四个系统调用和一个输入函数。

一个版本坑必须先说清:KernelSUv1.0 起放弃非 GKI 支持,最后一个支持版本是v0.9.5,集成时务必 checkout 这个 tag,别用 main。把源码拉下来:

git clone https://gitcode.com/GitHub_Trending/ke/KernelSU cd KernelSU && git checkout v0.9.5

落地有两种:要么在内核根目录跑仓库自带的 kernel/setup.sh(它替你软链kernel/drivers/,并补好drivers/Makefiledrivers/Kconfig的编译项);要么手动复制kernel/,在drivers/Makefileobj-$(CONFIG_KSU) += kernelsu/,在drivers/Kconfigsource "drivers/kernelsu/Kconfig"

🩹 手动集成要动的五个钩子点

选手动路线,本质就是在几个内核函数入口各插一段"条件调用",把 KernelSU 的处理函数接进去。共五处,四个必改、一处强烈建议。

  • do_execveat_commonfs/exec.c)—— 拦截执行,su 的核心。
  • do_faccessatfs/open.c,4.17 以前改faccessat
  • vfs_readfs/read_write.c
  • vfs_statxfs/stat.c,内核没有就用vfs_fstatat
  • input_handle_eventdrivers/input/input.c)—— 安全模式入口,救砖靠它,务必加。

每处都是同一套路:在入口函数最前面加一段#ifdef CONFIG_KSU包着的判断与调用,示意:

#ifdef CONFIG_KSU if (unlikely(ksu_execveat_hook)) ksu_handle_execveat(&fd, &filename, &argv, &envp, &flags); #endif

另两个按需:想让pm命令可用,补fs/devpts/inode.c;想在老内核上卸载模块,从 5.9 回移path_umount。完整 diff 见官方存档 how-to-integrate-for-non-gki.md。

⚙️ defconfig 与 kprobe 配置自检

编译前先确认开关对不对,错一个都可能白编一遍。先找到设备的 defconfig,通常在arch/arm64/configs/设备代号_defconfig,或在arch/arm64/configs/vendor/下,开关定义可对照 kernel/Kconfig。

  • 两条路线都要CONFIG_KSU=y;KernelSU 还依赖EXT4_FS,确认它已开。
  • 自动路线:开CONFIG_KPROBES=yCONFIG_HAVE_KPROBES=yCONFIG_KPROBE_EVENTS=y;若不生效多半是CONFIG_MODULES没开,make menuconfig搜 KPROBES 补依赖。
  • 手动路线:反而要关掉CONFIG_KPROBES——否则开机按音量下会误触安全模式。
  • 调试期可临时开CONFIG_KSU_DEBUG=y,定位完记得关。
CONFIG_KSU=y CONFIG_KPROBES=y # 仅自动路线 CONFIG_HAVE_KPROBES=y CONFIG_KPROBE_EVENTS=y # CONFIG_KSU_DEBUG=y # 调试临时开

🔥 编译、fastboot boot 与功能验证

刷入有条铁律:fastboot boot临时启动,确认不卡 logo,再谈永久刷写。临时启动不写分区,出问题重进 fastboot 即可,数据还在。

fastboot boot boot-ksu.img # 临时启动测试 adb shell su -c id # 应返回 uid=0(root) adb shell su -v # 应回显 KernelSU 版本

再压一压稳定性:连重启 5 次都要能进系统;跑ksud module install装个测试模块,确认挂载生效;手动集成路线还要验证安全模式能救砖。

🩺 起不来 / su 失败的排查清单

按症状对号入座,别乱改:

症状大概率原因处理
卡在开机 logokprobe 不正常注释ksu_sucompat_init/ksu_ksud_init验证,转手动路线
能开机但su没反应钩子没接对 / SELinux 拒绝核对五处钩子是否都改、策略是否放行
pm命令失败devpts 钩子缺失fs/devpts/inode.c
模块挂不上overlayfs 配置缺失确认 overlayfs 相关 CONFIG 已开

✅ 适配完成自检清单

收尾不画饼,照这张表打勾,全过才算成:

  • 内核主版本 ≥ 4.14,源码可编译、能开机
  • 版本锁在v0.9.5,非 main
  • CONFIG_KSU=y+EXT4_FS已开;自动路线 kprobe 三项齐全 / 手动路线已关 KPROBES
  • 五个钩子全部接入,安全模式已开
  • fastboot boot通过后再永久刷写
  • su -c id返回uid=0,模块与重启稳定性验证通过

一句话决策:kprobe 正常走自动、只加配置;kprobe 异常或内核偏老走手动、关 KPROBES 改五处;源码闭源则无解,直接放弃。

【免费下载链接】KernelSUA Kernel based root solution for Android项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 8:43:00

两轮平衡车ADRC控制实战:从MATLAB仿真到STM32部署

简介:本资源是一套基于自抗扰控制(ADRC)算法实现的两轮自平衡车MATLAB仿真与嵌入式联合开发方案,面向自动控制、机器人学及智能车方向的本科生、研究生与工程实践者,解决经典倒立摆系统建模、控制器设计与实时闭环控制…

作者头像 李华
网站建设 2026/9/10 8:40:19

5分钟跑通 Tracy Profiler:精准定位帧时间毛刺的元凶

5分钟跑通 Tracy Profiler:精准定位帧时间毛刺的元凶 【免费下载链接】tracy Frame profiler 项目地址: https://gitcode.com/GitHub_Trending/tr/tracy 你有没有遇到过:程序每十几秒卡顿一次,等打开事后采样工具时,现场早…

作者头像 李华
网站建设 2026/9/10 8:39:59

基于JSP的Java植物科普网站毕业设计:从需求到答辩完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 8:35:10

ty 泛型可调用对象全解析:PEP 484 传统语法下的类型推断与特化

ty 泛型可调用对象全解析:PEP 484 传统语法下的类型推断与特化 【免费下载链接】ruff An extremely fast Python linter and code formatter, written in Rust. 项目地址: https://gitcode.com/GitHub_Trending/ru/ruff 本篇技术指南以 Ruff 仓库内置的类型检…

作者头像 李华