本项目基于 ABK (AnyBase Kernel) 的完整构建流程,为小米14 (SM8650 / 骁龙8 Gen 3) 编译带有 Gunyah VMID 修复 的 GKI 内核。
骁龙8 Gen 3 (SM8650) 的 Gunyah 虚拟机管理程序存在 VMID 映射问题:
- SM8650 上 RM(Resource Manager)运行在独立 VM,VMID 大于
QCOM_SCM_MAX_MANAGED_VMID (0x3F) - 原始内核代码硬编码 HLOS VMID,导致 SCM 调用拒绝,虚拟机无法启动
- 表现为 DroidVM 等虚拟化应用报错:
No such device (os error 19)或Out of memory (os error 12)
注意:骁龙8 Elite (SM8750) 及以后的芯片已重构 Gunyah 代码,不存在此问题。
- Fork 本仓库
- 进入 Actions 选项卡,启用 GitHub Actions
- 选择 kernel-custom 工作流,点击 Run workflow
- 参数保持默认即可(
use_gunyah=true) - 等待构建完成(约1-2小时),下载 Artifacts 中的内核包
- 通过 TWRP 或 fastboot 刷入
| 参数 | 默认值 | 说明 |
|---|---|---|
android_version |
android14 | Android 版本 |
kernel_version |
6.1 | 内核版本 |
sub_level |
138 | 内核子版本号 |
os_patch_level |
2025-06 | 安全补丁级别 |
kernelsu_variant |
Official | KernelSU 变体 |
kernelsu_branch |
Stable(标准) | KernelSU 分支 |
use_gunyah |
true | 启用 Gunyah VMID 修复 |
use_ntsync |
false | 启用 NTsync 补丁 |
cancel_susfs |
true | 禁用 SUSFS |
virtualization_support |
678 | DroidSpaces 虚拟化槽位 |
在内核编译时修改 gunyah_qcom.c 中的 VMID 处理逻辑:
- 通过
qcom_scm_map_vmid()查询真实 VMID 映射 - 当 VMID 超过
QCOM_SCM_MAX_MANAGED_VMID (0x3F)时,使用正确的 SCM 调用路径 - 使用
DEFINE_MUTEX保护 VMID 查询的并发安全
集成 KernelSU,提供内核级 root 支持。
通过 virtualization_support 参数启用 DroidSpaces 补丁,增强虚拟化能力。
除了内核内置的 VMID 修复外,还需要 kvcalloc 模块 来突破单 VM 2GB 内存限制。
该模块通过 kprobe 劫持 Gunyah 驱动的内存分配函数,将 kcalloc 替换为 kvcalloc,解决大内存 VM 创建时的 OOM 问题。
下载地址:modules/gunyah_kvcalloc_fix.zip
安装方法:通过 KernelSU/Magisk Manager 刷入 ZIP,重启即可。详见 modules/README.md。
注意:该模块由 秋秋(QQ: 3487467850)编译,仅适用于
6.1.138内核版本。
- 需要同时刷入 kvcalloc 模块 才能突破单 VM 2GB 内存限制
- 模块需要与内核版本匹配,内核更新后需要重新编译模块
.github/
workflows/
build.yml # 核心构建流程(基于 ABK,含 Gunyah VMID 修复)
kernel-custom.yml # 自定义构建触发器
get-manager.yml # KernelSU Manager 下载
scripts/
resolve-ksu-ref.sh # KernelSU 分支解析
download-manager-from-actions.sh # Manager APK 下载
config/
config # stock defconfig
zram.config # zram 配置
modules/
gunyah_kvcalloc_fix.zip # kvcalloc 修复模块(KernelSU/Magisk ZIP)
gunyah_kvcalloc_mod.ko # kvcalloc 修复模块(独立 .ko 文件)
README.md # 模块说明
本项目基于 GPL-2.0 许可证开源。