news 2026/9/10 8:28:45

KernelSU 旧内核适配完整指南:一步步给 Linux 4.14~5.3 的安卓设备装 root

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
KernelSU 旧内核适配完整指南:一步步给 Linux 4.14~5.3 的安卓设备装 root

KernelSU 旧内核适配完整指南:一步步给 Linux 4.14~5.3 的安卓设备装 root

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

KernelSU 是一款 Android 内核级 root 方案,这篇旧内核适配教程面向 4.14~5.3 内核的非 GKI 设备:先判断走哪条路线,再拉源码、集成、编译、刷入,最后把 root 装到旧手机上并学会怎么回滚。

🧭 先判断再动手:你的设备该走哪条路

先在设备上跑一条命令:

adb shell uname -r # 示例输出:4.19.191-android11-8-gb2f41e6

看主版本号,再确认能不能拿到内核源码,然后三选一:

  • A 路线(免编译):版本号5.10及以上。这是 GKI(通用内核镜像,官方统一的内核镜像)设备,直接刷官方发布镜像即可,本文后面的编译部分不用看,转 安装教程。
  • B 路线(自动集成)4.14~5.9(典型是 4.19),内核源码开源,且 kprobe(内核探针点,不改源码的挂钩机制)大概率可用。只跑一个脚本、开几个配置,改动最小。
  • C 路线(手动插钩子):内核太旧踩到边界情况,或 B 路线刷进去开不了机。手动改 4 个系统调用入口加安全模式代码。

前提:内核源码必须开源。拿不到源码就别硬编,编不出能开机的内核,后面所有步骤对你都不成立。

✅ 动手前清单:6 项准备

  • 你设备的内核源码,版本与当前uname -r对应(厂商开源仓库或原厂内核)
  • arm64 交叉编译工具链(如aarch64-linux-android-或 prebuilts gcc)
  • mkbootimg(或用你 ROM 自带的 boot 打包工具链)
  • 原始 boot 镜像备份(已 root 用adb shell su -c dd导出,否则从原厂固件包提取)
  • 引导已解锁,电脑装好 adb/fastboot
  • KernelSU 仓库里能切到v0.9.5标签——非 GKI 支持到此为止,v1.0 起官方不再支持

📦 分阶段适配流程:从源码到刷入

阶段一:拉源码

克隆你自己的内核源码,同时克隆 KernelSU 仓库:

git clone https://gitcode.com/GitHub_Trending/ke/KernelSU

把 KernelSU 目录放到内核源码根目录下(与drivers平级)。放在根目录的原因:集成脚本认这个目录,不会再尝试联网拉代码。

阶段二:集成并改配置

在内核根目录跑官方集成脚本,并固定到最后支持非 GKI 的版本:

cd /path/to/your-kernel-source bash KernelSU/kernel/setup.sh v0.9.5

这个脚本替你做了三件事:建drivers/kernelsu软链接、往 Makefile 写编译条目、往 Kconfig 加配置项,不用手改。

然后编辑你的 defconfig(通常在arch/arm64/configs/设备代号_defconfig,也可能在vendor/下),打开这几个开关:

# KernelSU 主开关 CONFIG_KSU=y # kprobe 三项,B 路线必开 CONFIG_KPROBES=y CONFIG_HAVE_KPROBES=y CONFIG_KPROBE_EVENTS=y

如果 KPROBES 勾上却不生效,先查依赖CONFIG_MODULES=y是否漏掉;另外KSU选项本身还依赖EXT4_FS(见 配置项定义)。

阶段三:(仅 C 路线)插 4 个钩子

B 路线直接跳到阶段四。C 路线要在 4 个系统调用入口插入钩子调用:do_faccessat(fs/open.c)、do_execveat_common(fs/exec.c)、vfs_read(fs/read_write.c)、vfs_statx(fs/stat.c)。Linux 4.14 设备没有vfs_statx的,用vfs_fstatat代替;早于 4.17 没有do_faccessat的,直接改faccessat系统调用。

fs/exec.c为例,在do_execveat_common里调用__do_execve_file之前插入(extern 声明放在文件头部):

