如何为内核集成 HyperSU
Notes
这个文档修改自 KernelSU 官方文档
HyperSU 可以被集成到 GKI / 非 GKI 内核中,现在它最低支持到内核 3.4 版本;理论上也可以支持更低的版本。
由于非 GKI 内核的碎片化极其严重,因此通常没有统一的方法来编译它。但你完全可以自己集成 HyperSU 然后编译内核使用。
首先,你必须有能力从你设备的内核源码编译出一个可以开机并且能正常使用的内核,如果内核不开源,这通常难以做到。
如果你已经做好了上述准备,可以通过这个教程来集成 HyperSU 到你的内核之中。
构建内核
WARNING
本部分仅适用于 GKI 设备
同步内核源码
repo init -u https://android.googlesource.com/kernel/manifest
mv <kernel_manifest.xml> .repo/manifests
repo init -m manifest.xml
repo sync<kernel_manifest.xml> 是一个可以唯一确定构建的清单文件,您可以使用该清单进行可重新预测的构建。 您应该从 通用内核映像 (GKI) 发布构建 下载清单文件
构建
请先查看 官方文档。
例如,我们需要构建 aarch64 内核镜像:
LTO=thin BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh不要忘记添加 LTO=thin, 否则,如果您的计算机内存小于 24GB,构建可能会失败.
从 Android 13 开始,内核由 bazel 构建:
tools/bazel build --config=fast //common:kernel_aarch64_dist使用 HyperSU 构建内核
把 HyperSU 添加到你的内核源码树,在内核的根目录执行以下命令。
GKI 设备:
curl -LSs "https://raw.githubusercontent.com/HyperSU-Team/HyperSU/main/kernel/setup.sh" | bash非 GKI 设备:
curl -LSs "https://raw.githubusercontent.com/HyperSU-Team/HyperSU/builtin/kernel/setup.sh" | bash脚本会自动检出对应分支并把 HyperSU 接入你的内核源码树,无需额外参数。
手动钩子
TIP
请注意,某些设备的 defconfig 文件可能在 arch/arm64/configs/设备代号_defconfig 或位于 arch/arm64/configs/vendor/设备代号_defconfig。在您的 defconfig 文件中,将 CONFIG_KSU 设置为 y 以启用 HyperSU,或设置为 n 以禁用。比如在某个 defconfig 中: arch/arm64/configs/...
+# HyperSU
+CONFIG_KSU=y
+CONFIG_KSU_MANUAL_HOOK=y然后,将 HyperSU 调用添加到内核源代码 中,改完之后重新编译内核即可。
SUSFS
WARNING
SUSFS 官方 已放弃 NonGKI 支持,如需在 NonGKI 使用 SUSFS,请自行从 gki-android12-5.10 移植
DANGER
HyperSU 的 SUSFS 部分的内核代码是跟随 SUSFS 仓库更新的,如遇到构建错误或开机卡一等问题,请自行检查 SUSFS 仓库的更新日志。
如确认 HyperSU 的 SUSFS 部分的内核代码没有更新,再向 HyperSU 报告此问题。
TIP
请注意,某些设备的 defconfig 文件可能在 arch/arm64/configs/设备代号_defconfig 或位于 arch/arm64/configs/vendor/设备代号_defconfig。在您的 defconfig 文件中,将 CONFIG_KSU 设置为 y 以启用 HyperSU,或设置为 n 以禁用。比如在某个 defconfig 中: arch/arm64/configs/...
+# HyperSU
+CONFIG_KSU=y
+CONFIG_KSU_SUSFS=y然后,在 SUSFS 仓库中根据你的内核版本选择分支并按照指导打内核侧补丁,改完之后重新编译内核即可。