website: Add anchors for zh_CN

This commit is contained in:
tiann
2023-03-27 15:35:57 +08:00
parent 86ff022dc6
commit 284b962d64
6 changed files with 42 additions and 42 deletions

View File

@@ -1,8 +1,8 @@
# KernelSU 模块与 Magisk 的差异 # KernelSU 模块与 Magisk 的差异 {#title}
虽然 KernelSU 模块与 Magisk 模块有很多相似之处,但由于它们的实现机制完全不同,因此不可避免地会有一些差异;如果你希望你的模块能同时在 Magisk 与 KernelSU 中运行,那么你必须了解这些差异。 虽然 KernelSU 模块与 Magisk 模块有很多相似之处,但由于它们的实现机制完全不同,因此不可避免地会有一些差异;如果你希望你的模块能同时在 Magisk 与 KernelSU 中运行,那么你必须了解这些差异。
## 相同之处 ## 相同之处 {#similarities}
- 模块文件格式: 都以 zip 的方式组织模块,并且模块的格式几乎相同 - 模块文件格式: 都以 zip 的方式组织模块,并且模块的格式几乎相同
- 模块安装目录: 都在 `/data/adb/modules` - 模块安装目录: 都在 `/data/adb/modules`
@@ -13,7 +13,7 @@
- `sepolicy.rule`: 完全相同 - `sepolicy.rule`: 完全相同
- BusyBox脚本都在 BusyBox 中以“独立模式”运行 - BusyBox脚本都在 BusyBox 中以“独立模式”运行
## 不同之处 ## 不同之处 {#differences}
在了解不同之处之前,你需要知道如何区分你的模块是运行在 KernelSU 还是运行在 Magisk 之中;在所有你可以运行模块脚本的地方(`customize.sh`, `post-fs-data.sh`, `service.sh`),你都可以通过环境变量`KSU` 来区分,在 KernelSU 中,这个环境变量将被设置为 `true` 在了解不同之处之前,你需要知道如何区分你的模块是运行在 KernelSU 还是运行在 Magisk 之中;在所有你可以运行模块脚本的地方(`customize.sh`, `post-fs-data.sh`, `service.sh`),你都可以通过环境变量`KSU` 来区分,在 KernelSU 中,这个环境变量将被设置为 `true`

View File

@@ -1,4 +1,4 @@
# 如何为非 GKI 内核集成 KernelSU # 如何为非 GKI 内核集成 KernelSU {#introduction}
KernelSU 可以被集成到非 GKI 内核中,现在它最低支持到内核 4.14 版本;理论上也可以支持更低的版本。 KernelSU 可以被集成到非 GKI 内核中,现在它最低支持到内核 4.14 版本;理论上也可以支持更低的版本。
@@ -11,7 +11,7 @@ KernelSU 可以被集成到非 GKI 内核中,现在它最低支持到内核 4.
1. 借助 `kprobe` 自动集成 1. 借助 `kprobe` 自动集成
2. 手动修改内核源码 2. 手动修改内核源码
## 使用 kprobe 集成 ## 使用 kprobe 集成 {#using-kprobes}
KernelSU 使用 kprobe 机制来做内核的相关 hook如果 *kprobe* 可以在你编译的内核中正常运行,那么推荐用这个方法来集成。 KernelSU 使用 kprobe 机制来做内核的相关 hook如果 *kprobe* 可以在你编译的内核中正常运行,那么推荐用这个方法来集成。
@@ -40,7 +40,7 @@ CONFIG_KPROBE_EVENTS=y
注释掉 `KernelSU/kernel/ksu.c``ksu_enable_sucompat()``ksu_enable_ksud()`,如果正常开机,那么就是 kprobe 的问题;或者你可以手动尝试使用 kprobe 功能,如果不正常,手机会直接重启。 注释掉 `KernelSU/kernel/ksu.c``ksu_enable_sucompat()``ksu_enable_ksud()`,如果正常开机,那么就是 kprobe 的问题;或者你可以手动尝试使用 kprobe 功能,如果不正常,手机会直接重启。
::: :::
## 手动修改内核源码 ## 手动修改内核源码 {#modify-kernel-source-code}
如果 kprobe 工作不正常(通常是上游的 bug 或者内核版本过低),那你可以尝试这种方法: 如果 kprobe 工作不正常(通常是上游的 bug 或者内核版本过低),那你可以尝试这种方法:

