面向 miro 设备的 Android ARM64 内核项目,基于 Android Common Kernel
android15-6.6,用于维护设备侧内核配置、驱动和构建流程。
本项目主要围绕以下方向持续开发:
- 增加并完善 DroidSpaces 支持,为容器化 Android/Linux 用户空间提供所需的 IPC、namespace、网络过滤、用户命名空间和 TMPFS 能力。
- 集成 SUSFS 支持,改善系统文件系统隐藏、隔离和兼容性能力。
- 集成 ReSukiSU/KernelSU 支持,为内核级 root 管理和模块扩展提供基础。
- 集成内核级基带保护(Baseband-guard),阻止对基带等受保护分区的非法写入。
- 集成 ADIOS I/O 调度器,为同步请求提供学习型自适应低延迟,同时保持异步吞吐。
- 提供完整 TMPFS 支持,并按上游跟进 lz4/zstd 等内核库版本。
- 持续进行内核配置、驱动、稳定性、性能和功耗优化。
- 在保证设备可启动性、GKI/KMI 兼容性和现有硬件功能的前提下,逐步完善设备支持。
| 功能 | 状态 |
|---|---|
miro ARM64 内核构建 |
已支持 |
独立编译脚本 build.sh |
已支持(LLVM 工具链 + AnyKernel3 打包 + 错误捕获) |
一条龙编译命令 quick |
已支持(更新子模块 + menuconfig + 编译 + 打包) |
GKI perf / consolidate 构建变体 |
已支持 |
| DroidSpaces 配置片段 | 已接入构建配置 |
| SUSFS | 已接入 |
| BakaSU(原 ReSukiSU)/KernelSU | 已接入(子模块;仍固定 v4.2.0-rc3,未完成升级) |
| Re:Kernel 11.7 | 源码内置 CONFIG_REKERNEL=y;CFI 对象编译已检查,用户态/设备待验证 |
| NTsync | Linux v6.14 回移植,CONFIG_NTSYNC=y;Wine/Android 设备访问待验证 |
| MGLRU | 已有实现,CONFIG_LRU_GEN=y / CONFIG_LRU_GEN_ENABLED=y,STATS 关闭 |
| LZ4KD | 授权依据不足,尚未加入;不替代 LZ4 或 lzo-rle 默认值 |
| Telegram 构建通知 | 原生富消息、两列表与无附件回退已实现;仅离线测试,未线上验证 |
| Baseband-guard 基带保护 | 已接入(LSM 模块) |
| ADIOS I/O 调度器 | 已接入 |
| TMPFS 完整支持 | 已接入(inode64 + quota) |
| lz4 / zstd 内核库 | 已升级(zstd 1.5.7,lz4 from v6.18) |
| KPatch-Next KPM 运行时 | 实验支持(静态修补 Image,双版本构建) |
| AnyKernel3 刷机包打包 | 已支持(子模块) |
| 稳定性、性能和功耗优化 | 持续进行 |
当前 DroidSpaces 配置位于
arch/arm64/configs/droidspaces.fragment,
并通过 build.config.msm.perf 使用项目现有的
apply_defconfig_fragment 流程合并到 perf 和 consolidate 变体。
SUSFS 已集成到内核树中。SUSFS(Super User File System)提供内核级 root
隐藏和进程隔离能力,包括可疑路径隐藏、挂载隐藏、kstat 伪造、uname 伪造、
cmdline/bootconfig 伪造、open redirect 和内存映射隐藏等功能。SUSFS 补丁
源自 susfs4ksu 的
gki-android15-6.6 分支,ReSukiSU 内置 SUSFS 支持作为 inline hook 方式。
ReSukiSU 已更名为 BakaSU,上游为
Baka-SU/BakaSU。本地子模块目录 KernelSU/
和 drivers/kernelsu -> ../KernelSU/kernel 保留以兼容现有构建;历史 ReSukiSU
名称不作全局替换。gki_defconfig 已启用
CONFIG_KSU 和 CONFIG_KSU_SUSFS。
以下“接入/编译”不表示已完成整机启动、全链路 CI 或性能验证。
- BakaSU 更新 pending:本地 HEAD 仍为
239e1e8871b8fcd51a6e5b3002e0ba522fdd99fb(v4.2.0-rc3)。此前检查的最新 main 快照d7260ca1e5c128061122924d0d48754e361e135c在susfs_compat.mk主动报错Please wait susfs update.;兼容候选5b76b884c75f729a220bb317aa4a4fc78f0e0e9c的 checkout 被权限阻断,因此未升级。复核时本地origin/main已指向6200478dd76fc63093a8226d360f5072c46aea26,不能再把 d7260ca 当作实时最新; 新 main 的兼容性仍待检查,不能据此宣称更新完成。 - SUSFS v2.3.0:Android15-6.6 来源固定
bd7d199ac87808001127e8a6d076832e2938cf0d。fs/susfs.c与头文件susfs.h、susfs_def.h已匹配;fs/exec.c清理重复/过时声明,保留 Xiaomi/BakaSU 集成 hook。 仍待完整构建、设备启动与 GKI/KMI 验证。 - Re:Kernel 11.7:固定
Sakion-Team/Re-Kernel e67cd94c524c27503cb340f8bbab594eca95dbef, 源码内置于drivers/android/,配置为CONFIG_REKERNEL=y。已有 CFI 对象编译检查通过;协议定义/Generic Netlink需要匹配用户态,监控操作与事件订阅需要管理特权。未提供 legacy raw Netlink/proc 接口;async Binder cleanup 禁用。用户态联调、SELinux 和设备效果待验证。 - NTsync:
drivers/misc/ntsync.c与UAPI回移植自 Linux v6.1438fec10eb60d687e30c8c6b5420d86e8149f7557, 加入 namespace / owner 修复180a232ea78003d1dc869b217b4e49106fd58e8f、61611481f7b599e0526a3782c626b1a9deeb48bd。CONFIG_NTSYNC=y内嵌、已有对象编译记录;用于 Wine 的 NT 同步,不是通用手机性能优化。/dev/ntsync的 Android SELinux/访问权限及匹配 Wine 用户态尚未在设备验证。 - MGLRU:
mm/vmscan.c已有实现,不重复移植;CONFIG_LRU_GEN=y、CONFIG_LRU_GEN_ENABLED=y,CONFIG_LRU_GEN_STATS关闭。 内存压力下可能改善回收、减少抖动,但有 CPU 开销与mmap_lock争用风险, 性能和功耗未实测;保持默认min_ttl_ms=0,不凭经验随意调节。 - LZ4KD pending:授权依据不足,尚未加入;保持现有
LZ4与zram lzo-rle 默认,不声称替换或提速。 - Telegram 通知:
telegram-notify.py已实现一次sendRichMessage,仅上传 release 普通版与 KPatch 实验版两个安装 ZIP,debug 不下载、不上传, 仅提供 GitHub artifact 下载链接;symbols、log、SHA 产物也仅给链接。 顺序为普通版/KPatch 附件、Kernel/Source/Branch/Toolchain/LTO 原生两列表、功能原生两列表、 BakaSU 固定源码 SHA/SUSFS 版本链接、Branch/CI 编号、commit 原生 pre 块、Compare/Workflow/下载链接。 Makefile、配置片段、SUSFS 与子模块 SHA 均从被通知 commit 的 GitHub 内容 API 获取, 不使用通知工作流 checkout 的配置;状态仅表示源码配置,非最终.config或启动验证。 工具链实际版本未知时明确提示查看日志;BakaSU 使用固定 SHA 而非猜测版本号。 富消息 JSON 安全预算为 32 KiB;上传合计超过 49 MiB 或遇到 HTTP 413 时, 回退为一条无附件、带下载链接的原生富消息,不拆分刷屏。 0/1 个附件及构建失败/取消也统一使用富消息,不再使用 HTML caption 或媒体组。离线测试与CI 静态/离线检查不等于线上测试,真实发送尚未验证。
配置证据来自已有 /tmp/miro-rekernel-check/.config:Re:Kernel、NTsync、MGLRU
及 CONFIG_CFI_CLANG 为 y,STATS 关闭;对象与命令记录存在且使用 -fsanitize=kcfi。
本轮只复核已有记录,不重复编译,也不以旧 out/ 推断新增功能或完整镜像已通过。
设备侧 vendor 模块(Qualcomm Sun 平台 + 小米 miro 定制模块)以小米官方开源的
MiCode/Xiaomi_Kernel_OpenSource
bsp-miro-v-oss 分支为基线,其基础 tag 为
qcom-LA.VENDOR.14.3.0.r1-14500-r1.0.r1_00042.0。官方 vendor 配置片段
sun_perf.config 已纳入本项目,
小米定制的 in-tree 模块(mi-t1-chip、sc96281_comp、ir-spi、
leds-aw21024、powersave、unionpower、mtd 系列等)在
miro_perf.config 中以 =m
模块形式启用。
- 设备目标:
miro - Qualcomm 平台:
sun - 架构:ARM64
- Linux 基础版本:
6.6.30 - Android 内核分支:
android15-6.6 - 构建系统:
build.sh独立编译(LLVM 工具链),兼容 Kleaf/Bazel 和build.config流程
本仓库支持两种构建方式:
- 独立编译(推荐):使用项目自带的
build.sh脚本,仅需系统安装的 LLVM 工具链,无需完整 Android 源码树。 - Kleaf/Bazel 构建:在完整的 Android Kernel 工作空间中使用,适合需要 GKI/KMI 合规性检查的场景。
推荐使用 SSH 协议克隆代码库,不建议使用 HTTPS 协议。SSH 协议的优势:
- 无需重复输入密码:配置 SSH 密钥后自动认证,无需每次输入用户名和密码
- 更高的安全性:SSH 使用非对称加密进行身份验证,比 HTTPS 的密码认证更安全
- 更好的稳定性:不受 GitHub HTTPS 限流影响,大仓库克隆更稳定
git clone --recursive git@github.com:ZHYxulei/miro-kernel-ultra.git如果尚未配置 SSH 密钥,请参考 GitHub SSH 密钥配置指南。 在没有 SSH 密钥的环境下,也可使用 HTTPS 作为备选:
git clone --recursive https://github.com/ZHYxulei/miro-kernel-ultra.git
--recursive 会在克隆时自动初始化并拉取 KernelSU、AnyKernel3 和 KPatch-Next 子模块。
如果已经克隆但未带 --recursive,需要手动初始化子模块:
cd miro-kernel-ultra
git submodule update --init --recursive验证子模块状态:
git submodule status
# 预期输出:
# 239e1e8871b8fcd51a6e5b3002e0ba522fdd99fb KernelSU (v4.2.0-rc3)
# d80bb86cc905e7c7f14d87b16b1859b9d750277c AnyKernel3 (heads/master)
# c547574cb2e931b022c0ae40a6848d64d27aa57a KPatch-Next (0.13.13)确认驱动符号链接已就绪:
ls -l drivers/kernelsu
# 预期输出:drivers/kernelsu -> ../KernelSU/kernel拉取代码后,为构建脚本添加可执行权限:
chmod +x build.sh之后可以直接使用 ./build.sh <command> 执行脚本,无需每次输入 bash。
项目包含 KernelSU 和 AnyKernel3 两个 git 子模块。使用以下命令将子模块更新至上游最新版本:
./build.sh update-submodules该命令会:
- 拉取所有子模块的上游最新代码
- 将子模块指针切换到上游
origin/HEAD - 暂存更新后的子模块指针(
git add) - 显示更新后的子模块状态
更新后需要手动提交以保存变更:
git commit -m "update submodules to latest upstream"使用 quick 命令实现全自动编译流程,一条命令完成从更新到打包的全部步骤:
./build.sh quick该命令依次执行以下步骤:
- 更新子模块:拉取
KernelSU和AnyKernel3的最新上游代码 - 检查依赖:验证编译工具链是否完整
- 生成默认配置:合并所有 defconfig 片段,生成
.config文件 - 弹出 menuconfig:打开交互式配置界面,允许用户自定义内核配置
- 如需自定义:修改配置后保存并退出
- 如使用默认值:直接退出即可(不修改 = 使用默认配置)
- 编译内核:编译 Image + modules + dtbs(含错误捕获)
- 安装模块:将内核模块安装到
out/modules_install/ - 复制产物:将构建产物复制到
out/dist/ - 打包刷机包:生成 AnyKernel3 刷机 zip
生成的刷机包位于:
out/dist/miro-kernel-ultra-YYYYMMDD-HHMM.zip
一键安装(推荐):使用脚本内置命令自动检测包管理器并安装所有依赖:
./build.sh install-deps该命令支持 apt(Debian/Ubuntu)、dnf(Fedora/RHEL)、pacman(Arch Linux)和 zypper(openSUSE)。
手动安装:也可以手动执行以下命令安装依赖:
# Debian/Ubuntu
apt install clang lld llvm flex bison bc cpio device-tree-compiler \
libelf-dev libssl-dev libncurses-dev zip git ccache
# Fedora/RHEL
dnf install clang lld llvm flex bison bc cpio dtc \
elfutils-libelf-devel openssl-devel ncurses-devel zip git ccache
# Arch Linux
pacman -S clang lld llvm flex bison bc cpio dtc \
libelf openssl ncurses zip git ccache完整依赖列表:
| 依赖 | 说明 |
|---|---|
clang lld llvm |
LLVM 编译工具链(clang >= 15) |
flex bison |
词法/语法分析器生成工具 |
bc |
数学计算工具(内核 Makefile 使用) |
cpio |
initramfs 打包工具 |
dtc (device-tree-compiler) |
设备树编译器 |
libelf-dev (libelf-devel) |
ELF 文件处理库 |
libssl-dev (openssl-devel) |
OpenSSL 开发库 |
libncurses-dev (ncurses-devel) |
menuconfig 界面依赖 |
zip |
AnyKernel3 刷机包打包 |
git |
子模块管理 |
ccache(可选) |
编译缓存,加速重复编译 |
./build.sh help # 查看帮助
./build.sh install-deps # 一键安装编译依赖
./build.sh quick # 一条龙:更新子模块 + menuconfig + 编译 + 打包
./build.sh defconfig # 仅生成 .config
./build.sh menuconfig # 打开 menuconfig 界面编辑 .config
./build.sh kernel # 编译内核(Image + modules + dtbs)
./build.sh fast # 快速编译(仅 Image + dtbs,不含 modules)
./build.sh all # 编译 + 安装模块 + 输出到 out/dist
./build.sh zip # 编译 + 打包 AnyKernel3 刷机包
./build.sh package # 从已有 out/dist 重新打包 AnyKernel3
./build.sh modules # 安装内核模块(在 kernel 之后执行)
./build.sh toolchain # 显示当前工具链配置
./build.sh clean # 清理构建产物(保留 .config)
./build.sh deepclean # 深度清理(out/ + AnyKernel3 产物 + 子模块产物)
./build.sh mrproper # 完全清理(make mrproper + deepclean)
./build.sh update-submodules # 更新 KernelSU 和 AnyKernel3 到最新上游./build.sh zip该命令会依次执行:
- 检查编译依赖
- 初始化 KernelSU 子模块
- 合并 defconfig 片段(
gki_defconfig+sun_perf+miro_perf+droidspaces) - 应用后置配置(启用
PINCTRL_MSM等) - 编译内核(Image + modules + dtbs)
- 安装内核模块
- 复制构建产物到
out/dist/ - 使用 AnyKernel3 子模块,注入内核产物并生成刷机 zip
生成的刷机包位于:
out/dist/miro-kernel-ultra-YYYYMMDD-HHMM.zip
| 文件 | 说明 |
|---|---|
out/dist/Image |
内核镜像 |
out/dist/dtb |
设备树 blob |
out/dist/dtbo.img |
DTBO 镜像 |
out/dist/modules/ |
内核模块 |
out/dist/vmlinux |
未压缩内核(调试用) |
out/dist/System.map |
符号表 |
out/dist/.config |
最终内核配置 |
out/build.log |
编译日志(含错误捕获) |
build.sh 使用 LLVM 工具链(clang + ld.lld)进行交叉编译,合并以下
defconfig 片段:
arch/arm64/configs/gki_defconfig— GKI 基础配置arch/arm64/configs/vendor/sun_perf.config— Qualcomm Sun 平台配置arch/arm64/configs/vendor/miro_perf.config— 小米 miro 设备配置arch/arm64/configs/droidspaces.fragment— DroidSpaces 配置
合并后通过 olddefconfig 自动解析新增的 Kconfig 选项,避免交互式提示。
如需手动修改内核配置,可使用 menuconfig 命令打开交互式配置界面:
./build.sh menuconfig在 menuconfig 中修改配置后保存退出即可。若 .config 不存在,脚本会先自动生成默认配置。
build.sh 内置了编译错误捕获和显示功能,无需在大量输出中手动查找错误:
- 实时日志记录:编译输出同时显示在终端并保存到
out/build.log - 自动错误提取:编译失败时,脚本自动从日志中提取错误信息
- 醒目错误展示:以红色高亮显示错误汇总,包含:
- 错误编号和日志行号
- 错误前后各 2 行上下文代码
- 最多显示前 10 个错误(避免输出过长)
- 完整日志路径:提示完整日志文件位置,方便深入排查
支持的错误模式包括:error:、fatal error:、Error N、undefined reference、No rule to make target、recipe for target failed 等。
编译失败时的输出示例:
[build.sh] Building kernel (Image + modules + dtbs)...
... (编译输出) ...
═══════════════════════════════════════════════════════════════════
编译错误汇总
═══════════════════════════════════════════════════════════════════
━━━ 错误 #1 (日志行 1234) ━━━
drivers/usb/dwc3/dwc3-msm-core.c: In function 'dwc3_msm_probe':
drivers/usb/dwc3/dwc3-msm-core.c:567:9: error: implicit declaration of function 'mca_sysfs_init'
567 | mca_sysfs_init(pdev);
| ^~~~~~~~~~~~~
完整编译日志: out/build.log
build.sh 支持以下环境变量进行自定义配置:
| 环境变量 | 默认值 | 说明 |
|---|---|---|
CLANG_PATH |
系统 PATH | 自定义 clang 工具链目录(如 /opt/clang/bin) |
GCC_PATH |
系统 PATH | 自定义 GCC 交叉编译器目录(aarch64-linux-gnu-gcc) |
JOBS |
nproc --all |
编译并行任务数 |
KERNEL_NAME |
miro-kernel-ultra |
AnyKernel3 安装包中显示的内核名称 |
OUT_DIR |
out |
构建输出目录 |
USE_CCACHE |
自动检测 | 设为 1 启用 ccache,0 禁用 |
CCACHE_DIR |
~/.ccache |
ccache 缓存目录 |
FAST_BUILD |
未设置 | 设为 1 跳过模块编译,仅编译 Image + dtbs |
LOCALVERSION |
未设置 | 追加到内核版本串末尾的后缀(如 -debug),用于区分同一份 .config 编译出的不同内核 |
KPATCH_TARGET_COMPILE |
自动下载 | KPatch-Next kpimg 使用的 ARM64 bare-metal 工具链前缀(默认自动下载 Arm GNU 12.2 aarch64-none-elf-) |
使用示例:
# 使用自定义工具链编译
CLANG_PATH=/opt/clang/bin GCC_PATH=/opt/gcc/bin ./build.sh zip
# 限制并行任务数
JOBS=4 ./build.sh all
# 禁用 ccache
USE_CCACHE=0 ./build.sh all
# 快速编译(不含模块)
FAST_BUILD=1 ./build.sh zip
# 将输出目录放在 tmpfs 加速编译
OUT_DIR=/tmp/kernel-build ./build.sh zipKPatch-Next 不作为普通 Kconfig 驱动编入内核,而是在内核编译完成后使用 kptools 将 kpimg 静态嵌入 ARM64 Image。ReSukiSU 和 SUSFS 仍负责 root 与隐藏功能,KPatch-Next 仅提供 KPM 和动态内核补丁运行时。
# 编译一次内核,同时生成标准版与 KPatch 实验版刷机包
./build.sh zip-dual
# 对已经存在的 out/arch/arm64/boot/Image 执行 KPatch 修补
./build.sh kpatch
# 使用自定义 ARM64 bare-metal 工具链前缀构建 kpimg
KPATCH_TARGET_COMPILE=/opt/gcc/bin/aarch64-none-elf- ./build.sh zip-dual输出包括:
miro-kernel-ultra-*.zip:标准 ReSukiSU + SUSFS 版本。miro-kernel-ultra-kpatch-exp-*.zip:额外嵌入 KPatch-Next KPM 运行时的实验版本。out/dist/Image-kpatch-next-exp:经过 KPatch-Next 静态修补的内核 Image。
KPatch 实验版静态校验成功不代表设备一定可以启动。KPM 对核心函数的 Hook 可能与 ReSukiSU/SUSFS 冲突。首次刷入前必须备份可恢复的 boot 镜像,并确保能够通过 fastboot 回刷标准版。
build.sh 支持通过环境变量自定义 AnyKernel3 刷机包的配置项(对应 anykernel.sh 中的参数):
| 环境变量 | 默认值 | 对应参数 | 说明 |
|---|---|---|---|
AK3_DEVICE_CHECK |
1 |
do.devicecheck= |
设为 1 开启设备名称检测,0 关闭 |
AK3_DEVICE_NAME1 |
24122RKC7C |
device.name1= |
设备名称 1(型号) |
AK3_DEVICE_NAME2 |
miro |
device.name2= |
设备名称 2(内核代号) |
AK3_DEVICE_NAME3 |
Redmi K80 Pro |
device.name3= |
设备名称 3(设备名) |
AK3_DEVICE_NAME4 |
空 | device.name4= |
设备名称 4 |
AK3_DEVICE_NAME5 |
空 | device.name5= |
设备名称 5 |
AK3_BLOCK |
boot |
BLOCK= |
刷写的分区(如 boot、init_boot、auto) |
AK3_SLOT_DEVICE |
1 |
IS_SLOT_DEVICE= |
A/B 插槽设备:1 开启、0 关闭、auto 自动判断 |
AK3_PATCH_VBMETA |
auto |
PATCH_VBMETA_FLAG= |
修补 vbmeta 关闭 AVB 验证:1 开启、0 关闭、auto 自动判断 |
使用示例:
# 开启设备检测并设置设备名称
AK3_DEVICE_CHECK=1 AK3_DEVICE_NAME1=24122RKC7C AK3_DEVICE_NAME2=miro ./build.sh zip
# 刷写到 init_boot 分区(GKI 设备常用)
AK3_BLOCK=init_boot ./build.sh zip
# 关闭 A/B 插槽检测
AK3_SLOT_DEVICE=0 ./build.sh zip
# 强制修补 vbmeta 关闭 AVB 验证
AK3_PATCH_VBMETA=1 ./build.sh zip
# 自定义内核名称
KERNEL_NAME="my-custom-kernel" ./build.sh zip-
安装 ccache(推荐):首次编译后,后续编译速度提升 3-5 倍
apt install ccache && ccache -M 50G -
使用
fast命令:跳过模块编译,减少约 40% 编译时间./build.sh fast
-
将输出放在 tmpfs(内存盘)上:
mkdir -p /tmp/build && OUT_DIR=/tmp/build ./build.sh all -
调整并行任务数:
JOBS=$(nproc) ./build.sh all
Q: 编译报错 "The source tree is not clean"
A: 脚本会自动清理源码树中的 .config 等残留文件。如果仍然报错,执行 ./build.sh deepclean 后重试。
Q: 编译报错 "Missing tools: ..."
A: 安装缺失的依赖:apt install clang lld llvm flex bison bc cpio device-tree-compiler libelf-dev libssl-dev libncurses-dev zlib1g-dev zip。KPatch-Next 的 ARM64 bare-metal 工具链会在首次构建时自动下载。
Q: 编译报错找不到 drivers/kernelsu 符号链接
A: 未初始化子模块。执行 git submodule update --init --recursive 或 ./build.sh update-submodules。
Q: menuconfig 界面无法正常显示
A: 确保安装了 libncurses-dev,且终端窗口足够大(至少 19 行 x 80 列)。
Q: 编译速度太慢
A: 参考上方的「加速编译技巧」部分,推荐安装 ccache。
Q: 如何只修改配置不重新编译?
A: 使用 ./build.sh menuconfig 修改配置,然后使用 ./build.sh kernel 仅编译内核。
Q: mrproper 会删除 AnyKernel3 子模块吗?
A: 不会。mrproper 只清理 AnyKernel3 目录中的构建产物(Image、dtb、modules),保留子模块本身。deepclean 同理。
在 Android Kernel 工作区根目录执行:
tools/bazel run //msm-kernel:miro_perf_dist
tools/bazel run //msm-kernel:miro_consolidate_dist构建产物通常位于:
out/msm-kernel-miro-perf/dist/
out/msm-kernel-miro-consolidate/dist/
传统配置入口为:
build.config.msm.miro
该入口继承 build.config.msm.sun,默认使用 consolidate 变体,同时支持
perf 变体。具体构建参数以当前 Android Kernel 工作区为准。
DroidSpaces 配置片段当前启用以下能力:
- SysV IPC 和 POSIX message queues
- IPC namespace、PID namespace 和 user namespace
devtmpfs- Enhanced NAT 所需的 Netfilter 匹配项
- UFW 所需的 Netfilter target 和 match
- Fail2ban 所需的 IP set
- TMPFS POSIX ACL 和 extended attributes
配置会在构建阶段与 GKI 和设备配置片段合并,随后由 Kconfig 生成最终内核
配置。若某个构建变体没有经过 build.config.msm.perf,则不会自动加载该
片段。
BakaSU 通过 git 子模块方式接入,沿用兼容目录与历史配置名称:
- 子模块:
KernelSU/,现上游为Baka-SU/BakaSU;本地旧 remote URL 保留,未在本轮修改 - 驱动链接:
drivers/kernelsu -> ../KernelSU/kernel(符号链接) - Kconfig 入口:
drivers/Kconfig中source "drivers/kernelsu/Kconfig" - 构建入口:
drivers/Makefile中obj-$(CONFIG_KSU) += kernelsu/ - 内核配置(在
gki_defconfig中启用):CONFIG_KPROBE_EVENTS— kprobe 事件支持CONFIG_KSU— KernelSU 核心CONFIG_KSU_SUSFS— SUSFS inline hook 模式(ReSukiSU 三选一 hook 方式之一)
CONFIG_KSU_SUSFS 与 CONFIG_KSU_MANUAL_HOOK 互斥(Kconfig choice),
当前选择 SUSFS inline hook 模式,由 susfs4ksu 补丁提供内核侧 hook 点。
克隆仓库后必须执行 git submodule update --init --recursive 以拉取子模块,
否则 drivers/kernelsu 符号链接将无法解析,构建会失败。
SUSFS(Super User File System)是 KernelSU 的 root 隐藏内核补丁,提供以下能力:
| 功能 | Kconfig 选项 | 说明 |
|---|---|---|
| 路径隐藏 | CONFIG_KSU_SUSFS_SUS_PATH |
隐藏用户定义路径及其子路径 |
| 挂载隐藏 | CONFIG_KSU_SUSFS_SUS_MOUNT |
隐藏可疑挂载,伪造 mnt_id |
| kstat 伪造 | CONFIG_KSU_SUSFS_SUS_KSTAT |
伪造文件/目录的 kstat |
| uname 伪造 | CONFIG_KSU_SUSFS_SPOOF_UNAME |
伪造 uname 返回值 |
| 日志控制 | CONFIG_KSU_SUSFS_ENABLE_LOG |
内核 SUSFS 日志开关 |
| 符号隐藏 | CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS |
从 /proc/kallsyms 隐藏符号 |
| cmdline 伪造 | CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG |
伪造 /proc/bootconfig 或 /proc/cmdline |
| 路径重定向 | CONFIG_KSU_SUSFS_OPEN_REDIRECT |
将目标路径重定向到另一路径 |
| 内存映射隐藏 | CONFIG_KSU_SUSFS_SUS_MAP |
从 proc maps 隐藏 mmapped 文件 |
SUSFS 补丁源自 susfs4ksu 的
gki-android15-6.6 分支,按照其 README 指引集成:
- 新增文件:
fs/susfs.c、include/linux/susfs.h、include/linux/susfs_def.h - 内核补丁:
50_add_susfs_in_gki-android15-6.6.patch修改 24 个内核文件, 在 syscall 路径插入 SUSFS hook(fs/exec.c、fs/namei.c、fs/namespace.c、 security/selinux/ 等) - 手动适配:4 处 hunk 因 Xiaomi 内核 include 顺序差异手动修复 (fs/namespace.c、fs/proc/base.c、fs/proc/task_mmu.c、mm/memory.c)
- ABI 文件:已删除
android/abi_gki_protected_exports_aarch64(susfs4ksu README step 11 要求,否则 WiFi 等模块可能不工作) - KernelSU 侧补丁:跳过
10_enable_susfs_for_ksu.patch(ReSukiSU 已内置 SUSFS 支持,该补丁仅适用于原版 weishu KernelSU)
所有 SUSFS 子功能在 ReSukiSU 的 Kconfig 中默认为 y,由 CONFIG_KSU_SUSFS=y
统一激活。构建时 ReSukiSU 的 inline_hook_check.mk 会自动验证内核 hook 点
是否存在,缺失则编译报错。
Baseband-guard 是一个 LSM(Linux Security Module)模块,用于阻止对基带等 受保护分区的非法写入,防护通过漏洞工具链改写基带分区(例如刷入非官方 modem/efs 镜像)的行为。
- 源码位置:
security/baseband-guard/ - Kconfig 入口:
security/Kconfig中source "security/baseband-guard/Kconfig" - 构建入口:
security/Makefile中obj-$(CONFIG_BBG) += baseband-guard/ - 内核配置(在
miro_perf.config中启用):CONFIG_BBG=y— 启用 Baseband-guard 模块CONFIG_LSM="...,baseband_guard"— 将模块加入 LSM 启用列表
模块通过 file_permission、file_ioctl、inode_setattr、
bprm_creds_for_exec 等 LSM 钩子拦截对受保护块设备的写入。构建时会检查
CONFIG_LSM 是否包含 baseband_guard,缺失则给出告警。
ADIOS(Adaptive Deadline I/O Scheduler)是基于 mq-deadline 与 Kyber 的
多队列 I/O 调度器,通过学习型自适应延迟控制,在维持异步请求吞吐的同时
降低同步请求延迟,适合手机等交互式负载。
- 源码位置:
block/adios.c - Kconfig:
block/Kconfig.iosched中的CONFIG_MQ_IOSCHED_ADIOS - 构建入口:
block/Makefile中obj-$(CONFIG_MQ_IOSCHED_ADIOS) += adios.o - 内核配置:
CONFIG_MQ_IOSCHED_ADIOS=y - 调度器名称:
adios
启用后可在运行时切换:
echo adios > /sys/block/sda/queue/scheduler在 DroidSpaces 提供的 TMPFS 能力之上,进一步启用完整的 TMPFS 功能:
| 功能 | Kconfig 选项 | 说明 |
|---|---|---|
| 64 位 inode 编号 | CONFIG_TMPFS_INODE64 |
避免大容量 tmpfs 上的 inode 编号回绕 |
| 配额支持 | CONFIG_TMPFS_QUOTA |
支持 tmpfs 的用户/组配额 |
为保证与上游一致的安全修复和性能改进,lib/lz4、lib/zstd 及其头文件
已跟进较新内核版本:
- zstd:升级至
1.5.7(取自 v6.18 内核树),替换lib/zstd/与include/linux/zstd*.h,并新增lib/zstd/common/bits.h、lib/zstd/common/allocations.h、lib/zstd/compress/zstd_preSplit.c。 wrapper API 为纯增量,f2fs、crypto、erofs、squashfs、btrfs 等调用方 无需修改。 - lz4:更新至 v6.18 内核树版本(
lib/lz4/与include/linux/lz4.h)。 - 兼容头:新增
include/linux/unaligned.h, 为 arm64 提供通用非对齐访问包装(6.6 内核尚未提供该头文件)。
后续工作将按以下方向推进:
- 验证 SUSFS 内核编译和设备启动兼容性,确认 GKI/KMI 影响。
- 为新增功能补充独立配置片段和构建入口,避免影响默认 GKI 配置。
- 完善启动、模块、网络、容器和文件系统场景的验证。
- 持续优化性能、功耗、稳定性和构建可复现性。
本项目处于持续开发阶段。新增内核功能可能影响 ABI/KMI、模块加载、系统启动 和安全模型。合并任何功能前,应至少验证对应构建变体的配置生成、内核编译、 模块打包和设备启动情况,并保留清晰的变更记录。
提交修改前请确认:
- 变更范围与项目目标相关;
- 配置片段使用现有构建系统的合并流程;
- 不提交密钥、设备个人数据或构建产物;
- 对配置、驱动和构建脚本修改进行对应验证;
- 提交信息清楚说明变更内容和验证结果。
本项目面向研究、开发和设备适配用途。刷写或使用自定义内核可能导致设备 无法启动、数据丢失、功能异常或安全边界变化。请在充分备份并了解风险后使用。
本项目基于以下开源项目,感谢它们的贡献:
- BakaSU(原 ReSukiSU) — 内核级 root 管理和模块扩展框架
- Re:Kernel — 内核事件通知(本地适配 11.7)
- Linux NTsync — Wine NT 同步驱动来源
- SUSFS (susfs4ksu) — 内核级 root 隐藏和文件系统隔离补丁
- Baseband-guard — 内核级基带等受保护分区写保护的 LSM 模块
- CachyOS kernel-patches — ADIOS I/O 调度器(作者 Masahito Suzuki)
- DroidSpaces — Android/Linux 容器化用户空间支持
- KPatch-Next-EXP — ARM64 内核静态修补、KPM 和动态内核补丁运行时
- AnyKernel3 — Android 内核刷机包打包工具
- Linux Kernel — Android Common Kernel
android15-6.6
如需其他功能或有任何问题,请 提交 Issue。
本项目基于 Linux 内核,遵循 GPL-2.0 WITH Linux-syscall-note
开源许可证。项目中集成的第三方组件各自保持其原始许可证:
- Linux 内核:GPL-2.0 WITH Linux-syscall-note
- BakaSU(原 ReSukiSU)/KernelSU:GPL-2.0(兼容子模块目录
KernelSU/) - SUSFS (susfs4ksu):GPL-2.0(内核补丁部分)
- KPatch-Next-EXP:GPL-2.0(子模块
KPatch-Next/)
使用、修改和分发本项目代码须遵守上述许可证条款。