为什么 PCI 直通不将我的设备提供给来宾操作系统?

为什么 PCI 直通不将我的设备提供给来宾操作系统?

我想尝试 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 卡将被分配给它。

又为了回到我们身边?如果我找到解决方案,我将添加答案!

相关内容