View File

@@ -1,6 +1,6 @@
# 安装 # 安装 {#title}
## 检查您的设备是否被支持 ## 检查您的设备是否被支持 {#check-if-supported}
从 [GitHub Releases](https://github.com/tiann/KernelSU/releases) 或 [酷安](https://www.coolapk.com/apk/me.weishu.kernelsu) 下载 KernelSU 管理器应用,然后将应用程序安装到设备并打开: 从 [GitHub Releases](https://github.com/tiann/KernelSU/releases) 或 [酷安](https://www.coolapk.com/apk/me.weishu.kernelsu) 下载 KernelSU 管理器应用,然后将应用程序安装到设备并打开:
@@ -11,7 +11,7 @@
对于显示“不支持”的设备,这里有一个[非官方支持设备列表](unofficially-support-devices.md),你可以用这个列表里面的内核自行编译。 对于显示“不支持”的设备,这里有一个[非官方支持设备列表](unofficially-support-devices.md),你可以用这个列表里面的内核自行编译。
::: :::
## 备份你的 boot.img ## 备份你的 boot.img {#backup-boot-image}
在进行刷机操作之前,你必须先备份好自己的原厂 boot.img。如果你后续刷机出现了任何问题你都可以通过使用 fastboot 刷回原厂 boot 来恢复系统。 在进行刷机操作之前,你必须先备份好自己的原厂 boot.img。如果你后续刷机出现了任何问题你都可以通过使用 fastboot 刷回原厂 boot 来恢复系统。
@@ -19,9 +19,9 @@
任何刷机操作都是有风险的,请务必做好这一步再进行下一步操作!!必要时你还可以备份你手机的所有数据。 任何刷机操作都是有风险的,请务必做好这一步再进行下一步操作!!必要时你还可以备份你手机的所有数据。
::: :::
## 必备知识 ## 必备知识 {#acknowage}
### ADB 和 fastboot ### ADB 和 fastboot {#adb-and-fastboot}
此教程默认你会使用 ADB 和 fastboot 工具,如果你没有了解过,建议使用搜索引擎先学习相关知识。 此教程默认你会使用 ADB 和 fastboot 工具,如果你没有了解过,建议使用搜索引擎先学习相关知识。
@@ -43,13 +43,13 @@ w .x .y -zzz -k -something
请注意,内核版本中的 SubLevel 不属于 KMI 的范畴!也就是说 `5.10.101-android12-9-g30979850fc20``5.10.137-android12-9-g30979850fc20` 的 KMI 相同! 请注意,内核版本中的 SubLevel 不属于 KMI 的范畴!也就是说 `5.10.101-android12-9-g30979850fc20``5.10.137-android12-9-g30979850fc20` 的 KMI 相同!
::: :::
### 内核版本与 Android 版本 ### 内核版本与 Android 版本 {#kernel-version-vs-android-version}
请注意:**内核版本与 Android 版本并不一定相同!** 请注意:**内核版本与 Android 版本并不一定相同!**
如果您发现您的内核版本是 `android12-5.10.101`,然而你 Android 系统的版本为 Android 13 或者其他;请不要觉得奇怪,因为 Android 系统的版本与 Linux 内核的版本号不一定是一致的Linux 内核的版本号一般与**设备出厂的时候自带的 Android 系统的版本一致**,如果后续 Android 系统升级,内核版本一般不会发生变化。如果你需要刷机,**请以内核版本为准!!** 如果您发现您的内核版本是 `android12-5.10.101`,然而你 Android 系统的版本为 Android 13 或者其他;请不要觉得奇怪,因为 Android 系统的版本与 Linux 内核的版本号不一定是一致的Linux 内核的版本号一般与**设备出厂的时候自带的 Android 系统的版本一致**,如果后续 Android 系统升级,内核版本一般不会发生变化。如果你需要刷机,**请以内核版本为准!!**
## 安装介绍 ## 安装介绍 {#installation-introduction}
KernelSU 的安装方法有如下几种,各自适用于不同的场景,请按需选择: KernelSU 的安装方法有如下几种,各自适用于不同的场景,请按需选择:
@@ -58,7 +58,7 @@ KernelSU 的安装方法有如下几种,各自适用于不同的场景,请
3. 使用 KernelSU 提供的 boot.img 使用 fastboot 安装 3. 使用 KernelSU 提供的 boot.img 使用 fastboot 安装
4. 手动修补 boot.img 然后安装 4. 手动修补 boot.img 然后安装
## 使用自定义 Recovery 安装 ## 使用自定义 Recovery 安装 {#install-by-recovery}
前提:你的设备必须有自定义的 Recovery如 TWRP如果没有或者只有官方 Recovery请使用其他方法。 前提:你的设备必须有自定义的 Recovery如 TWRP如果没有或者只有官方 Recovery请使用其他方法。
@@ -70,7 +70,7 @@ KernelSU 的安装方法有如下几种,各自适用于不同的场景,请
PS. 这种方法适用于任何情况下的安装(不限于初次安装或者后续升级),只要你用 TWRP 就可以操作。 PS. 这种方法适用于任何情况下的安装(不限于初次安装或者后续升级),只要你用 TWRP 就可以操作。
## 使用内核刷写 App 安装 ## 使用内核刷写 App 安装 {#install-by-kernel-flasher}
前提:你的设备必须已经 root。例如你已经安装了 Magisk 获取了 root或者你已经安装了旧版本的 KernelSU 需要升级到其他版本的 KernelSU如果你的设备无 root请尝试其他方法。 前提:你的设备必须已经 root。例如你已经安装了 Magisk 获取了 root或者你已经安装了旧版本的 KernelSU 需要升级到其他版本的 KernelSU如果你的设备无 root请尝试其他方法。
@@ -87,11 +87,11 @@ PS. 这种方法适用于任何情况下的安装(不限于初次安装或者
PS. 这种方法在升级 KernelSU 的时候较为方便,无需电脑即可完成(注意备份!)。 PS. 这种方法在升级 KernelSU 的时候较为方便,无需电脑即可完成(注意备份!)。
## 使用 KernelSU 提供的 boot.img 安装 ## 使用 KernelSU 提供的 boot.img 安装 {#install-by-kernelsu-boot-image}
这张方法无需你有 TWRP也不需要你的手机有 root 权限;适用于你初次安装 KernelSU。 这张方法无需你有 TWRP也不需要你的手机有 root 权限;适用于你初次安装 KernelSU。
### 找到合适的 boot.img ### 找到合适的 boot.img {#found-propery-image}
KernelSU 为 GKI 设备提供了通用的 boot.img您应该将 boot.img 刷写到设备的 boot 分区。 KernelSU 为 GKI 设备提供了通用的 boot.img您应该将 boot.img 刷写到设备的 boot 分区。
@@ -105,7 +105,7 @@ KernelSU 为 GKI 设备提供了通用的 boot.img您应该将 boot.img 刷
3. Pixel 设备有些特殊,请查看下面的教程。 3. Pixel 设备有些特殊,请查看下面的教程。
::: :::
### 将 boot.img 刷入设备 ### 将 boot.img 刷入设备 {#flash-boot-image}
使用 `adb` 连接您的设备,然后执行 `adb reboot bootloader` 进入 fastboot 模式,然后使用此命令刷入 KernelSU 使用 `adb` 连接您的设备,然后执行 `adb reboot bootloader` 进入 fastboot 模式,然后使用此命令刷入 KernelSU
@@ -117,7 +117,7 @@ fastboot flash boot boot.img
如果你的设备支持 `fastboot boot`,可以先使用 `fastboot boot boot.img` 来先尝试使用 boot.img 引导系统,如果出现意外,再重启一次即可开机。 如果你的设备支持 `fastboot boot`,可以先使用 `fastboot boot boot.img` 来先尝试使用 boot.img 引导系统,如果出现意外,再重启一次即可开机。
::: :::
### 重启 ### 重启 {#reboot}
刷入完成后,您应该重新启动您的设备: 刷入完成后,您应该重新启动您的设备:
@@ -125,7 +125,7 @@ fastboot flash boot boot.img
fastboot reboot fastboot reboot
``` ```
## 手动修补 boot.img ## 手动修补 boot.img {#patch-boot-image}
对于某些设备来说,其 boot.img 格式不那么常见,比如不是 `lz4`, `gz` 和未压缩;最典型的就是 Pixel它 boot.img 的格式是 `lz4_legacy` 压缩ramdisk 可能是 `gz` 也可能是 `lz4_legacy` 压缩;此时如果你直接刷入 KernelSU 提供的 boot.img手机可能无法开机这时候你可以通过手动修补 boot.img 来实现。 对于某些设备来说,其 boot.img 格式不那么常见,比如不是 `lz4`, `gz` 和未压缩;最典型的就是 Pixel它 boot.img 的格式是 `lz4_legacy` 压缩ramdisk 可能是 `gz` 也可能是 `lz4_legacy` 压缩;此时如果你直接刷入 KernelSU 提供的 boot.img手机可能无法开机这时候你可以通过手动修补 boot.img 来实现。
@@ -136,13 +136,13 @@ fastboot reboot
其中Android-Image-Kitchen 适用于 PC 上操作magiskboot 需要手机配合。 其中Android-Image-Kitchen 适用于 PC 上操作magiskboot 需要手机配合。
### 准备 ### 准备 {#patch-preparation}
1. 获取你手机的原厂 boot.img你可以通过你手机的线刷包解压后之间获取如果你是卡刷包那你也许需要[payload-dumper-go](https://github.com/ssut/payload-dumper-go) 1. 获取你手机的原厂 boot.img你可以通过你手机的线刷包解压后之间获取如果你是卡刷包那你也许需要[payload-dumper-go](https://github.com/ssut/payload-dumper-go)
2. 下载 KernelSU 提供的与你设备 KMI 版本一致的 AnyKernel3 刷机包(可以参考 *自定义 TWRP 刷入一节*)。 2. 下载 KernelSU 提供的与你设备 KMI 版本一致的 AnyKernel3 刷机包(可以参考 *自定义 TWRP 刷入一节*)。
3. 解压缩 AnyKernel3 刷机包,获取其中的 `Image` 文件,此文件为 KernelSU 的内核文件。 3. 解压缩 AnyKernel3 刷机包,获取其中的 `Image` 文件,此文件为 KernelSU 的内核文件。
### 使用 Android-Image-Kitchen ### 使用 Android-Image-Kitchen {#using-android-image-kitchen}
1. 下载 Android-Image-Kitchen 至你电脑 1. 下载 Android-Image-Kitchen 至你电脑
2. 将手机原厂 boot.img 放入 Android-Image-Kitchen 根目录 2. 将手机原厂 boot.img 放入 Android-Image-Kitchen 根目录
@@ -150,7 +150,7 @@ fastboot reboot
4.`split_img` 目录中的 `boot.img-kernel` 替换为你从 AnyKernel3 解压出来的 `Image`(注意名字改为 boot.img-kernel)。 4.`split_img` 目录中的 `boot.img-kernel` 替换为你从 AnyKernel3 解压出来的 `Image`(注意名字改为 boot.img-kernel)。
5. 在 Android-Image-Kitchecn 根目录执行 `./repackimg.sh`;此时你会得到一个 `image-new.img` 的文件;使用此 boot.img 通过 fastboot 刷入即可(刷入方法参考上一节)。 5. 在 Android-Image-Kitchecn 根目录执行 `./repackimg.sh`;此时你会得到一个 `image-new.img` 的文件;使用此 boot.img 通过 fastboot 刷入即可(刷入方法参考上一节)。
### 使用 magiskboot ### 使用 magiskboot {#using magiskboot}
1. 在 Magisk 的 [Release 页面](https://github.com/topjohnwu/Magisk/releases) 下载最新的 Magisk 安装包。 1. 在 Magisk 的 [Release 页面](https://github.com/topjohnwu/Magisk/releases) 下载最新的 Magisk 安装包。
2. 将 Magisk-*.apk 重命名为 Magisk-vesion.zip 然后解压缩。 2. 将 Magisk-*.apk 重命名为 Magisk-vesion.zip 然后解压缩。
@@ -161,7 +161,7 @@ fastboot reboot
7. 使用 `Image` 替换 `kernel`: `mv -f Image kernel` 7. 使用 `Image` 替换 `kernel`: `mv -f Image kernel`
8. 执行 `./magiskboot repack boot.img` 打包 img此时你会得到一个 `new-boot.img` 的文件,使用这个文件 fastboot 刷入设备即可。 8. 执行 `./magiskboot repack boot.img` 打包 img此时你会得到一个 `new-boot.img` 的文件,使用这个文件 fastboot 刷入设备即可。
## 其他变通方法 ## 其他变通方法 {#other-methods}
其实所有这些安装方法的主旨只有一个,那就是**替换原厂的内核为 KernelSU 提供的内核**;只要能实现这个目的,就可以安装;比如以下是其他可行的方法: 其实所有这些安装方法的主旨只有一个,那就是**替换原厂的内核为 KernelSU 提供的内核**;只要能实现这个目的,就可以安装;比如以下是其他可行的方法:

View File

@@ -1,4 +1,4 @@
# 模块开发指南 # 模块开发指南 {#introduction}
KernelSU 提供了一个模块机制,它可以在保持系统分区完整性的同时达到修改系统分区的效果;这种机制通常被称之为 systemless。 KernelSU 提供了一个模块机制,它可以在保持系统分区完整性的同时达到修改系统分区的效果;这种机制通常被称之为 systemless。
@@ -28,7 +28,7 @@ KernelSU 的 BusyBox 现在是直接使用 Magisk 项目编译的二进制文件
因此,你完全不用担心 BusyBox 脚本与在 Magisk 和 KernelSU 之间的兼容问题,因为他们是完全一样的! 因此,你完全不用担心 BusyBox 脚本与在 Magisk 和 KernelSU 之间的兼容问题,因为他们是完全一样的!
::: :::
## KernelSU 模块 ## KernelSU 模块 {#kernelsu-modules}
KernelSU 模块就是一个放置在 `/data/adb/modules` 内且满足如下结构的文件夹: KernelSU 模块就是一个放置在 `/data/adb/modules` 内且满足如下结构的文件夹:
@@ -104,9 +104,9 @@ description=<string>
- 其他未在上面提到的内容可以是任何单行字符串。 - 其他未在上面提到的内容可以是任何单行字符串。
- 请确保使用 UNIXLF换行类型而不是WindowsCR + LF或 MacintoshCR - 请确保使用 UNIXLF换行类型而不是WindowsCR + LF或 MacintoshCR
### Shell 脚本 ### Shell 脚本 {#shell-scripts}
请阅读 [启动脚本](#启动脚本) 一节,以了解 `post-fs-data.sh``service.sh` 之间的区别。对于大多数模块开发者来说,如果您只需要运行一个启动脚本,`service.sh` 应该已经足够了。 请阅读 [启动脚本](#boot-scripts) 一节,以了解 `post-fs-data.sh``service.sh` 之间的区别。对于大多数模块开发者来说,如果您只需要运行一个启动脚本,`service.sh` 应该已经足够了。
在您的模块的所有脚本中,请使用 `MODDIR=${0%/*}`来获取您的模块的基本目录路径;请勿在脚本中硬编码您的模块路径。 在您的模块的所有脚本中,请使用 `MODDIR=${0%/*}`来获取您的模块的基本目录路径;请勿在脚本中硬编码您的模块路径。
@@ -114,7 +114,7 @@ description=<string>
你可以通过环境变量 `KSU` 来判断脚本是运行在 KernelSU 还是 Magisk 中,如果运行在 KernelSU这个值会被设置为 `true` 你可以通过环境变量 `KSU` 来判断脚本是运行在 KernelSU 还是 Magisk 中,如果运行在 KernelSU这个值会被设置为 `true`
::: :::
### `system` 目录 ### `system` 目录 {#system-directories}
这个目录的内容会在系统启动后,以 `overlayfs` 的方式叠加在系统的 `/system` 分区之上,这意味着: 这个目录的内容会在系统启动后,以 `overlayfs` 的方式叠加在系统的 `/system` 分区之上,这意味着:
@@ -149,7 +149,7 @@ KernelSU 的 systemless 机制是通过内核的 overlayfs 实现的,而 Magis
如果您的模块需要一些额外的 SELinux 策略补丁,请将这些规则添加到此文件中。这个文件中的每一行都将被视为一个策略语句。 如果您的模块需要一些额外的 SELinux 策略补丁,请将这些规则添加到此文件中。这个文件中的每一行都将被视为一个策略语句。
## 模块安装包 ## 模块安装包 {#module-installer}
KernelSU 的模块安装包就是一个可以通过 KernelSU 管理器 APP 刷入的 zip 文件,此 zip 文件的格式如下: KernelSU 的模块安装包就是一个可以通过 KernelSU 管理器 APP 刷入的 zip 文件,此 zip 文件的格式如下:
@@ -167,7 +167,7 @@ module.zip
KernelSU 模块不支持在 Recovery 中安装!! KernelSU 模块不支持在 Recovery 中安装!!
::: :::
### 定制安装过程 ### 定制安装过程 {#customizing-installation}
如果你想控制模块的安装过程,可以在模块的目录下创建一个名为 `customize.sh` 的文件,这个脚本将会在模块被解压后**导入**到当前 shell 中,如果你的模块需要根据设备的 API 版本或者设备构架做一些额外的操作,那这个脚本将非常有用。 如果你想控制模块的安装过程,可以在模块的目录下创建一个名为 `customize.sh` 的文件,这个脚本将会在模块被解压后**导入**到当前 shell 中,如果你的模块需要根据设备的 API 版本或者设备构架做一些额外的操作,那这个脚本将非常有用。
@@ -175,7 +175,7 @@ KernelSU 模块不支持在 Recovery 中安装!!
`customize.sh` 脚本以“独立模式”运行在 KernelSU 的 BusyBox `ash` shell 中。你可以使用如下变量和函数: `customize.sh` 脚本以“独立模式”运行在 KernelSU 的 BusyBox `ash` shell 中。你可以使用如下变量和函数:
#### 变量 #### 变量 {#variables}
- `KSU` (bool): 标记此脚本运行在 KernelSU 环境下,此变量的值将永远为 `true`,你可以通过它区分 Magisk。 - `KSU` (bool): 标记此脚本运行在 KernelSU 环境下,此变量的值将永远为 `true`,你可以通过它区分 Magisk。
- `KSU_VER` (string): KernelSU 当前的版本名字 (如: `v0.4.0`) - `KSU_VER` (string): KernelSU 当前的版本名字 (如: `v0.4.0`)
@@ -193,7 +193,7 @@ KernelSU 模块不支持在 Recovery 中安装!!
`MAGISK_VER_CODE` 在 KernelSU 中永远为 `25200``MAGISK_VER` 则为 `v25.2`,请不要通过这两个变量来判断是否是 KernelSU `MAGISK_VER_CODE` 在 KernelSU 中永远为 `25200``MAGISK_VER` 则为 `v25.2`,请不要通过这两个变量来判断是否是 KernelSU
::: :::
#### 函数 #### 函数 {#functions}
```txt ```txt
ui_print <msg> ui_print <msg>
@@ -219,7 +219,7 @@ set_perm_recursive <directory> <owner> <group> <dirpermission> <filepermission>
set_perm dir owner group dirpermission context set_perm dir owner group dirpermission context
``` ```
## 启动脚本 ## 启动脚本 {#boot-scripts}
在 KernelSU 中根据脚本运行模式的不同分为两种post-fs-data 模式和 late_start 服务模式。 在 KernelSU 中根据脚本运行模式的不同分为两种post-fs-data 模式和 late_start 服务模式。

View File

@@ -1,4 +1,4 @@
# 救砖 # 救砖 {#intruduction}
在刷机的时候我们可能会遇到设备“变砖”的情况,理论上讲,如果你只是使用 fastboot 刷入 boot 分区或者安装不合适的模块导致设备无法启动,那么这都可以通过合适的操作恢复手机;本文档旨在提供一些急救方法让你可以在“变砖”中恢复。 在刷机的时候我们可能会遇到设备“变砖”的情况,理论上讲,如果你只是使用 fastboot 刷入 boot 分区或者安装不合适的模块导致设备无法启动,那么这都可以通过合适的操作恢复手机;本文档旨在提供一些急救方法让你可以在“变砖”中恢复。
@@ -23,13 +23,13 @@
1. AB 更新 1. AB 更新
2. 音量键救砖 2. 音量键救砖
#### AB 更新 #### AB 更新 {#ab-update}
KernelSU 的模块更新借鉴了 Android 系统 OTA 更新时的 AB 更新机制,如果你安装了新模块或者对已有模块有更新操作,不会直接操作当前使用的模块文件,而是会把所有模块构建成另外一个 update 镜像;系统重启之后,会使用这个 update 镜像尝试启动一次,如果 Android 系统成功启动,才会真正更新模块。 KernelSU 的模块更新借鉴了 Android 系统 OTA 更新时的 AB 更新机制,如果你安装了新模块或者对已有模块有更新操作,不会直接操作当前使用的模块文件,而是会把所有模块构建成另外一个 update 镜像;系统重启之后,会使用这个 update 镜像尝试启动一次,如果 Android 系统成功启动,才会真正更新模块。
因此,最简单最常用的救砖方法就是:**强制重启一次**。如果你在刷某个模块之后系统无法启动,你可以长按电源键超过 10 秒,系统会自动重启;重启之后会回滚到更新模块之前的状态,之前更新的模块会被自动禁用。 因此,最简单最常用的救砖方法就是:**强制重启一次**。如果你在刷某个模块之后系统无法启动,你可以长按电源键超过 10 秒,系统会自动重启;重启之后会回滚到更新模块之前的状态,之前更新的模块会被自动禁用。
#### 音量键救砖 #### 音量键救砖 {#volume-down}
如果 AB 更新依然无法解决,你可以尝试使用**安全模式**。进入安全模式之后,所有的模块都会被禁用。 如果 AB 更新依然无法解决,你可以尝试使用**安全模式**。进入安全模式之后,所有的模块都会被禁用。

View File

@@ -1,21 +1,21 @@
# 什么是 KernelSU? # 什么是 KernelSU? {#introduction}
KernelSU 是 Android GKI 设备的 root 解决方案,它工作在内核模式,并直接在内核空间中为用户空间应用程序授予 root 权限。 KernelSU 是 Android GKI 设备的 root 解决方案,它工作在内核模式,并直接在内核空间中为用户空间应用程序授予 root 权限。
## 功能 ## 功能 {#features}
KernelSU 的主要特点是它是**基于内核的**。 KernelSU 运行在内核空间, 所以它可以提供我们以前从未有过的内核接口。 例如,我们可以在内核模式下为任何进程添加硬件断点;我们可以在任何进程的物理内存中访问,而无人知晓;我们可以在内核空间拦截任何系统调用; 等等。 KernelSU 的主要特点是它是**基于内核的**。 KernelSU 运行在内核空间, 所以它可以提供我们以前从未有过的内核接口。 例如,我们可以在内核模式下为任何进程添加硬件断点;我们可以在任何进程的物理内存中访问,而无人知晓;我们可以在内核空间拦截任何系统调用; 等等。
KernelSU 还提供了一个基于 overlayfs 的模块系统,允许您加载自定义插件到系统中。它还提供了一种修改 /system 分区中文件的机制。 KernelSU 还提供了一个基于 overlayfs 的模块系统,允许您加载自定义插件到系统中。它还提供了一种修改 /system 分区中文件的机制。
## 如何使用 ## 如何使用 {#how-to-use}
请参考: [安装](installation) 请参考: [安装](installation)
## 如何构建 ## 如何构建 {#how-to-build}
请参考: [如何构建](how-to-build) 请参考: [如何构建](how-to-build)
## 讨论 ## 讨论 {#discussion}
- Telegram: [@KernelSU](https://t.me/KernelSU) - Telegram: [@KernelSU](https://t.me/KernelSU)