06 RK3588 平台关联与使用场景详解

06 RK3588 平台关联与使用场景详解

1. virt/ 与 Rockchip 定制

virt/ 目录无 Rockchip 补丁。RK3588 KVM 行为由 ARM64 通用 KVM + SoC CPU 特性 / IOMMU(SMMU) / GIC 决定。

平台相关启动优化(Thunder Boot 等)在 drivers/soc/rockchip/不经过 virt/kvm

2. 硬件与配置前提

条件 说明
ARMv8 虚拟化扩展 EL2 可用;arch/arm64/Kconfig select HAVE_KVM
GICv3/GICv4 RK3588 典型 GIC-600 系列 → vGICv3/ITS 模型
SMMU 设备直通需 Stage-2 与 VFIO 协同
内核配置 CONFIG_VIRTUALIZATION=yCONFIG_KVM=y

检查:

1
2
grep -E 'Virtualization|KVM' /proc/config.gz   # 或 .config
ls -l /dev/kvm

许多 嵌入式 BSP 默认关闭 KVM 以减小内核与攻击面。

3. 典型使用场景

场景 说明
Android 容器 / Cuttlefish RK3588 开发板作 host,依赖 KVM + vGIC + virtio
** QEMU 虚拟机** 调试用 Linux/Windows guest
crosvm / Cloud Hypervisor Rust VMM,ioctl 同 /dev/kvm
pKVM(若启用) 隔离敏感 VM 免受 host 内核威胁(Android 安全方向)
纯嵌入式产品 通常 不用 KVM,virt 代码不链入

4. 性能与调优触点

组件 调优
halt_poll_nskvm_main.c 模块参数) idle 退出延迟 vs host CPU
coalesced mmio + ioeventfd virtio 吞吐
dirty ring 大内存 VM 迁移
IRQ bypass + VFIO 直通网卡中断延迟
arch_timer guest 时钟漂移

用户态工具:tools/kvm/kvm_stat(见 linuxDoc/tools)。

5. 与 RK3588 外设直通的现实限制

  • GPU/NPU/VPU 多为专有驱动,非标准 PCI VFIO 场景;虚拟化常用手动 virtio-GPU 或 API 转发,而非 virt/kvm/vfio.c 直通;
  • PCIe 网卡/USB 控制器 在具备 SMMU 时可考虑 VFIO;
  • IOMMU 组 划分不当会导致 VFIO 组不完整。

6. 调试路径

现象 建议
/dev/kvm 不存在 检查 CONFIG_KVM、模块是否加载 kvm
KVM_CREATE_VM 失败 dmesg kvm;CPU 是否支持 EL2
Guest 无中断 vgic 配置、DT 未参与 KVM,查 QEMU -machine virt,gic-version=3
直通失败 CONFIG_VFIOCONFIG_IRQ_BYPASS_MANAGER、SMMU 驱动
EL2 panic CONFIG_NVHE_EL2_DEBUG 打开更详细 hyp 报错

trace:trace/events/kvm + arch/arm64/kvm/trace_arm.h

7. 与文档、测试

  • 内核文档:Documentation/virt/kvm/arm/index.rst
  • 自测:tools/testing/selftests/kvm/(含 aarch64 QEMU 配置)
  • API:Documentation/virt/kvm/api.rst

8. 配置清单(host 开发向)

1
2
3
4
5
6
CONFIG_VIRTUALIZATION=y
CONFIG_KVM=y
CONFIG_IRQ_BYPASS_MANAGER=y
CONFIG_VFIO=y
# 视需求
# CONFIG_KVM_DIRTY_RING=y

模块方式:

1
2
3
modprobe kvm
# arm64 上 kvm 模块通常已链接 arch 代码
lsmod | grep kvm

9. 小结

RK3588 上 virt/ 提供与其它架构相同的 KVM 公共 ioctl 与 IRQ/VFIO 框架;平台差异体现在 是否启用 KVMSMMU/GIC用户态 VMM。深入实现请联合 05-ARM64边界 与 BSP defconfig

文章互动

阅读 --

留言

0 条留言

正在加载留言…