KernelSU

KernelSU 和 Magisk 都是内核级 root 方案,模块生态也基本通用。下面把两者的模块系统拆开对比:哪些东西完全一样,哪些是真正不一样的地方。

相同之处

  • 模块文件格式:都以 zip 的方式组织模块,并且模块的格式几乎相同。
  • 模块安装目录:都在 /data/adb/modules。
  • systemless:都支持通过模块的形式以 systemless 修改 /system。
  • post-fs-data.sh:执行时机完全一致,语义也完全一致。
  • service.sh:执行时机完全一致,语义也完全一致。
  • system.prop:完全相同。
  • sepolicy.rule:完全相同。
  • BusyBox:脚本都在 BusyBox 中以“独立模式”运行。

不同之处

在了解不同之处之前,你需要知道如何区分你的模块是运行在 KernelSU 还是运行在 Magisk 之中。在所有你可以运行模块脚本的地方(customize.sh、post-fs-data.sh、service.sh),你都可以通过环境变量 KSU 来区分:在 KernelSU 中,这个环境变量将被设置为 true。

  • KernelSU 的模块不支持在 Recovery 中安装。
  • KernelSU 的模块没有内置的 Zygisk 支持(但你可以通过 ZygiskNext 来使用 Zygisk 模块)。
  • 模块挂载架构:KernelSU 使用 metamodule 系统,将挂载委托给可插拔的 metamodule(例如 meta-overlayfs),而 Magisk 将挂载内置在其核心中。KernelSU 需要安装 metamodule 才能启用模块挂载。
  • 替换或删除文件的方式与 Magisk 完全不同。KernelSU 不支持 .replace 方式,相反,你需要通过 mknod filename c 0 0 创建同名文件夹来删除对应文件。
  • BusyBox 的目录不同:KernelSU 内置的 BusyBox 在 /data/adb/ksu/bin/busybox,而 Magisk 在 /data/adb/magisk/busybox。注意此为 KernelSU 内部行为,未来可能会更改。
  • KernelSU 不支持 .replace 文件,但支持 REPLACE 和 REMOVE 变量。
  • KernelSU 新增了一种脚本 boot-completed.sh,以便在 Android 系统启动后运行某些任务。
  • KernelSU 新增了一种脚本 post-mount.sh,以便在模块挂载完成后运行某些任务。