static int do_execveat_common(int fd, struct filename *filename, struct user_arg_ptr argv, struct user_arg_ptr envp, int flags) { #ifdef CONFIG_KSU /* ksu_execveat_hook:管理器开启后才生效 */ if (unlikely(ksu_execveat_hook)) ksu_handle_execveat(&fd, &filename, &argv, &envp, &flags); else ksu_handle_execveat_sucompat(&fd, &filename, &argv, &envp, &flags); #endif return __do_execve_file(fd, filename, argv, envp, flags, NULL); }

为什么改这里:这 4 个入口正是系统判断"哪个应用在跑、哪个文件在被打开"的地方,KernelSU 必须钩住它们才能区分调用者并放行权限。完整 diff 补丁在 非 GKI 集成文档 里,逐段对照贴即可。

顺手把drivers/input/input.cinput_handle_event也改了,接上安全模式(开机按音量下进恢复模式)。这是救砖保险,强烈建议改。注意:手动插钩子后必须关掉CONFIG_KPROBES,否则开机按音量下也会误触发安全模式。

阶段四:编译内核

# 交叉编译前缀按你的工具链调整 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- -j$(nproc)

产物一般在arch/arm64/boot/Image,压缩过的 ROM 可能是Image.gzImage.lz4等,以你 ROM 原内核的格式为准。

阶段五:打包 boot 镜像

用和原始 boot 完全一致的参数重新打包(页大小、header 版本),不一致会直接开不了机:

mkbootimg --kernel arch/arm64/boot/Image \ --ramdisk ramdisk.img \ --pagesize 4096 --header_version 2 \ --output boot-ksu.img

阶段六:先测试再刷入

# 只测试不写分区,有问题重启即恢复 fastboot boot boot-ksu.img # 确认正常后再正式写入 fastboot flash boot boot-ksu.img

🩺 排障速查:4 个高频坑

卡开机 logo 起不来→ 最大可能是内核 kprobe 坏了(B 路线最常见) → 先用fastboot boot排除刷入问题;再注释kernel/ksu.c里的ksu_sucompat_init()ksu_ksud_init()两个初始化验证,能开机就是 kprobe 的锅,转 C 路线。

管理器显示不支持、su无效CONFIG_KSU没开,或用了 v1.0 之后的版本代码 → 回查 defconfig,切回v0.9.5重新编译。

莫名进安全模式(开机按了音量下)→ 手动改了钩子但CONFIG_KPROBES还开着 → 关掉 KPROBES 重编。

su 可用但pm命令执行失败→ 漏了 devpts 补丁 → 在fs/devpts/inode.cdevpts_get_priv里加ksu_handle_devpts钩子(补丁见官方文档)。

🔍 验证与回滚

adb shell su -c id # 预期:uid=0(root) gid=0(root)

再进管理器确认 root 已启用,装一个小模块验证功能生效,重启 3 次确认无异常。

收尾前记住两件事:备份的boot-backup.img留好,出问题就fastboot flash boot boot-backup.img回滚;如果卡在开机且连不上 adb,按住音量下(前提你接了安全模式)进恢复模式重刷。

延伸参与与资源入口

如果你把某个机型调通了,值得把你的 defconfig 改动和钩子补丁贴出来,同机型的用户最需要它;非 GKI 的官方支持停在v0.9.5,旧内核的适配维护本来就靠社区。

  • 非 GKI 集成文档(存档版)
  • 安装教程
  • 刷入后开不了机的救援方法

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

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

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

Python零基础入门:PyCharm环境搭建与输入输出核心用法

1. 环境准备:Python与PyCharm安装全流程1.1 先把Python解释器装明白很多新手上来就纠结“装Python还是装Anaconda”,我直接说结论:纯入门阶段,装官方Python就够了,Anaconda那一套等你要做数据处理、科学计算时再补不迟…

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

Aspen Plus碱性电解制氢系统建模方法详解

做化工过程模拟这些年,我一直觉得用Aspen Plus来做“制氢系统的碱性电解建模”是件特别有意思的事——外界常把电解制氢当成一个纯粹的电化学问题,可真要落地做工程方案、算能耗、定操作参数的时候,你会发现它本质上是化工流程问题。这篇想分…

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

用Mathematica复现供应链Stackelberg博弈:从建模到数值验证

在学术圈里,有时候最磨人的不是“想不出模型”,而是“模型摆在面前却跑不出结果”。供应链领域尤其如此,一个供应商带两个零售商的博弈模型,看似只是把经典的单渠道问题往双渠道推了一步,真动手用Mathematica复现的时候…

作者头像 李华