
KernelSU 旧内核适配完整指南一步步给 Linux 4.14~5.3 的安卓设备装 root【免费下载链接】KernelSUA Kernel based root solution for Android项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSUKernelSU 是一款 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 gccmkbootimg或用你 ROM 自带的 boot 打包工具链原始 boot 镜像备份已 root 用adb shell su -c dd导出否则从原厂固件包提取引导已解锁电脑装好 adb/fastbootKernelSU 仓库里能切到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_KSUy # kprobe 三项B 路线必开 CONFIG_KPROBESy CONFIG_HAVE_KPROBESy CONFIG_KPROBE_EVENTSy如果 KPROBES 勾上却不生效先查依赖CONFIG_MODULESy是否漏掉另外KSU选项本身还依赖EXT4_FS见 配置项定义。阶段三仅 C 路线插 4 个钩子B 路线直接跳到阶段四。C 路线要在 4 个系统调用入口插入钩子调用do_faccessatfs/open.c、do_execveat_commonfs/exec.c、vfs_readfs/read_write.c、vfs_statxfs/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.c的input_handle_event也改了接上安全模式开机按音量下进恢复模式。这是救砖保险强烈建议改。注意手动插钩子后必须关掉CONFIG_KPROBES否则开机按音量下也会误触发安全模式。阶段四编译内核# 交叉编译前缀按你的工具链调整 make ARCHarm64 CROSS_COMPILEaarch64-linux-android- -j$(nproc)产物一般在arch/arm64/boot/Image压缩过的 ROM 可能是Image.gz、Image.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.c的devpts_get_priv里加ksu_handle_devpts钩子补丁见官方文档。 验证与回滚adb shell su -c id # 预期uid0(root) gid0(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),仅供参考