3 步装好 meta-overlayfs 元模块:KernelSU 模块挂载从原理到排错的完整指南
【免费下载链接】KernelSUA Kernel based root solution for Android项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU
KernelSU 的模块挂载能力由名为meta-overlayfs 元模块的官方参考实现提供。它让模块里的system目录以 systemless 方式叠加到/system分区之上,无需真正改动系统分区。本文按"先看懂原理 → 照做安装 → 验证生效 → 排错避坑"的路径带你走完整个流程,并给出换装、卸载的限制说明。
装好之后,你的模块会发生什么变化
先看清楚目标状态,操作时心里才有底:
- 重启后,元模块在启动流程的post-fs-data 阶段执行挂载,把所有已启用模块的
system目录以 OverlayFS 叠加到系统分区; - 支持system、vendor、product、system_ext、odm、oem共 6 个分区的覆盖;
- 官方实现
meta-overlayfs还支持用 ext4 镜像(modules.img)存放模块文件,节省存储空间; - 模块声明的文件替换、目录合并、文件"删除"都会在开机后按预期体现出来。
哪些模块能力依赖元模块?只有"修改/system文件"这一项。模块里的启动脚本(post-fs-data.sh、service.sh等)、sepolicy.rule、system.prop都不需要元模块就能工作。如果你的模块只用这三类能力,可以跳过安装。详见 模块指南 和 FAQ。
一分钟看懂元模块机制
普通 root 方案把挂载逻辑写死在核心里,而 KernelSU 把这部分抽成了可插拔的元模块(metamodule):
| 对比项 | 核心(KernelSU 本体) | 元模块 |
|---|---|---|
| 职责 | 提供 root 与模块管理基础 | 决定模块"如何被安装和挂载" |
| 安装数量 | 只有一份 | 同一时间仅允许一个 |
| 脚本优先级 | 普通模块脚本 | 元模块脚本先于普通模块脚本执行 |
这样做的好处是:核心保持精简、不易被检测,同时社区可以自行实现不同的挂载策略(无挂载、Magic Mount、自定义 VFS 等)。对普通用户来说,装一个meta-overlayfs就够用。
元模块的判定依据是其
module.prop中的metamodule=1属性,并可携带metamount.sh(挂载处理器)、metainstall.sh(安装钩子)、metauninstall.sh(清理钩子)三个钩子脚本。开发向的细节参见 元模块指南。
安装 meta-overlayfs:照做即可的 5 步流程
元模块的安装方式和普通模块完全相同,全程在 KernelSU Manager 应用内完成:
- 下载元模块的 ZIP 包(例如
meta-overlayfs.zip)到手机存储; - 打开 KernelSU Manager 应用;
- 点击右下角的悬浮按钮(➕);
- 在弹出的选择器中选中刚才下载的 ZIP 文件;
- 等待安装完成后重启设备。
重启这一步不能省:挂载逻辑只在启动时执行,装完不重启等于没装。
如何确认元模块真的生效了
验证分两层:先看"装没装上",再看"干没干活"。
第一层:应用内确认身份。打开 Manager 的Module 页面,当前激活的元模块会出现在模块列表中,并带有专属的元模块标识。如果列表里看不到它,说明安装未成功,回到上一步重来。
第二层:观察system目录的实际行为。装好meta-overlayfs后,模块里system目录的规则如下(完整说明见 模块指南):
| 你的诉求 | 模块里该做什么 |
|---|---|
| 替换同名文件 | 放入同名文件即可,自动覆盖 |
| 合并同名目录 | 目录自动合并,无需额外操作 |
| "删除"系统文件 | 用mknod <filename> c 0 0生成同名占位,由 OverlayFS 做 whiteout,/system分区本身不动 |
| 整目录替换 | 创建同名目录并执行setfattr -n trusted.overlay.opaque -v y <TARGET>;或在customize.sh中声明REMOVE/REPLACE变量交给 KernelSU 自动处理 |
所以最直接的验证方式是:挑一个你模块里声明的覆盖/删除/替换项,重启后确认它是否按预期出现。
注意事项:限制、副作用与标记文件集中说明
这一节把容易踩的坑全部收拢在一起,操作前扫一眼能省不少返工时间。
⚠️同一时间只能装一个元模块。若设备上已有元模块(例如迁移配置带来的),再装第二个时 KernelSU 会直接阻止安装以避免冲突。需要切换时,按官方给出的顺序操作:
- 卸载所有普通模块;
- 卸载当前元模块;
- 重启;
- 安装新的元模块;
- 重新安装普通模块;
- 再次重启。
⚠️卸载元模块的副作用波及所有模块。卸载后、换装新元模块之前,没有任何模块会被挂载——涉及/system修改的内容全部失效,设备本身仍可正常开机。如果你只是临时卸载,请对"模块集体静默"有心理准备。
排查用的小知识:
- 元模块安装后,KernelSU 会建立符号链接
/data/adb/metamodule -> /data/adb/modules/<metamodule_id>,这条与 ID 无关的稳定路径可以随时用来确认当前激活的是哪个元模块; - 模块目录里若存在
skip_mount或disable标记文件,该模块的system目录就不会被挂载。模块"装了没反应"时,先检查这两个标记是否存在。
重启后仍不生效?按这个顺序排查
FAQ 对"全新安装后模块不工作"的结论与本文一致:需要改/system文件的模块必须依赖元模块,其余能力不依赖。据此按顺序过一遍:
- 进 Module 页面确认元模块出现在列表里且带元模块标识;
- 确认目标模块目录中没有
skip_mount、disable标记文件; - 确认确实执行了安装后的重启(挂载只在开机时发生);
- 若以上都满足仍不生效,检查模块
system目录结构本身是否符合 模块指南 的规范。
元模块的其他实现(无挂载、Magic Mount、自定义方案)以及开发所需的钩子脚本,参见 元模块指南;模块目录结构、启动脚本等安装后配置,继续参考 模块指南。
【免费下载链接】KernelSUA Kernel based root solution for Android项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考