ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

KernelSU 旧内核适配实战指南:4.14+ 老设备怎么改、怎么验、怎么救

KernelSU 旧内核适配实战指南:4.14+ 老设备怎么改、怎么验、怎么救 KernelSU 旧内核适配实战指南4.14 老设备怎么改、怎么验、怎么救【免费下载链接】KernelSUA Kernel based root solution for Android项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU打开 KernelSU 管理器屏幕中央一句不支持适配就走到头了先别慌。你大概率不是设备不行而是内核还停在 Linux 4.14–5.3 这个官方已经放弃直供镜像的区间。本文给你一套完整的旧内核适配方案先判断走哪条路再只改对内核源码里那 4 个固定位置最后按清单验证、翻车了知道怎么救。刷机前先用 3 条判断对号入座你的设备走哪条路别急着下载源码先花一分钟确认三件事1. 内核版本号长什么样adb shell uname -r输出分两种。一种是5.10.101-android12-9-g30979850fc20这种带androidNN-KMI 代数段的——这是 GKI 设备GKI 就是 Android 那套统一通用内核镜像直接走路线 A本文后面不用看了。另一种是4.19.191-...、4.14.180-...这种没有 KMI 命名的老版本号属于非 GKI 阵营继续往下。注意看内核版本别拿 Android 系统版本当依据——Android 13 配android12-5.10内核完全正常。2. 管理器显示什么管理器里不支持 官方不给现成镜像你必须自己编译内核集成 KernelSU未安装 设备受支持走路线 A 即可。另外官方从 v1.0 起已放弃非 GKI 支持最后支持旧内核的版本是 v0.9.5后面所有操作都锁死这个版本。3. 你的内核能不能编译前提是你拿得到设备内核源码、且能从源码编译出一个能正常开机的内核。厂商不开源内核的话这条路直接堵死到此为止。三条判断都过了看下面怎么选路。三条路线对比官方镜像、kprobe 集成、手动改源码路线适合谁要动什么代价A 官方镜像 / LKMGKI 设备版本名带 KMI 段一般 5.10不碰源码管理器修补 boot 或刷官方镜像最低半小时搞定B kprobe 自动集成4.14–5.3 非 GKI且内核 kprobe 机制工作正常跑集成脚本 改 defconfig然后编译中等kprobe 有 bug 会开不了机C 手动改内核源码kprobe 不可用或内核版本过低在 4 个文件系统函数 input.c 里插钩子然后编译最高改动点最多但全部是固定位置路线 B 的原理一句话KernelSU 靠 kprobe内核探针内核自带的函数挂钩机制挂系统调用内核开了 kprobe 就能自动完成集成你只负责配置和编译。路线 C 是它坏掉时的兜底不依赖探针直接在源码里把钩子写死。两条源码路线的第一步都一样——把 KernelSU 挂进内核源码树。在内核源码根目录执行# 先拿到 v0.9.5 的 KernelSU 源码 git clone https://gitcode.com/GitHub_Trending/ke/KernelSU # 在内核源码根目录运行集成脚本参数锁定版本 bash /path/to/KernelSU/kernel/setup.sh v0.9.5脚本会自动在drivers/下创建kernelsu软链并把编译入口写进 Makefile 和 Kconfig见 kernel/setup.sh。然后是配置。找到你设备的 defconfig通常在arch/arm64/configs/下部分厂商放在arch/arm64/configs/vendor/追加# defconfig 追加具体开哪些按路线选 CONFIG_KSUy CONFIG_KPROBESy # 路线 B 需要路线 C 手动集成必须关掉 CONFIG_HAVE_KPROBESy CONFIG_KPROBE_EVENTSy配完make ARCHarm64 CROSS_COMPILEaarch64-linux-android- -j$(nproc)编译、打包 boot 镜像即可。路线 B 到此结束路线 C 接着看下一节的改动清单。核心改动清单只动这 42 个文件路线 C 要改的位置全部固定对照这张表逐个插钩子即可文件 / 位置改什么为什么fs/exec.c的do_execveat_common插入 execveat 钩子进程执行时判定是否提权root 的入口fs/open.c的do_faccessat插入ksu_handle_faccessat文件访问检查时放行 root 请求4.17 之前没有该函数改faccessat系统调用定义处fs/read_write.c的vfs_read插入ksu_handle_vfs_read拦截对 /proc 下自身信息的读取隐藏 root 痕迹fs/stat.c的vfs_statx插入ksu_handle_statstat 类系统调用的提权处理老内核没有vfs_statx就用vfs_fstatat代替drivers/input/input.c的input_handle_event插入输入事件钩子安全模式救砖入口强烈建议开启fs/devpts/inode.c的devpts_get_priv插入ksu_handle_devpts不改则pm命令执行失败可选增强把 5.9 内核的path_umount移植进fs/namespace.c老内核就能支持卸载模块官方文档里带完整参考补丁。两个必须看的代码片段其余位置照抄同一模式即可。以fs/exec.c为例在do_execveat_common函数体开头插入#ifdef CONFIG_KSU if (unlikely(ksu_execveat_hook)) ksu_handle_execveat(fd, filename, argv, envp, flags); else ksu_handle_execveat_sucompat(fd, filename, argv, envp, flags); #endif安全模式钩子同样短在input_handle_event开头插入#ifdef CONFIG_KSU if (unlikely(ksu_input_hook)) ksu_handle_input_handle_event(type, code, value); #endif安全模式是开机时按住音量下进入的兜底通道老设备玩内核改动这一项的价值不亚于 root 本身。完整逐函数补丁含vfs_fstatat、老内核faccessat、devpts、path_umount的参考 diff以官方存档文档为准非 GKI 集成指南。翻车自救对照表症状 → 原因 → 解法症状原因解法集成后无法开机bootloop内核的 kprobe 本身有 bug注释掉 KernelSU 内核源码里ksu_sucompat_init()和ksu_ksud_init()再编译验证能开机即坐实 kprobe 问题转路线 Ckprobe 配置开了却不生效依赖项没开make menuconfig搜 KPROBES 的依赖逐项启用最常见漏掉的是CONFIG_MODULES开机后莫名进安全模式走了手动集成却没关 kprobe按音量下即触发defconfig 里关闭CONFIG_KPROBESpm命令执行失败没改 devpts按上表给fs/devpts/inode.c补钩子模块无法卸载老内核缺path_umount从 5.9 移植进fs/namespace.c改/system的模块不生效缺 metamodule / OverlayFS 未开安装 metamodule如 meta-overlayfs并确认内核开了CONFIG_OVERLAY_FS*详见 metamodule 文档上线前必跑的验证清单先临时、后永久顺序不能反。任何一条没过都别往 boot 分区写永久数据原厂 boot.img 已备份出问题的唯一回头路就是fastboot flash boot刷回它fastboot boot 新镜像临时启动验证通过起不来重启一次即恢复零风险开机后adb shell su -c id返回 root模块链路测试adb push一个测试模块ksud module install装上能加载连续重启 5 次全部正常常用 root 应用管理器、LSPosed 等无异常以上全过后才执行fastboot flash boot永久写入验证细节与 KMI、压缩格式等刷写注意事项参考 安装文档卡壳先翻 FAQ。收口一条红线和两个求助入口红线只有一条临时启动验证没过的镜像永远不许刷进 boot 分区备份原厂 boot 是动任何手之前的第一动作。两个入口官方 非 GKI 集成指南 里有全部参考补丁非官方支持设备列表 里可能有你机型的社区内核源码能少踩很多坑。改完内核跑通了把补丁回馈给社区下一个老设备用户就少走你一小时的弯路。【免费下载链接】KernelSUA Kernel based root solution for Android项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表