KernelSU 里面的救砖机制
最近经常有小伙伴问我,自己在 KernelSU 里面刷模块变砖了应该怎么办?其实这是个比较常见的问题,解决它的方法也有很多,考虑到不是所有人都知道,这里单独给大家介绍一下。
AB 更新机制
KernelSU 里面的模块是采用 img 存储的,所有的模块会被打包进一个 ext4 格式的磁盘镜像,然后在启动阶段被挂载到模块目录。这里我借鉴了 Android 系统 OTA 更新时的 AB 更新机制,如果你安装了新模块或者对已有模块有更新操作,不会直接操作当前使用的模块文件,而是会把所有模块构建成另外一个 update 镜像;系统重启之后,会使用这个 update 镜像尝试启动一把,如果 Android 系统成功启动,才会真正更新模块。
因此,最简单最常用的救砖方法就是:强制重启一次。如果你在刷某个模块之后系统无法启动,你可以长按电源键超过 10 秒,系统会自动重启;重启之后会回滚到更新模块之前的状态,之前更新的模块会被自动禁用。
音量键救砖
AB 更新固然方便,但它依然有解决不了的场景;因为 KernelSU 现在还不够成熟,因此可能其模块系统本身有一些 BUG,又或者它的模块系统与某些模块不兼容,这时候可能 AB 更新也无济于事。
所以前段时间专门添加了一个新特性:安全模式。进入安全模式之后,所有的模块都会被禁用。
进入安全模式的方法有两种:
- 某些系统自带的安全模式;有些系统是长按音量下,有些系统(比如MIUI)可以在 Recovery 中开启安全模式。进入系统的安全模式后,KernelSU 也会进入安全模式,自动禁用模块。
- KernelSU 内置的安全模式;操作方法:开机第一屏后,连续按音量下键超过三次。注意是连续按,不是按着不动,也不是长按。
内置的安全模式是在内核里面实现的,因此不会出现按键事件被拦截导致捕获不到的情况。不过对于非 GKI 内核,可能需要手动集成代码,可以参考官网教程。
内置安全模式固然强大,但它被触发之后,所有模块都会被禁用,你可能还需要手动一个个启用你需要正常用的模块,然后删掉有问题的模块;用起来比 AB 更新稍微复杂一点。
进 Recovery 删模块文件
理论上来说,上面两种方法可以应对几乎所有场景了;不过如果你有其他使用习惯,其实也是可以的。其中最常见的方法,就是进 Recovery 删掉所有模块文件。
这种方法在 KernelSU 里面也是可以的,你只需要进入 TWRP,删掉 /data/adb/ksu 目录下所有文件 就可以恢复;如果你不想删掉所有文件,删掉 modules.img 和 modules_update.img 两个文件也可以。
恢复原厂 Boot
上面介绍的几个方法,都是在你使用模块出现无法启动的情况下使用的;还有一种情况那就是 KernelSU 内核出现了问题,如果是这种情况,那就只有一个方法,那就是恢复原厂 Boot。
比如说,如果你一刷 KernelSU 提供的 boot.img 系统就无法启动,那可能是 KernelSU 本身的 BUG,又或者是你刷入的镜像格式不对,也可能是你手机需要关闭 dm-verity;不论何种情况,你都可以通过刷回原厂 Boot 来恢复。
知道了以上几种方法,刷机的时候信心是不是增加了很多呢?
最后,祝大家玩得愉快!
评论 (0)