qemu-device 机器
概述
qemu-device 板卡是"暂停的 x86_64 主机 + 一个 QEMU edu 设备":设备进程以 -machine x-remote 运行,并通过 vfio-user 把 edu PCI 设备导出给主机。它用于验证 QEMU 设备适配器、设备与主机的启动顺序、socket 与 QMP 探测,以及 option ROM 处理;板卡不启动客户机。
拓扑
# resources/machines/qemu-device.yaml
version: 1
imports:
- vhosts/qemu.yaml
- vhosts/vhost-x86-tcg.yaml
- devices/pci/qemu-edu.yaml
machines:
- id: m0
vhost:
use: vhost-x86-tcg
runtime: {binary: build/qemu/qemu-system-x86_64}
devices:
- {use: qemu-edu}
机器数量:1(
m0);主机覆盖runtime.binary,改用子模块构建的 QEMU。设备使用默认标识符
qemu-edu-0,没有私有内存区域。vHost 以
-S -nodefaults暂停启动,且没有镜像或内核。
硬件资源
资源 |
值 |
来源 |
|---|---|---|
机器 |
1 台( |
|
vHost 配置 |
|
|
客户机 RAM |
64 MiB,1 vCPU |
同上 |
设备 |
1 × |
|
内存池 |
64 MiB(设备没有私有区域) |
主机 RAM |
可执行文件 |
主机与设备均为 |
两个模板 |
socket |
主机 QMP 与串口;设备 vfio-user socket 与 QMP |
会话布局 |
vHost |
无 |
— |
软件栈
层 |
组件 |
说明 |
|---|---|---|
客户机 OS |
无 |
主机暂停,不启动内核 |
设备模型 |
|
|
设备导出 |
|
把 |
构建依赖 |
带 vfio-user 支持的 QEMU |
由 |
就绪探测 |
可选 |
顺序见适配器契约 |
运行该机器
# 先构建带 vfio-user 支持的 QEMU
just build-qemu
# 校验与预览
just run-cli validate resources/machines/qemu-device.yaml --assets
just run-topology resources/machines/qemu-device.yaml --dry-run
# 冒烟运行,2 秒后结束
just run-topology-dev resources/machines/qemu-device.yaml --run-for 2
设备进程先启动并进入监听;主机在设备就绪后才启动。
关闭时主机先停止,设备在最后一个租约释放后退出。
vfio-user 的接口细节见 vfio-user 通信接口,生命周期见 会话生命周期。
验证
计划输出为 1 个主机进程与 1 个设备进程,设备在主机之前启动。
集成测试
vfio_user_devices_start_before_the_host_and_stop_after_it覆盖这一启动与停止顺序。集成测试
vfio_user_option_rom_is_checked_and_exposed覆盖 option ROM 缺失、不可读与暴露到 ROM BAR 三种情况。两个测试由
just test-cosim-vfio-user运行,使用just build-qemu的产物。
限制
主机暂停,没有客户机;客户机内设备驱动路径不在本板卡覆盖范围内。
edu是测试设备,没有对应的客户机驱动。qemu-device不接受config与私有内存区域,启动约定由适配器固定。运行需要自建 QEMU;系统 QEMU 不保证包含 vfio-user 支持。运行会话需要 Linux glibc 与
setpriv。