☰
免刷模块也能改系统:BakaSU Metamodule 模块系统安装与管理教程
2026/10/11 16:54:48 网站建设 项目流程

【免费下载链接】BakaSU

A KernelSU based root solution for Android

项目地址:https://gitcode.com/gh_mirrors/re/BakaSU
点击查看免费下载

BakaSU是一款基于 KernelSU 的 Android root 方案,它的最大特色之一就是基于 Metamodule(元模块)的可插拔模块系统。简单说:你可以不刷入任何"模块容器",而是通过安装一个 Metamodule 模块,把整个模块的挂载、安装、卸载流程变成可自定义的脚本——普通模块的生效方式由它接管。本文用新手能懂的方式,讲清楚 BakaSU 的 Metamodule 是什么、如何安装、如何管理,以及出问题时该怎么排查。

一、Metamodule 是什么?为什么需要它 🤔

传统 KernelSU 方案里,普通模块默认通过 OverlayFS(叠加挂载)方式修改系统文件。BakaSU 则把"模块怎么挂载、怎么安装"这件事抽象成了一个特殊模块——Metamodule(元模块):

  • 它是一个标记为metamodule=1的普通模块(写在module.prop里),存放在/data/adb/modules/{模块id},并通过/data/adb/metamodule软链接指向它;
  • 它可以自带三个"钩子脚本",接管普通模块的生命周期:
脚本作用
metainstall.sh替代默认安装脚本,自定义普通模块的安装流程
metauninstall.sh在模块被删除前执行,可拿到环境变量MODULE_ID
metamount.sh开机时执行,自定义所有模块的挂载方式

这样,像 Zygisk、ReZygisk 这类需要深度定制挂载逻辑的功能,就能以"一个模块"的形式存在,免刷内核、免刷 boot,装一个模块即可生效,删掉它即恢复默认行为。

相关源码:Metamodule 的识别、软链接与脚本调度都实现在 userspace/ksud/src/android/module/metamodule.rs。

二、BakaSU 模块系统的工作机制 🔍

理解下面三条规则,就理解了 BakaSU 模块系统:

  1. 默认路径:没有 Metamodule 时,模块安装走官方内置安装器 userspace/ksud/src/android/module/installer.sh(兼容 Magisk 风格,支持customize.sh、SKIPUNZIP、$REPLACE、$REMOVE等约定)。
  2. 接管路径:存在启用状态的 Metamodule 且带metainstall.sh时,普通模块安装会自动改用 Metamodule 的脚本,而不是默认安装器(见 get_install_script)。
  3. 安全机制:当 Metamodule 自身有待定的更新/删除/禁用操作(存在update、remove或disable标记文件)时,BakaSU 会阻止安装新的普通模块,并提示"请先重启设备应用变更",避免两种安装逻辑混用导致系统异常(见 check_install_safety)。

另外要注意:同一时间只能有一个 Metamodule。安装新的 Metamodule 前,必须先卸载旧的、重启后再装(安装拦截逻辑)。

三、安装 Metamodule 模块:一键安装步骤 📦

安装入口有两种,任选其一:

方式 1:管理器 GUI 安装(推荐新手)

  1. 打开 BakaSU 管理器,进入"模块"页面;
  2. 点击"安装模块",选择 Metamodule 的 ZIP 包;
  3. 管理器会先解压并检查module.prop中的id与metamodule标记,再执行安装脚本,完成后建立/data/adb/metamodule软链接;
  4. 重启设备,让 Metamodule 正式接管模块系统。

管理器界面还会显示当前 Metamodule 状态(未安装 / 已移除 / 已禁用 / 生效中),见 ModulePage.kt。

方式 2:命令行安装

用 root shell 执行ksud(安装流程实现于 install_module_to_system):

ksud module install /storage/emulated/0/Download/mymetamodule.zip

安装成功的标志:输出Module installed successfully!,且/data/adb/metamodule软链接已创建。

四、管理 Metamodule:启用、禁用与卸载 🧰

Metamodule 就是一个普通模块,所有模块命令同样适用(CLI 定义见 userspace/ksud/src/android/cli.rs):

# 列出所有模块(含 metamodule 模块) ksud module list # 禁用 Metamodule(模块目录生成 disable 标记,回退到默认安装器) ksud module disable <模块id> # 重新启用 ksud module enable <模块id> # 标记卸载(重启后真正删除,并自动清理软链接) ksud module uninstall <模块id> # 反悔:撤销卸载标记 ksud module undo-uninstall <模块id>

几个实用细节:

  • 禁用而非卸载:Metamodule 处于disable状态时,系统会跳过它的metainstall.sh/metamount.sh并回退到默认安装器(check_metamodule_script),适合"临时关掉"的场景;
  • 卸载时会先回调 Metamodule:删除普通模块前,会先执行 Metamodule 的metauninstall.sh(带上MODULE_ID环境变量),再执行模块自身的uninstall.sh(prune_modules),保证自定义挂载能被正确清理;
  • 卸载 Metamodule 本身时,软链接/data/adb/metamodule会被自动移除。

五、开机执行顺序:Metamodule 何时生效 ⚙️

重启后,BakaSU 在启动早期按固定顺序处理模块,Metamodule 的钩子被安排在关键节点:

  1. post-fs-data阶段:先执行 Metamodule 的post-fs-data.sh(优先级最高),再执行各普通模块的同名脚本;
  2. 挂载阶段:执行 Metamodule 的metamount.sh(环境变量MODULE_DIR指向模块目录);
  3. 其余阶段(service、boot-completed等)同样"Metamodule 优先"。

早期启动的调度见 init_event.rs,晚加载(LKM 模式)路径见 late_load/mod.rs。

这意味着:Metamodule 的脚本可以比普通模块更早介入系统,是它"免刷也能改系统"的关键。

六、常见问题排查清单 🛠️

现象原因与解决
装普通模块时提示"Installation Blocked / 请先重启"Metamodule 有待定的更新/删除/禁用标记。重启设备让变更落地后再装即可
提示"A metamodule is already installed"系统已存在其他 Metamodule。先卸载旧的、重启,再安装新的
自定义脚本没执行确认 Metamodule 处于启用状态(无disable标记),脚本名为metainstall.sh/metauninstall.sh/metamount.sh且位于模块根目录
想看脚本执行日志在/data/adb/ksu/下创建metamodule.debug标记文件,日志会写入/data/adb/ksu/log/(metamodule_mount.out.log等),路径定义见 defs.rs

七、小结:BakaSU 模块系统一图流 🎯

  • 装 Metamodule= 给模块系统换一个"可自定义的引擎";
  • 三大脚本各司其职:metainstall.sh(安装)、metauninstall.sh(卸载回调)、metamount.sh(开机挂载);
  • 所有操作遵循"标记 + 重启"的安全模型,禁用/卸载/更新都可回退,对新手非常友好;
  • 核心源码集中在 userspace/ksud/src/android/module/ 目录:metamodule.rs、mod.rs、installer.sh,感兴趣的进阶用户可以深入阅读。

只要掌握"安装 → 重启 → 管理 → 排障"这四步,你就能用 BakaSU 的 Metamodule 模块系统,在不刷 boot、不刷内核的前提下灵活定制自己的模块环境了。

【免费下载链接】BakaSU

A KernelSU based root solution for Android

项目地址:https://gitcode.com/gh_mirrors/re/BakaSU
点击查看免费下载

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

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

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

立即咨询