website/docs/zh_CN/guide/rescue-from-bootloop.md
在刷机的时候我们可能会遇到设备“变砖”的情况,理论上讲,如果你只是使用 fastboot 刷入 boot 分区或者安装不合适的模块导致设备无法启动,那么这都可以通过合适的操作恢复手机;本文档旨在提供一些急救方法让你可以在“变砖”中恢复。
在 KernelSU 中,刷入 boot 变砖有如下可能:
gz 的,但你刷入了 lz4 格式的镜像,那么此时手机无法启动。无论哪种情况,你都可以通过刷入原厂 boot恢复;因此,在安装教程最开始,我们已经强烈建议大家,在刷机之前备份自己的原厂 boot!如果你没有备份,那么你可以通过其他跟你相同设备的童鞋或者官方固件包获取原厂 boot。
刷入模块变砖可能是大家遇到更常见的情况,但是这里必须郑重告诉大家:请勿刷入来路不明的模块!!。因为模块其实是有 root 权限的,它完全可能导致你的设备发生不可逆的损坏!
如果大家刷入某些开源的或者被证明是安全的模块使得手机无法启动,那么这种情况在 KernelSU 中非常容易恢复,完全无需担心。KernelSU 内置了安全模式来救砖:
你可以尝试使用安全模式来救砖。进入安全模式之后,所有的模块都会被禁用。
进入安全模式的方法有两种:
进入安全模式以后,KernelSU 管理器的模块页面所有模块都被禁用,但你可以执行“卸载”操作,卸载可能会有问题的模块。
内置的安全模式是在内核里面实现的,因此不会出现按键事件被拦截导致捕获不到的情况。不过对于非 GKI 内核,可能需要手动集成代码,可以参考官网教程。
::: warning
KernelSU 在内核模块初始化时注册音量键监听(LKM模式下在内核执行init进程的时候加载),到on_post_fs_data 阶段时(开机动画前)时注销。你需要把握好时机并在开机第一屏后快速按下音量下键三次。如果设备启动速度快或操作不及时,可能无法触发安全模式。
如果模块在 initrc 中编写了不合理的代码导致设备无法启动,即使在安全模式下这些代码仍然会执行。 :::
当安全模式无法解决问题时,可以尝试手动救砖。根据设备状态选择以下方法。
方法一:通过 ADB 使用 ksud 管理模块
如果设备能通过 ADB 获取 root shell,可以直接使用 ksud 命令行来禁用或卸载问题模块:
::: tip
挂载 metadata 和 data 分区后,你可以在 Recovery 模式下运行 /data/adb/ksud 命令来管理模块。
由于 GKI 设备共用 init,因此 Recovery 模式下仍会加载 KernelSU 内核模块,你应该可以正常使用 ksud 的大部分功能(如设置 feature)。
:::
adb shell
su
ksud module list # 列出所有模块
ksud module disable <id> # 禁用问题模块
ksud module uninstall <id> # 或直接卸载
reboot
方法二:通过 Recovery 手动清理
如果无法进入系统(连 ADB 都无法连接),需要设备有第三方 Recovery(如 TWRP)。
KernelSU 的模块加载依赖内核侧的 init.rc 注入文件和用户态的 ksud 进程。删除这些文件后重新启动,KernelSU 将不会加载任何模块。
操作步骤:
mount /data
rm -f /data/adb/ksud
mount /metadata
rm -f /metadata/ksu/modules.rc
rm -f /metadata/watchdog/ksu/modules.rc
reboot
重启后 KernelSU 将跳过所有模块的加载。进入系统后,即可重新打开 KernelSU 管理器处理模块的问题。
如果以上方法无法拯救你的设备,那么很有可能你装的模块有恶意操作或者通过其他方式损坏了你的设备,这种情况下,只有两个建议: