使用 mdev mdpy 测试 VFIO 显示
内核提供中介设备示例驱动 mdpy(samples/vfio-mdev/mdpy.c), 通过 VFIO 显示区域接口暴露一个虚拟帧缓冲区。 无需真实 GPU,即可测试包括热插拔在内的 VFIO 显示支持。
内核模块
mdpy 依赖 mdev 子系统。请启用、构建并加载模块。
最小配置如下:
CONFIG_SAMPLE_VFIO_MDEV_MDPY=m
CONFIG_SAMPLE_VFIO_MDEV_MDPY_FB=m # guest framebuffer driver
CONFIG_VFIO_MDEV 会自动选中。
验证驱动已成功注册:
ls /sys/devices/virtual/mdpy/mdpy/mdev_supported_types/
创建 mdev 实例
不同类型对应不同分辨率,例如 mdpy-vga 为 640x480, mdpy-xga 为 1024x768,mdpy-hd 为 1920x1080。
每个 mdev 实例由 UUID 标识:
uuid=$(uuidgen)
echo "$uuid" > /sys/devices/virtual/mdpy/mdpy/mdev_supported_types/mdpy-xga/create
之后可这样移除实例:
echo 1 > /sys/bus/mdev/devices/$uuid/remove
确保用户有访问 VFIO 组所需的权限,例如 chmod 666 /dev/vfio/16。
启动 QEMU
启动时连接
qemu-system-x86_64 -machine q35 -m 1G \
-device vfio-pci,sysfsdev=/sys/bus/mdev/devices/$uuid,display=on \
-display gtk,gl=on
通过 HMP 热插拔
启动 QEMU 时添加 PCIe 根端口,PCIe 热插拔需要它,并启用监控器:
qemu-system-x86_64 -machine q35 -m 1G \
-device pcie-root-port,id=rp0,slot=1 \
-display gtk,gl=on \
-monitor stdio
然后在 (qemu) 提示符执行:
device_add vfio-pci,sysfsdev=/sys/bus/mdev/devices/<uuid>,display=on,bus=rp0,id=mdpy0
热拔出时执行:
device_del mdpy0