旧内核装不上 KernelSU4.14 设备四步完成 KernelSU旧内核适配 移植指南【免费下载链接】KernelSUA Kernel based root solution for Android项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSUKernelSU 是 Android 上的内核级 root 方案但跑 4.14 系内核的老手机上官方路线走不通管理器直接判定不支持。本文面向做过 root、没碰过内核编译的开发者按进源码树 → 选钩子路线 → 加安全模式 → 试机刷机四步把 KernelSU旧内核适配 完整走一遍。 动手前三步确认你的设备值得折腾第一步看内核版本定档位。adb shell uname -r adb shell su -c dd if/dev/block/by-name/boot of/data/local/tmp/boot_bak.img adb pull /data/local/tmp/boot_bak.img回显第一段的主.次就是档位依据对照下表内核版本结论5.10GKI 设备官方支持刷镜像即可不用看本文4.14 ~ 5.4非 GKI本文主线需手动移植后自己编译4.14 以下无现成回移成果需自行回移 kprobe 路径不建议版本号里的 android11 这类后缀只反映出厂 Android 版本判断兼容性一律认主.次。第二条命令顺手把原始 boot 备份到电脑——后面任何一步搞挂它都是唯一的回头票。第二步用管理器交叉验证。安装 KernelSU 管理器状态页显示Not installed说明设备官方支持本文可以关掉显示Unsupported则确认要走自编译路线。第三步确认原内核能编。拿到你机型的官方内核源码先原样编译出一遍可启动的 boot 镜像。原内核都编不过移植没有意义先解决编译环境。️ 适配主线从进源码到第一次开机第一步把 KernelSU 挂进内核源码树目的让构建系统在drivers/kernelsu这个固定位置找到内核侧代码。cd /path/to/kernel-source # 你的内核源码根目录 git clone https://gitcode.com/GitHub_Trending/ke/KernelSU git -C KernelSU checkout v0.9.5 # v1.0 起放弃非 GKI必须锁旧版本 ln -s KernelSU/kernel drivers/kernelsu再给drivers/Makefile追加obj-$(CONFIG_KSU) kernelsu/给drivers/Kconfig插入source drivers/kernelsu/Kconfig各一行。判断标准make menuconfig出现 KernelSU function support 菜单help 里写明依赖 KPROBES 与 EXT4_FS。常见小坑软链名写错或漏改 Makefile 时编译会静默跳过整个模块产物里没有内核侧代码也报不出错。第二步选钩子路线先易后难目的把 root 拦截点挂上老内核有两条路先走省事的。路线 Akprobe 自动挂钩为什么优先KernelSU 默认靠 kprobe 在系统调用入口挂钩子旧内核上 kprobe 健康就完全不用改源码。在 defconfig 补齐CONFIG_KPROBESy CONFIG_HAVE_KPROBESy CONFIG_KPROBE_EVENTSy CONFIG_KSUy判断标准刷机后dmesg | grep -i ksu能看到初始化输出。常见小坑部分 4.14 厂商内核 kprobe 入口本身带 bug路线 A 直接开机会卡 logo先用fastboot boot试不行转路线 B。路线 B手动打系统调用补丁为什么存在kprobe 坏掉时只能手工在四个函数里插钩子调用——fs/open.c的do_faccessat、fs/exec.c的do_execveat_common、fs/read_write.c的vfs_read、fs/stat.c的vfs_statx。以 exec.c 为例static int do_execveat_common(int fd, struct filename *filename, ...) { if (unlikely(ksu_execveat_hook)) // 钩子开关打开才接管 ksu_handle_execveat(fd, filename, argv, envp, flags); return __do_execve_file(fd, filename, argv, envp, flags, NULL); }ksu_execveat_hook、ksu_handle_execveat的 extern 声明包在#ifdef CONFIG_KSU里其余三处照此写法。判断标准su -c id返回uid0(root)。常见小坑4.14 上找不到vfs_statx就改用vfs_fstatat找不到do_faccessat就改到faccessat系统调用函数体内。第三步补安全模式这条退路目的给启动循环留一个逃生口。安全模式靠钩住输入子系统实现——开机时连按三下音量下键即可禁用全部模块。在drivers/input/input.c的input_handle_event里插一段static void input_handle_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) { if (unlikely(ksu_input_hook)) ksu_handle_input_handle_event(type, code, value); /* 原有处理逻辑不动 */ }判断标准开机后在首屏出现时快速按三下音量下按了松开再按别长按管理器模块页应全部显示已禁用。常见小坑走路线 B 时务必把CONFIG_KPROBES关掉否则日常误触音量键也会触发安全模式。第四步先 fastboot 试机再正式刷机目的不动分区验证新镜像稳了才落盘。make ARCHarm64 CROSS_COMPILEaarch64-linux-android- -j$(nproc) fastboot boot boot.img # 临时加载测试失败拔线即恢复判断标准设备正常进系统且adb shell su -c id输出 uid0再执行fastboot flash boot boot.img永久写入。常见小坑boot 镜像压缩格式必须与设备一致gz 与 lz4 混刷直接不开机fastboot boot失败不写盘不用紧张。 翻车急救高频故障的三个根因方向卡开机 logo 进不了系统 根因该内核 kprobe 入口损坏4.14 上最常见或四个钩子点漏改一处。 修复fastboot boot确认问题出在新镜像后转手动路线逐点核对四个补丁仍失败就回刷备份的原始 boot。管理器提示 Unsupported 或始终不给 root 根因管理器 1.0 及以上版本不再包含非 GKI 路线和 v0.9.5 内核不配套。 修复安装与内核 v0.9.5 配套的旧版管理器再测两侧版本必须配对。模块能装但卸载不生效 根因内核侧path_umount接口 5.9 才引入老内核没有。 修复把 5.9 的can_umount/path_umount回移到fs/namespace.c嫌麻烦可临时跳过仅影响卸载功能。 收尾验证与低配机瘦身重启稳定后跑一遍验证su -c id su -c /data/adb/ksud module list应分别看到uid0(root)和模块列表输出两者都成立才算移植完成。低配机瘦身老手机内存紧张defconfig 里可打开CONFIG_KSU_DISABLE_MANAGER关管理器集成与CONFIG_KSU_DISABLE_POLICY关 App Profile缩小模块体积运行期不用的功能逐项关掉su -c ksud feature set adb_root 0 su -c ksud feature set selinux_hide 0要点永久刷写前永远先fastboot boot试机原始 boot 备份留到移植全部结束。内核侧锁定 v0.9.5管理器版本必须与之配对。kprobe 不稳定就果断走手动打补丁路线更稳。完整补丁参照与回移细节见官方文档 website/docs/guide/how-to-integrate-for-non-gki.md。【免费下载链接】KernelSUA Kernel based root solution for Android项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考