我想尝试 PCI 直通。我已将旧的捕获视频卡传递给 Windows XP 客户机。
IOMMU
已启用;
vfio_pci
已加载
我运行这个命令:
virsh nodedev-detach pci_0000_05_05_0
lspci -s 00:05 -v
它报告vfio
正在“运行” PCI 设备,但是当我使用 PCI 设备启动 XP 时,它返回以下错误:
Please ensure all devices within the iommu_group are bound to their vfio bus driver.
我做错了什么?
答案1
我找到了解决方案。首先必须识别 IOMMU 组;在我的例子中是11(我发现它使用lspci
和读取pci地址,在我的例子中是05:05:0)
find /sys/kernel/iommu_groups/ -type l|grep \/11
/sys/kernel/iommu_groups/11/devices/0000:00:14.4
/sys/kernel/iommu_groups/11/devices/0000:05:06.0
/sys/kernel/iommu_groups/11/devices/0000:05:05.0
所以我们必须将 05:05 和 05:06(该组的两个 PCI 卡)添加到qemu
,with 中libvirt
。使用 virt-manager 添加硬件、选择 pci 主机很容易。现在我们启动......另一个错误出现在dmesg
:
"Flags mismatch irq 21. 00000000 (vfio-intx(0000:05:05.0)) vs. 0000000....usb...."
这意味着我们的系统无法共享中断,因此我们必须从主机中删除该设备。
所以我们必须找到中断:
cat /proc/interrupts | grep 21
它返回例如 usb2,因此我们搜索 usb 目录:
find /sys/devices/pci0000\:00/0000\:00\:* -iname usb2
,转到 USB 目录,在我的例子中是 13.2:
cd /sys/devices/pci0000\:00/0000\:00\:13.2/
并从主机中删除(原文如此!):
echo -n 1 > remove
现在,当启动来宾时,pci 卡将被分配给它。
又为了回到我们身边?如果我找到解决方案,我将添加答案!