从 4.14 内核到内核级 root:旧手机 3 步装好 KernelSU
2026/9/11 1:51:11 网站建设 项目流程

从 4.14 内核到内核级 root:旧手机 3 步装好 KernelSU

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

4.14 – 5.3 旧内核的手机拿不到官方 boot 镜像,旧手机装 KernelSU 只能自己动手。这篇带你走完 KernelSU 低内核适配:先诊断设备资格,再备齐源码和工具链,然后手动编译 KernelSU boot 镜像、刷入并排障。

🔍 非 GKI 设备 root 前,先做 3 步资格自测

先说 GKI:Google 给新设备提供的统一预编译内核镜像(Generic Kernel Image),同一版本内核的设备共用一套,管理器点开就能刷。没有它的老设备,走的就是下面这条手动路线。

  1. 查内核版本。Android 版本和内核版本是两码事,只看内核号:adb shell uname -r,把完整输出抄下来。
  2. 判断是否 GKI。版本号里带android12-5.10这种编号尾巴的(KMI,Google 用来保证内核模块兼容的一组标识号)就是 GKI 系内核,装上管理器看一眼:显示可刷才是真省事;显示"不支持"(GKI 1.0 这类老设备就属于它),同样走手动路线。快速确认:adb shell uname -r | grep -E 'android[0-9]+',有输出说明带 KMI 编号。
  3. 确认 bootloader 已解锁。没解锁一切免谈:adb shell getprop ro.boot.flash.locked,输出 1 就是锁着,先去解锁。
内核版本区间支持方式难度
5.4+(GKI)管理器直接刷官方 boot 镜像,或 LKM 模式(可加载内核模块,以 .ko 形式注入运行中的内核,不用重编整个内核)★☆☆☆☆
4.14 – 5.3集成进厂商内核源码,手动编译★★★☆☆
4.14 以下无官方承诺,需自行移植核心 hook 代码★★★★★

落在中间那一行的,就是本文主线:KernelSU 4.14 内核支持范围里的非 GKI 手动适配。

🧰 动手前备齐 3 样东西

  1. 两份源码。一是你设备的内核源码(厂商或 ROM 社区仓库),硬前提:你能用它编出能开机的内核,源码不开源或编不出来的设备直接放弃,别硬撑;二是 KernelSU 本体,注意锁定 v0.9.5——v1.0 起官方不再维护非 GKI 内核,版本选错白干:git clone https://gitcode.com/GitHub_Trending/ke/KernelSU && cd KernelSU && git checkout v0.9.5
  2. 交叉编译工具链。直接用 ROM 构建系统自带的那套(ROM 源码树里一般就有 prebuilts 目录),版本跟着内核源码走,别自己去下"最新"的,ABI 对不上编译必炸。
  3. boot 分区备份。这一步最重要,没备份别往下走:有自定义 recovery 或已有 root 就执行dd if=/dev/block/by-name/boot of=/sdcard/boot.bak拉到电脑;什么都没有,就解压官方原厂固件,把里面的 boot.img 存好当退路。

🔨 手动编译 KernelSU boot 镜像:3 步走通

1. 把 KernelSU 挂进内核源码树

这一步在干什么:用官方脚本把 KernelSU 以软链接挂进内核的 drivers 目录,并自动登记 Makefile 和 Kconfig,让内核构建系统认识它。

cd /path/to/device_kernel # 你的设备内核源码根目录 ls KernelSU # 确认第 2 步 clone 的源码放这儿 bash KernelSU/kernel/setup.sh v0.9.5 # 建软链接 + 登记构建系统

2. 打开 Kconfig 开关

这一步在干什么:确认 kprobe 钩子机制和 KernelSU 本体在配置里都开着。KernelSU 靠 kprobe(内核探针,内核自带的动态"挂钩子"机制)在内核关键路径上做拦截,少一个依赖都编不出可用的 hook。

make menuconfig # 以厂商 defconfig 为基础 # 依次确认: CONFIG_MODULES=y、CONFIG_KPROBES=y、 # CONFIG_HAVE_KPROBES=y、CONFIG_KPROBE_EVENTS=y # 进 KernelSU 菜单: CONFIG_KSU=y(依赖 EXT4_FS,一并勾上)

3. 编译,然后先试启动

这一步在干什么:编出带 KernelSU 的新 boot 镜像,用 fastboot 临时引导试一次机——不落盘、不写入,随时能退回原镜像。

make -j$(nproc) # 产物在 out/ 下,按 ROM 脚本打包成 boot 镜像 fastboot boot boot-ksu.img # 临时引导测试,能正常进系统才算过 # 验证 OK 后,再执行 fastboot flash boot 永久写入

🩹 翻车现场 3 连:现象 → 原因 → 解法

场景一:编译报错,一堆 undefined reference

现象:kprobe_registerksu_handle_execveat这类符号找不到。 原因:kprobe 的依赖项(比如 CONFIG_MODULES)没开全,或厂商内核改过 API 名字。 解法:先把依赖勾全,再核对符号是否真存在于你的内核里:

make menuconfig # 搜 kprobes,把提示的依赖项全部启用 nm out/vmlinux | grep kprobe_register # 符号还在还报错 → 对照 v0.9.5 源码逐个核对 API 名称

场景二:刷进去卡 logo,或自动重启

现象:bootloop,或 fastboot 试启动时黑屏秒重启。 原因:厂商内核的 kprobe 机制本身有 bug(老内核很常见),钩子一触发内核就崩。 解法:黑屏秒重启基本锁定是 kprobe 问题,别死磕自动集成,改用手动改源码方式,把钩子挂到 4 处文件系统调用点上(非 GKI 集成教程 附了完整 diff):

fastboot boot boot-ksu.img # 黑屏秒重启 = kprobe 问题实锤 adb reboot bootloader # 卡 logo 时用按键组合进 fastboot

场景三:root 能用,但 pm 命令失败 / 卸载模块不工作

现象:管理器一切正常,唯独pm命令报错,或"卸载模块"功能无效。 原因:4.17 之前的内核没有 vfs_statx,pm 命令还依赖一处 devpts 修改;"卸载模块"则需要从 5.9 内核回移 path_umount。 解法:按教程 diff 换钩点——没有 vfs_statx 就改钩 vfs_fstatat,再补上 devpts 的修改:

/* fs/stat.c: 改钩 vfs_fstatat,调用 ksu_handle_stat() fs/devpts/inode.c: 补 ksu_handle_devpts() 修复 pm 命令 */

⚡ 低配设备榨干性能的 3 个开关

  • 把安全模式焊进内核:按教程给 drivers/input/input.c 打补丁,开机按音量下进安全模式。低配机上这是救命功能,强烈建议开。
  • 关调试、砍模块:CONFIG_KSU_DEBUG 一律不勾;管理器里只留刚需模块,改 /system 的模块才需要 metamodule,多一层挂载就多一层开销。
  • 内核配置保持干净:别顺手开 tracing、debug 类选项,编译前清掉旧产物,避免无关模块吃光本就紧张的内存。

最后一句保命提示:永远先fastboot boot临时引导试一遍,确认能正常开机再永久写入;真翻车了,bootloop 自救指南 里有对应解法。兼容性问题先查官方 FAQ,集成细节以非 GKI 内核集成教程 为准,动手前值得通读一遍。

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

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询