docs: typo & text spacing fixes (#2420)

修复一些错别字、标点;补充部分中英文间距
This commit is contained in:
Moe Baka 2025-02-07 09:54:29 +08:00 committed by GitHub
parent de2100e1e9
commit 401b5b8c67
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 45 additions and 45 deletions

View File

@ -44,11 +44,11 @@ function sidebarGuide() {
{
text: 'Guide',
items: [
{ text: '什么是 KernelSU?', link: '/zh_CN/guide/what-is-kernelsu' },
{ text: '什么是 KernelSU', link: '/zh_CN/guide/what-is-kernelsu' },
{ text: 'KernelSU 模块与 Magisk 的差异', link: '/zh_CN/guide/difference-with-magisk' },
{ text: '安装', link: '/zh_CN/guide/installation' },
{ text: '如何构建?', link: '/zh_CN/guide/how-to-build' },
{ text: '如何为非GKI设备集成 KernelSU', link: '/zh_CN/guide/how-to-integrate-for-non-gki'},
{ text: '如何构建', link: '/zh_CN/guide/how-to-build' },
{ text: '如何为非 GKI 设备集成 KernelSU', link: '/zh_CN/guide/how-to-integrate-for-non-gki'},
{ text: '非官方支持设备', link: '/zh_CN/guide/unofficially-support-devices.md' },
{ text: '模块开发指南', link: '/zh_CN/guide/module.md' },
{ text: '模块 Web 界面', link: '/zh_CN/guide/module-webui.md' },

View File

@ -20,7 +20,7 @@ UID 为 0 的用户被称之为 root 用户GID 为 0 的组被称之为 root
此处的 UID 跟 Android 系统的多用户或者说工作资料Work Profile不是一个概念。工作资料实际上是对 UID 进行分片实现的,比如 10000-19999 是主用户110000-119999 是工作资料;他们中的任何一个普通应用都拥有自己独有的 UID。
:::
每一个 App 可以有若干个组GID 使其主要的组,通常与 UID 一致;其他的组被称之为补充组(groups)。某些权限是通过组控制的,比如网络访问,蓝牙等。
每一个 App 可以有若干个组GID 其主要的组,通常与 UID 一致;其他的组被称之为补充组 (groups)。某些权限是通过组控制的,比如网络访问,蓝牙等。
例如,如果我们在 ADB shell 中执行 `id` 命令,会得到如下输出:
@ -43,9 +43,9 @@ App Profile 仅仅是控制 root 应用使用 `su` 后的权限,它并非控
Capabilities 是 Linux 的一种分权机制。
传统的 UNIX 系统为了执行权限检查,将进程分为两类:特权进程(其有效用户 ID 为 0称为超级用户或 root和非特权进程其有效 UID 为非零。特权进程会绕过所有内核权限检查而非特权进程则根据其凭据通常是有效UID、有效GID和补充组列表进行完整的权限检查。
传统的 UNIX 系统为了执行权限检查,将进程分为两类:特权进程(其有效用户 ID 为 0称为超级用户或 root和非特权进程其有效 UID 为非零)。特权进程会绕过所有内核权限检查,而非特权进程则根据其凭据(通常是有效 UID、有效 GID 和补充组列表)进行完整的权限检查。
从 Linux 2.2开始Linux 将传统上与超级用户关联的特权分解为独立的单元,称为 Capabilities有的也翻译为“权能”它们可以独立启用和禁用。
从 Linux 2.2 开始Linux 将传统上与超级用户关联的特权分解为独立的单元,称为 Capabilities有的也翻译为“权能”它们可以独立启用和禁用。
每一个 Capability 代表一个或者一类权限。比如 `CAP_DAC_READ_SEARCH` 就代表是否有能力绕过文件读取权限检查和目录读取和执行权限检查。如果一个有效 UID 为 `0` 的用户root 用户)没有 `CAP_DAC_READ_SEARCH` 或者更高 Capalities这意味着即使它是 root 也不能随意读取文件。
@ -110,8 +110,8 @@ KernelSU 提供了一种 systemless 的方式来修改系统分区,这是通
另外KernelSU 管理器的设置界面还提供了一个“默认卸载模块”的开关,这个开关默认情况下是**开启**的,这意味着**如果不对 App 做额外的设置**,默认情况下 KernelSU 或者某些模块会对此 App 执行卸载操作。当然,如果你不喜欢这个设置或者这个设置会影响某些 App可以有如下选择
1. 保持“默认卸载模块”的开关,然后针对不需要“卸载模块”的 App 进行单独的设置,在 App Profile 中关闭“卸载模块”;(相当于“白名单)。
2. 关闭“默认卸载模块”的开关,然后针对需要“卸载模块”的 App 进行单独的设置,在 App Profile 中开启“卸载模块”;(相当于“黑名单)。
1. 保持“默认卸载模块”的开关,然后针对不需要“卸载模块”的 App 进行单独的设置,在 App Profile 中关闭“卸载模块”;(相当于“白名单)。
2. 关闭“默认卸载模块”的开关,然后针对需要“卸载模块”的 App 进行单独的设置,在 App Profile 中开启“卸载模块”;(相当于“黑名单)。
:::info
KernelSU 在 5.10 及以上内核上,内核会执行“卸载模块”的操作;但在 5.10 以下的设备上这个开关仅仅是一个“配置项”KernelSU 本身不会做任何动作,一些模块(如 Zygisksu 会通过这个模块决定是否需要卸载)

View File

@ -1,28 +1,28 @@
# 常见问题
## KernelSU 是否支持我的设备
## KernelSU 是否支持我的设备?
首先,您的设备应该能够解锁 bootloader。 如果不能,则不支持。
然后在你的设备上安装 KernelSU 管理器并打开它,如果它显示 `不支持` ,那么你的设备没有官方支持的开箱即用的 boot image但你可以自己编译内核集成 KernelSU 进而使用它。
## KernelSU 是否需要解锁 Bootloader
## KernelSU 是否需要解锁 Bootloader
当然需要。
## KernelSU 是否支持模块
## KernelSU 是否支持模块?
支持。请查阅 [模块](module.md)。
## KernelSU 是否支持 Xposed
## KernelSU 是否支持 Xposed
支持。LSPosed 可以在 [ZygiskNext](https://github.com/Dr-TSNG/ZygiskNext) 的支持下正常运行。
## KernelSU 支持 Zygisk 吗?
## KernelSU 支持 Zygisk 吗
KernelSU 本体不支持 Zygisk但是你可以用 [ZygiskNext](https://github.com/Dr-TSNG/ZygiskNext) 来使用 Zygisk 模块。
## KernelSU 与 Magisk 兼容吗
## KernelSU 与 Magisk 兼容吗?
KernelSU 的模块系统与 Magisk 的 magic mount 有冲突,如果 KernelSU 中启用了任何模块,那么整个 Magisk 将无法工作。
@ -38,7 +38,7 @@ KernelSU 的模块系统与 Magisk 的 magic mount 有冲突,如果 KernelSU
## KernelSU 支持 Android 12 以下的设备吗?
影响 KernelSU 兼容性的是设备内核的版本,它与设备的 Android 版本没有直接的关系。唯一有关联的是:**出厂** Android 12 的设备,一定是 5.10 或更高的内核GKI设备因此结论如下
影响 KernelSU 兼容性的是设备内核的版本,它与设备的 Android 版本没有直接的关系。唯一有关联的是:**出厂** Android 12 的设备,一定是 5.10 或更高的内核GKI 设备);因此结论如下:
1. 出厂 Android 12 的设备必定是支持的GKI 设备)
2. 旧版本内核的设备(即使是 Android 12也可能是旧内核是兼容的你需要自己编译内核
@ -51,11 +51,11 @@ KernelSU 的模块系统与 Magisk 的 magic mount 有冲突,如果 KernelSU
参考[教程](how-to-integrate-for-non-gki)
## 为什么我手机系统是 Android 13但内核版本却是 "android12-5.10"?
## 为什么我手机系统是 Android 13但内核版本却是 "android12-5.10"
内核版本与 Android 版本无关,如果你需要刷入 KernelSU请永远使用**内核版本**而非 Android 版本,如果你为 "android12-5.10" 的设备刷入 Android 13 的内核,等待你的将是 bootloop.
## 我是 GKI1.0, 能用 KernelSU 吗?
## 我是 GKI1.0, 能用 KernelSU 吗
GKI1 跟 GKI2 完全是两个东西,所以你需要自行编译内核。

View File

@ -1,4 +1,4 @@
# 如何构建 KernelSU?
# 如何构建 KernelSU
首先,您应该阅读内核构建的 Android 官方文档:
@ -46,15 +46,15 @@ tools/bazel build --config=fast //common:kernel_aarch64_dist
::: code-group
```sh[最新tag(稳定版本)]
```sh[最新 tag(稳定版本)]
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -
```
```sh[main分支(开发版本)]
```sh[main 分支(开发版本)]
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s main
```
```sh[指定tag(比如v0.5.2)]
```sh[指定 tag(比如 v0.5.2)]
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s v0.5.2
```

View File

@ -35,7 +35,7 @@ CONFIG_KPROBE_EVENTS=y
最后,重新编译你的内核即可。
如果你发现KPROBES仍未生效很有可能是因为它的依赖项`CONFIG_MODULES`没有被启用(如果还是未生效请键入`make menuconfig`搜索KPROBES 的其它依赖并启用
如果你发现 KPROBES 仍未生效,很有可能是因为它的依赖项`CONFIG_MODULES`没有被启用(如果还是未生效请键入`make menuconfig`搜索 KPROBES 的其它依赖并启用)
如果你在集成 KernelSU 之后手机无法启动,那么很可能你的内核中 **kprobe 工作不正常**,你需要修复这个 bug 或者用第二种方法。
@ -54,7 +54,7 @@ CONFIG_KPROBE_EVENTS=y
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s v0.9.5
```
请注意某些设备的defconfig文件可能在`arch/arm64/configs/设备代号_defconfig`或位于`arch/arm64/configs/vendor/设备代号_defconfig`。在您的defconfig文件中,将 `CONFIG_KSU`设置为`y`以启用KernelSU,或设置为`n`以禁用。比如在某个defconfig中:
请注意,某些设备的 defconfig 文件可能在`arch/arm64/configs/设备代号_defconfig`或位于`arch/arm64/configs/vendor/设备代号_defconfig`。在您的 defconfig 文件中,将`CONFIG_KSU`设置为`y`以启用 KernelSU或设置为`n`以禁用。比如在某个 defconfig 中:
`arch/arm64/configs/...`
```sh
+# KernelSU
@ -319,7 +319,7 @@ index 32f6f1c68..d69d8eca2 100644
### path_umount {#how-to-backport-path-umount}
你可以通过从K5.9向旧版本移植`path_umount`在GKI之前的内核上获得卸载模块的功能。你可以通过以下补丁作为参考:
你可以通过从 K5.9 向旧版本移植 `path_umount`,在 GKI 之前的内核上获得卸载模块的功能。你可以通过以下补丁作为参考:
```diff
--- a/fs/namespace.c

View File

@ -45,7 +45,7 @@ w .x .y -zzz -k -something
### 安全补丁级别 {#security-patch-level}
新的 Android 设备上可能采取了防回滚机制,它不允许刷入一个安全补丁更旧的内核。比如,如果你的设备内核是 `5.10.101-android12-9-g30979850fc20`,它的安全补丁为 `2023-11`;即使你刷入与内核 KMI 一致的内核,如果安全补丁级别比 `2023-11`要老(例如`2023-06`),那么很可能会无法开机。
新的 Android 设备上可能采取了防回滚机制,它不允许刷入一个安全补丁更旧的内核。比如,如果你的设备内核是 `5.10.101-android12-9-g30979850fc20`,它的安全补丁为 `2023-11`;即使你刷入与内核 KMI 一致的内核,如果安全补丁级别比 `2023-11` 要老(例如`2023-06`),那么很可能会无法开机。
因此,在保持 KMI 一致的情况下,优先采用安全补丁级别更新的内核。
@ -163,7 +163,7 @@ GKI 的安装方法有如下几种,各自适用于不同的场景,请按需
KernelSU 为 GKI 设备提供了通用的 boot.img您应该将 boot.img 刷写到设备的 boot 分区。
您可以从 [GitHub Release](https://github.com/tiann/KernelSU/releases) 下载 boot.img, 请注意您应该使用正确版本的 boot.img。如果您不知道应该下载哪一个文件请仔细阅读本文档中关于 [KMI](#kmi) 和 [安全补丁级别](#security-patch-level)的描述。
您可以从 [GitHub Release](https://github.com/tiann/KernelSU/releases) 下载 boot.img, 请注意您应该使用正确版本的 boot.img。如果您不知道应该下载哪一个文件请仔细阅读本文档中关于 [KMI](#kmi) 和[安全补丁级别](#security-patch-level)的描述。
通常情况下,同一个 KMI 和 安全补丁级别下会有三个不同格式的 boot 文件,它们除了内核压缩格式不同之外都一样。请检查您原有 boot.img 的内核压缩格式,您应该使用正确的格式,例如 `lz4``gz`;如果是用不正确的压缩格式,刷入 boot 后可能无法开机。
@ -197,7 +197,7 @@ fastboot reboot
步骤:
1. 下载 AnyKernel3 的刷机包,如果你不知道下载哪一个,请仔细查阅上述文档中关于 [KMI](#kmi) 和 [安全补丁级别](#security-patch-level)的描述;下载错误的刷机包很可能导致无法开机,请注意备份。
1. 下载 AnyKernel3 的刷机包,如果你不知道下载哪一个,请仔细查阅上述文档中关于 [KMI](#kmi) 和[安全补丁级别](#security-patch-level)的描述;下载错误的刷机包很可能导致无法开机,请注意备份。
2. 打开内核刷写 App授予必要的 root 权限),使用提供的 AnyKernel3 刷机包刷入。
这种方法需要内核刷写 App 拥有 root 权限,你可以用如下几种方法实现:
@ -229,8 +229,8 @@ Magisk 官方提供的 `magiskboot` 只能运行在 Android/Linux 设备上,
### 准备 {#patch-preparation}
1. 获取你手机的原厂 boot.img你可以通过你手机的线刷包解压后之间获取如果你是卡刷包那你也许需要[payload-dumper-go](https://github.com/ssut/payload-dumper-go)
2. 下载 KernelSU 提供的与你设备 KMI 版本一致的 AnyKernel3 刷机包;如果您不知道应该下载哪一个文件,请仔细阅读本文档中关于 [KMI](#kmi) 和 [安全补丁级别](#security-patch-level)的描述。
1. 获取你手机的原厂 boot.img你可以通过你手机的线刷包解压后之间获取如果你是卡刷包那你也许需要 [payload-dumper-go](https://github.com/ssut/payload-dumper-go)
2. 下载 KernelSU 提供的与你设备 KMI 版本一致的 AnyKernel3 刷机包;如果您不知道应该下载哪一个文件,请仔细阅读本文档中关于 [KMI](#kmi) 和[安全补丁级别](#security-patch-level)的描述。
3. 解压缩 AnyKernel3 刷机包,获取其中的 `Image` 文件,此文件为 KernelSU 的内核文件。
### 在 Android 设备上使用 magiskboot {#using-magiskboot-on-Android-devices}
@ -263,7 +263,7 @@ Magisk 官方的 `magiskboot` 可以在 Linux 设备上执行,如果你是 Lin
步骤:
1. 在 KernelSU 的 [Release 页面](https://github.com/tiann/KernelSU/releases) 下载与你手机版本匹配的以 AnyKernel3 开头的 zip 刷机包;如果你不知道下载哪一个,请仔细查阅上述文档中关于**KMI**和**安全补丁级别**的描述;下载错误的刷机包很可能导致无法开机,请注意备份。
1. 在 KernelSU 的 [Release 页面](https://github.com/tiann/KernelSU/releases) 下载与你手机版本匹配的以 AnyKernel3 开头的 zip 刷机包;如果你不知道下载哪一个,请仔细查阅上述文档中关于 **KMI** 和**安全补丁级别**的描述;下载错误的刷机包很可能导致无法开机,请注意备份。
2. 重启手机进入 TWRP。
3. 使用 adb 将 AnyKernel3-*.zip 放到手机 /sdcard 然后在 TWRP 图形界面选择安装;或者你也可以直接 `adb sideload AnyKernel-*.zip` 安装。

View File

@ -2,7 +2,7 @@
KernelSU 的模块除了执行启动脚本和修改系统文件之外,还支持显示 UI 界面和与用户交互。
你可以通过任何 Web 技术编写 HTML + CSS + JavaScript 页面KernelSU 的管理器将通过WebView 显示这些页面。此外KernelSU 还提供了一些用于与系统交互的 JavaScript API例如执行shell命令。
你可以通过任何 Web 技术编写 HTML + CSS + JavaScript 页面KernelSU 的管理器将通过 WebView 显示这些页面。此外KernelSU 还提供了一些用于与系统交互的 JavaScript API例如执行 shell 命令。
## WebUI 根目录
@ -24,7 +24,7 @@ Web 资源文件应放置在模块根目录的 `webroot` 子目录中,并且
## JavaScript API
如果只是一个显示页面那它和普通网页没有什么区别。更重要的是KernelSU 提供了一系列的系统API可以让您实现模块特有的功能。
如果只是一个显示页面那它和普通网页没有什么区别。更重要的是KernelSU 提供了一系列的系统 API可以让您实现模块特有的功能。
KernelSU 提供了一个 JavaScript 库并[在 npm 上发布](https://www.npmjs.com/package/kernelsu),您可以在网页的 JavaScript 代码中使用它。
@ -36,13 +36,13 @@ import { exec } from 'kernelsu';
const { errno, stdout } = await exec("getprop ro.product.model");
````
再比如你可以让网页全屏显示或者显示一个Toast。
再比如,你可以让网页全屏显示,或者显示一个 Toast。
[API文档](https://www.npmjs.com/package/kernelsu)
[API 文档](https://www.npmjs.com/package/kernelsu)
如果您发现现有的API不能满足您的需求或者使用不方便欢迎[在这里](https://github.com/tiann/KernelSU/issues)给我们提出建议!
如果您发现现有的 API 不能满足您的需求或者使用不方便,欢迎[在这里](https://github.com/tiann/KernelSU/issues)给我们提出建议!
## 一些技巧
1. 您可以正常使用`localStorage`存储一些数据,但卸载管理器后,这些数据将会丢失。 如果需要持久保存,可以自己将数据写入某个目录。
2. 对于简单的页面,我建议您使用[parceljs](https://parceljs.org/)进行打包。它零配置,使用非常方便。不过,如果你是前端高手或者有自己的喜好,那就选择你喜欢的吧!
2. 对于简单的页面,我建议您使用 [parceljs](https://parceljs.org/) 进行打包。它零配置,使用非常方便。不过,如果你是前端高手或者有自己的喜好,那就选择你喜欢的吧!

View File

@ -10,12 +10,12 @@ KernelSU 的模块支持显示界面并与用户交互,请参阅 [WebUI 文档
## Busybox
KernelSU 提供了一个功能完备的 BusyBox 二进制文件包括完整的SELinux支持。可执行文件位于 `/data/adb/ksu/bin/busybox`
KernelSU 提供了一个功能完备的 BusyBox 二进制文件(包括完整的 SELinux 支持)。可执行文件位于 `/data/adb/ksu/bin/busybox`
KernelSU 的 BusyBox 支持运行时可切换的 "ASH Standalone Shell Mode"。
这种独立模式意味着在运行 BusyBox 的 ash shell 时,每个命令都会直接使用 BusyBox 中内置的应用程序,而不管 PATH 设置为什么。
例如,`ls``rm``chmod` 等命令将不会使用 PATH 中设置的命令在Android的情况下默认情况下分别为 `/system/bin/ls``/system/bin/rm``/system/bin/chmod`),而是直接调用 BusyBox 内置的应用程序。
这确保了脚本始终在可预测的环境中运行并始终具有完整的命令套件无论它运行在哪个Android版本上。
要强制一个命令不使用BusyBox你必须使用完整路径调用可执行文件。
例如,`ls``rm``chmod` 等命令将不会使用 PATH 中设置的命令(在 Android 的情况下,默认情况下分别为 `/system/bin/ls``/system/bin/rm``/system/bin/chmod`),而是直接调用 BusyBox 内置的应用程序。
这确保了脚本始终在可预测的环境中运行,并始终具有完整的命令套件,无论它运行在哪个 Android 版本上。
要强制一个命令不使用 BusyBox你必须使用完整路径调用可执行文件。
在 KernelSU 上下文中运行的每个 shell 脚本都将在 BusyBox 的 ash shell 中以独立模式运行。对于第三方开发者相关的内容,包括所有启动脚本和模块安装脚本。
@ -108,13 +108,13 @@ description=<string>
- id 必须与这个正则表达式匹配:`^[a-zA-Z][a-zA-Z0-9._-]+$` 例如:✓ `a_module`,✓ `a.module`,✓ `module-101`,✗ `a module`,✗ `1_module`,✗ `-a-module`。这是您的模块的唯一标识符,发布后不应更改。
- versionCode 必须是一个整数,用于比较版本。
- 其他未在上面提到的内容可以是任何单行字符串。
- 请确保使用 UNIXLF换行类型而不是WindowsCR + LF或 MacintoshCR
- 请确保使用 UNIXLF换行类型而不是 WindowsCR + LF或 MacintoshCR
### Shell 脚本 {#shell-scripts}
请阅读 [启动脚本](#boot-scripts) 一节,以了解 `post-fs-data.sh`, `post-mount.sh`, `service.sh``boot-completed.sh` 之间的区别。对于大多数模块开发者来说,如果您只需要运行一个启动脚本,`service.sh` 应该已经足够了。
在您的模块的所有脚本中,请使用 `MODDIR=${0%/*}`来获取您的模块的基本目录路径;请勿在脚本中硬编码您的模块路径。
在您的模块的所有脚本中,请使用`MODDIR=${0%/*}`来获取您的模块的基本目录路径;请勿在脚本中硬编码您的模块路径。
:::tip 与 Magisk 的差异
你可以通过环境变量 `KSU` 来判断脚本是运行在 KernelSU 还是 Magisk 中,如果运行在 KernelSU这个值会被设置为 `true`

View File

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

View File

@ -21,7 +21,7 @@ UID 為 0 的使用者稱為 root 使用者GID 為 0 的群組稱為 root 群
此處的 UID 跟 Android 系統的多使用者或者說工作資料Work Profile是不同概念。工作資料實際上是對 UID 進行分片實現的,例如 10000-19999 是主使用者110000-119999 是工作資料;他們中的任何一個普通應用都擁有自己獨有的 UID。
:::
每一個應用程式可以有若干個群組GID 使其主要的群組,通常與 UID 一致;其他的群組稱為補充群組(groups)。某些權限是透過群組控制的,例如網路訪問,藍牙等。
每一個應用程式可以有若干個群組GID 其主要的群組,通常與 UID 一致;其他的群組稱為補充群組(groups)。某些權限是透過群組控制的,例如網路訪問,藍牙等。
例如,如果我們在 ADB shell 中執行 `id` 指令,會得到以下輸出: