三步装好 KernelSU 元模块 meta-overlayfs:模块修改 /system 快速生效
【免费下载链接】KernelSUA Kernel based root solution for Android项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU
模块装完重启,/system里的文件却原封不动?KernelSU 把挂载逻辑拆成了可插拔的元模块——没装它,模块压根不会被挂载,动/system的改动自然落空。装上官方实现 meta-overlayfs,模块的system目录会在开机时叠加到系统分区上,走 systemless 路线:真实分区纹丝不动,只在启动时多叠一层。
模块不生效?先判断它要不要装元模块
如果你的模块只跑启动脚本、写sepolicy.rule或改system.prop,不装元模块也照常工作——只有要动/system文件的模块才需要挂载,而挂载正是元模块的职责。两类能力的边界在模块指南和FAQ里有说明。
三步装好 meta-overlayfs
meta-overlayfs是官方参考实现,基于内核 OverlayFS 做模块挂载——OverlayFS 是 Linux 内核自带的层叠文件系统,把多个目录叠起来当成一个用;它还支持用 ext4 镜像modules.img存放模块文件。装法和普通模块一样,照元模块指南的用户部分操作:
- 下载元模块的 ZIP 文件,例如
meta-overlayfs.zip; - 打开 KernelSU Manager,点悬浮 ➕ 按钮,选中刚才下载的 ZIP;
- 重启设备。
启动到 post-fs-data 阶段时,它的挂载脚本会跑起来:把所有已启用模块的system目录叠加到系统分区上,支持 system、vendor、product、system_ext、odm、oem 多个分区。
重启后查这里:元模块标识与 systemless 覆盖规则
验证不靠命令行,直接看应用:打开 KernelSU Manager 的 Module 页面,列表里带元模块标识的那一项,就是当前激活的元模块。
改动是否真正落地,对照模块声明的内容看(行为规则来自模块指南):
- 同名文件:用模块里的文件直接盖掉系统里的;
- 同名目录:两边内容合并;
- 想"删掉"某个系统文件:在模块内用
mknod filename c 0 0造一个同名占位节点,靠 OverlayFS 的 whiteout 机制处理——whiteout 就是在覆盖层放个占位、把下层同名文件挡住,/system分区本身不变; - 想整个目录替换:模块内建同名目录并执行
setfattr -n trusted.overlay.opaque -v y <TARGET>;或者在customize.sh里声明REMOVE/REPLACE变量,交给 KernelSU 自动处理。
换装元模块的坑:同一时间只允许一个
已经装了一个元模块——哪怕是从别人设备迁来的配置——再想装第二个,KernelSU 会直接拦下。想切换就按文档流程走:
- 卸载所有普通模块;
- 卸载当前元模块;
- 重启;
- 安装新元模块;
- 重装普通模块;
- 再重启。
⚠️ 卸载元模块的副作用不小:在装上新元模块之前,全部模块都处于未挂载状态,设备能正常开机,只是模块改动全部失效。排查当前激活的是哪个元模块,看符号链接/data/adb/metamodule -> /data/adb/modules/<metamodule_id>即可——它是 KernelSU 装好元模块后创建的,提供与 ID 无关的稳定路径。
模块不生效时先查这 3 点
装好元模块、重启后改动还是没落地?逐条自查:
- Module 页面里,元模块是否真的出现在列表中,且带元模块标识;
- 目标模块目录里有没有
skip_mount或disable标记文件——存在其一,system目录就不会被挂载; - 装完元模块后是否重启过——挂载脚本只在开机时跑,没重启等于没装。
【免费下载链接】KernelSUA Kernel based root solution for Android项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考