尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

老手机一次性 root 成功:KernelSU 移植 Linux 4.14+ 旧内核完整指南

老手机一次性 root 成功:KernelSU 移植 Linux 4.14+ 旧内核完整指南 老手机一次性 root 成功KernelSU 移植 Linux 4.14 旧内核完整指南【免费下载链接】KernelSUA Kernel based root solution for Android项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU老安卓手机在 KernelSU 管理器里显示“不支持”只要内核是 Linux 4.14 及以上且源码公开你就能把这套内核级 root 方案自己移植进去。从查版本、集成源码到编译刷机、验收每步都讲清做什么和为什么写给会用 adb 但没碰过内核的人。 先用一条命令确认你的内核版本和路线先别急着动手先确认你的设备在“可编译”名单里。手机连接电脑后执行adb shell uname -r输出形如4.14.186-xxx或5.10.101-android12-9对照三种情况判断走哪条路线版本在 5.10 及以上、且编号带-android12-这类 GKI 标识GKI 就是安卓为统一内核推出的通用内核镜像规范管理器显示“未安装”——你的设备走官方路线直接刷官方镜像即可不用读这篇版本落在 4.14 到 5.10 之间或标识不规范、管理器显示“不支持”——非 GKI 设备也就是本文的对象官方不会给你现成的 boot 镜像需要自己编译内核版本低于 4.14——官方支持止于 4.14再往下要深度移植核心模块成本很高本文不展开还有两个硬性前提缺一个就别往下走bootloader 必须能解锁内核源码必须公开且你能编译出一个可正常开机的内核——官方文档明确说了做不到这一点通常无解。 编译前先做好这 3 件事备份、源码、工具链第一件事也是最重要的备份原厂 boot。这一步排在一切操作之前从官方固件包或线刷包里提取原厂 boot.img保存到电脑。之后刷机翻车用它执行fastboot flash boot刷回系统立刻恢复原样。这张镜像不在手后面所有步骤都是空谈。第二件事拿到内核源码。非 GKI 设备的源码很分散可能在厂商开源仓库也可能在社区维护的镜像里。确认源码版本与你手机当前运行的内核一致判断依据是内核版本而不是安卓系统版本。第三件事准备编译工具链aarch64 交叉编译器前缀aarch64-linux-android-以及打包镜像用的 mkbootimg 或 magiskboot。顺手把 KernelSU 仓库克隆下来git clone -b v0.9.5 https://gitcode.com/GitHub_Trending/ke/KernelSU注意-b v0.9.5这个标签。v1.0 之后 KernelSU 放弃了对非 GKI 内核的官方支持v0.9.5 是能集成进旧内核的最后一个版本用错版本是前面所有努力白费的头号原因。 集成走一遍把 KernelSU 放进内核源码树进入你的内核源码根目录完成“搬家”cd /path/to/your/kernel/source cp -r ~/KernelSU/kernel KernelSU ln -s KernelSU drivers/kernelsu再让构建系统认识它仓库里的 kernel/setup.sh 会自动完成这两步手动照做也一样drivers/Makefile末尾加一行obj-$(CONFIG_KSU) kernelsu/drivers/Kconfig的endmenu前加一行source drivers/kernelsu/Kconfig集成后还要决定用哪种方式挂钩 KernelSU 依赖的系统调用共两条路线路线一kprobe 自动挂钩优先选它。KernelSU 的钩子机制基于 kprobe——内核自带的动态断点设施运行时给目标函数打点不用改源码。如果你的内核里 kprobe 工作正常这一步什么都不用改只开配置就能编译。路线二手动修改源码。当 kprobe 不可用老内核上较常见时需要手工在几个关键位置加钩子。每个文件都是加几行调用作用如下fs/exec.c的do_execveat_common拦截进程创建su 生效的主通道fs/open.c的do_faccessat拦截文件访问检查4.17 之前的内核没有该函数直接改faccessat系统调用定义fs/read_write.c的vfs_read拦截文件读取供内核命令通道使用fs/stat.c的vfs_statx拦截文件属性查询用于隐藏没有vfs_statx就改用vfs_fstatatdrivers/input/input.c的input_handle_event安全模式触发强烈建议开启它是救砖的保底手段fs/devpts/inode.c的devpts_get_priv补上后pm等命令才能正常工作每处写法模式相同用#ifdef CONFIG_KSU包住调用对应的ksu_handle_*函数。完整 diff 补丁在官方非 GKI 集成文档里按你文件里的函数版本对号入座即可。最后打开编译选项。make menuconfig里会出现 KernelSU 菜单kprobe 路线的最小集合是CONFIG_KSUy启用 KernelSU 本体CONFIG_KPROBESy、CONFIG_HAVE_KPROBESy、CONFIG_KPROBE_EVENTSy挂钩机制及事件支持CONFIG_MODULESy容易漏掉它是 kprobe 的前置依赖不开它 kprobe 不生效CONFIG_KSU_DEBUGy可选适配阶段建议打开方便排查稳定后关闭内存小的设备可以在 Kconfig 里找到禁用管理器检测、单应用 root 配置等功能的选项关掉减少内核常驻开销。⚙️ 编译打包做出你自己的 boot 镜像在内核源码根目录编译再打包、先试启动make ARCHarm64 CROSS_COMPILEaarch64-linux-android- -j$(nproc) # 按实际产物路径打包 boot 镜像 mkbootimg --kernel Image --ramdisk ramdisk.cpio.gz -o boot-ksu.img # 先临时启动试机开不了机重启一次就回到原样 fastboot boot boot-ksu.img编译完不要直接写分区。fastboot boot是临时启动手机能正常进系统、管理器里不再显示“不支持”说明集成成功卡 logo 就重启回到原厂状态毫无损失。确认稳定后再执行fastboot flash boot boot-ksu.img刷入分区重启后即为永久生效。 防踩坑三连卡 logo、误触安全模式、pm 失效坑一刷完新内核卡 logo无法开机。现象刷入后卡在开机动画或过一会儿自己重启。 原因多半是这颗内核里 kprobe 工作不正常——上游 bug 或依赖配置缺失。 解法走 kprobe 路线的先查CONFIG_MODULES有没有开、KPROBES 的依赖是否完整还不行就转手动修改路线。改手动路线时记得同时关闭CONFIG_KPROBES原因见坑二。坑二莫名其妙进了安全模式。现象开机时碰巧按到音量减手机进入安全模式并重启。 原因手动集成了钩子但没关CONFIG_KPROBESkprobe 路线那套安全模式触发器还在工作按键会误触发。 解法手动集成方案在 defconfig 中关闭CONFIG_KPROBES重新编译。反过来利用这一点想保留 kprobe 路线的话救砖时长按音量下进安全模式就是官方推荐的保底出口。坑三pm 命令执行失败。现象su 环境下pm等包管理命令报错。 原因devpts 伪终端钩子缺失。 解法在fs/devpts/inode.c的devpts_get_priv里加一行ksu_handle_devpts(dentry-d_inode)调用重新编译。官方文档附了现成补丁直接照抄。如果真卡死在 logo 恢复不了长按音量下尝试进安全模式或连电脑用fastboot flash boot刷回原厂镜像完整流程见卡开机救援文档。✅ 验成功三层测试确认 root 和模块都工作第一层一条命令确认 rootadb shell su -c id输出uid0(root) gid0(root)说明内核钩子已生效。接着打开管理器顶部显示 KernelSU 版本号界面从“不支持”变成 root 管理主页。第二层测试模块系统用管理器装一个纯脚本类模块重启后确认生效。如果你的模块需要改/system文件旧内核上没有现成的 systemless 基础设施必须先装 metamodule如 meta-overlayfs这类“地基”模块。第三层三条稳定性自测动作全过才算成功连续冷重启 3 次每次都能正常进系统开机电量键旁长按音量下进安全模式一次确认能进、也能自动恢复正常跑一个常用 root 应用如 Shizuku10 分钟无闪退logcat 里没有 ksu 相关报错 收尾让老设备稳定可用的 4 条建议任何新编译的镜像一律先fastboot boot试启动再写分区这个习惯能保住你的机器原厂 boot.img 至少存两处电脑一份、云端一份内核源码不开源、或版本低于 4.14 时及时止损深度移植的投入对多数人不划算遇到问题先查官方 FAQ 和非 GKI 集成文档你踩的坑大概率已有人记录过适配完成后老机器就拥有了完整的能力su 提权、模块系统、按应用配置 root 策略都可用。日常使用把它当新设备对待——系统分区交给模块去改自己别手动折腾。【免费下载链接】KernelSUA Kernel based root solution for Android项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表