☰
KernelSU 模块不生效?meta-overlayfs 元模块安装与 systemless 覆盖 /system 完全指南
2026/9/28 3:58:43 网站建设 项目流程

KernelSU 模块不生效?meta-overlayfs 元模块安装与 systemless 覆盖 /system 完全指南

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

KernelSU 装好之后,不少新手会撞上同一个现象:模块装上了、也重启了,可/system里的文件纹丝不动。十有八九,卡点不在模块本身,而在于你的设备还没有安装元模块——最典型的就是官方参考实现meta-overlayfs。这篇指南带你搞懂元模块的来龙去脉、用五步装好meta-overlayfs,并讲清重启后如何验证、模块system目录的覆盖规则,以及换装、排错时的正确姿势。

动手前先判断:你的模块真的需要元模块吗

KernelSU 的架构和传统方案有个关键差异:模块挂载逻辑被从内核核心剥离出来,放进了可插拔的元模块里。打个白话比方——普通模块负责"改什么",元模块负责"怎么盖上去"。没装元模块时,KernelSU 根本不会执行挂载动作,于是所有依赖system目录的模块,装完等于白装,涉及/system文件修改的部分自然无法生效。

但并不是每个模块都得依赖它。如果你的模块只用到下面这些能力:

  • 开机脚本(post-fs-data.sh、service.sh等)
  • sepolicy.rule追加 SELinux 策略
  • system.prop注入系统属性

那么这些功能由 KernelSU 核心直接处理,不装元模块也能照常工作。换句话说:"模块不生效"是否要归咎于元模块,先看模块是不是要动/system里的文件。更多边界说明可参考模块指南。

meta-overlayfs 凭什么能"动" /system 又不动 /system

先解释一下systemless:不往分区里写任何字节,而是在系统启动时把一层挂载"盖"在/system之上,你看到的文件是模块版本,磁盘上的分区却原封不动。

meta-overlayfs正是干这件事的官方参考实现:

  • 它基于内核自带的 OverlayFS完成叠加挂载,而不是自己发明一套文件系统;
  • 支持把模块的实际文件存放在 ext4 镜像modules.img中,用镜像承载内容、目录承载元数据,节省空间也便于管理;
  • 生效时机在开机的post-fs-data 阶段:该阶段元模块执行挂载脚本,把每个已启用模块的system目录逐一分区叠加上去。覆盖范围不止system,还包括vendor、product、system_ext、odm、oem五个分区。

简单说:只要模块处于启用状态,重启进桌面时,你已经在"盖好层"的/system上运行了。

🛠️ KernelSU 元模块怎么装:五步装好 meta-overlayfs

元模块的安装路径和普通模块完全一样,不需要任何额外命令:

  1. 下载元模块的 ZIP 包(例如meta-overlayfs.zip)——和普通模块的安装包是同一物种;
  2. 打开 KernelSU Manager 应用——就是你平时管理模块、审批授权的那个应用;
  3. 点击界面右下角的悬浮按钮(➕)——这是手动安装模块的统一入口;
  4. 在文件选择器中选中刚才下载的 ZIP——确认后内核侧会自动完成安装;
  5. 重启设备——挂载动作发生在启动流程里,不重启就永远等不到它生效。

重启之后,怎么确认元模块真的在工作

确认动作都在应用内完成,无需翻命令行日志:

  • 进入 Manager 的Module 页面,当前激活的元模块会出现在模块列表里,并带有专门的元模块标识——你看到它,就说明挂载职责已经有人接管了。

另外有一条命令行线索可以交叉验证:元模块安装后,KernelSU 会创建一个符号链接

/data/adb/metamodule -> /data/adb/modules/<metamodule_id>

这个固定路径指向的就是当前激活的元模块,不管它的 ID 叫什么,排查时看一眼链接落在哪个目录即可。

模块 system 目录的 4 种行为:覆盖 /system 前必懂

装好元模块后,模块system目录里的内容与系统分区之间会发生下面四种关系,做模块或核对效果时都要心里有数:

你想要的效果模块里怎么做重启后的结果
覆盖同名文件在system/下放一个同名文件系统里的同名文件被模块版本取代
合并同名目录放一个同名目录两侧目录合并呈现,互不丢失
"删掉"原系统文件执行mknod filename c 0 0生成同名占位OverlayFS 将其 whiteout,视同已删除,/system分区本身不变
整目录换掉对目录执行setfattr -n trusted.overlay.opaque -v y <目标路径>;或在customize.sh中声明REMOVE/REPLACE变量,由 KernelSU 自动完成对应的占位或 opaque 设置该目录被模块版本整体替换

换句话说,验证"装没装对"最直接的办法,就是看模块声明的这些覆盖、删除、替换在重启后是否逐一兑现。

⚠️ 一台设备只容得下一个元模块:换装与卸载的规矩

唯一性是硬约束:KernelSU 同一时间只允许存在一个元模块。若你尝试安装第二个,会被直接拦截,避免两套挂载逻辑打架。

卸载的副作用要掂量清楚:元模块一旦移除,所有模块都不会再被挂载——所有模块修改集体失效。设备本身照常开机,只是改动静默退场;在换上新的元模块之前,这个状态会一直持续。

所以想换元模块时,不要图省事直接覆盖安装,走下面的完整切换流程:

步骤操作
1卸载所有普通模块
2卸载当前元模块
3重启设备
4安装新的元模块
5重新安装普通模块
6再次重启

顺序的意义在于:先让旧挂载关系彻底消失,再让新元模块从干净状态接管,最后把普通模块放回来,中间用两次重启保证每一层都落到正确状态。

装好了还是不生效?按顺序查这两处

如果你已经走完上面的流程、也重启过,模块修改却依然缺席,按这个顺序排查:

  1. 回 Module 页面看元模块在不在列——激活的元模块应当带着标识出现在列表里。看不到它,说明安装环节就没成功,一切挂载无从谈起;
  2. 检查目标模块目录里有没有skip_mount或disable标记文件——这两个标记只要存在其一,该模块的system目录就会被跳过,不会被挂载。确认无误后移除对应标记再重启。

这两步走完仍不解决的话,FAQ 里"全新安装后模块不工作"一条的结论和本文一致:要改/system文件的模块必须依赖元模块,其余能力则不依赖,先把模块类型和元模块状态对应上再谈后续。

延伸方向

  • 元模块并非只有一种玩法:除meta-overlayfs外,还存在无挂载(纯脚本型模块设备可以完全跳过挂载开销)、Magic Mount(Magisk 兼容风格)、以及完全自定义的实现。各自取舍与开发要求,见元模块指南。
  • 如果你想自己开发元模块,指南里还覆盖了识别属性metamodule=1、钩子脚本metamount.sh(挂载处理器)等完整机制。
  • 装好元模块后如何组织模块目录、编写customize.sh、配置各类脚本与属性文件,继续对照模块指南 逐项落地即可。

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

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

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

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

立即咨询