elb*_*rna 3 pci virtual-machine qemu pci-passthrough iommu
我想尝试 PCI 直通。我已将旧的捕获视频卡传递给 Windows XP 来宾。
IOMMU
已启用;
vfio_pci
已加载
我运行这个命令:
virsh nodedev-detach pci_0000_05_05_0
lspci -s 00:05 -v
Run Code Online (Sandbox Code Playgroud)
它报告vfio
正在“运行”PCI 设备,但是当我使用 PCI 设备启动 XP 时,它给了我这个错误:
Please ensure all devices within the iommu_group are bound to their vfio bus driver.
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
我找到了解决方案。首先必须确定 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
Run Code Online (Sandbox Code Playgroud)
所以我们必须将 05:05 和 05:06(该组的两个 PCI 卡)添加到qemu
, 中libvirt
。这很容易使用 virt-manager 添加硬件,选择 pci 主机。现在我们启动并且..另一个错误出现在dmesg
:
"Flags mismatch irq 21. 00000000 (vfio-intx(0000:05:05.0)) vs. 0000000....usb...."
Run Code Online (Sandbox Code Playgroud)
这意味着我们的系统不能共享中断,因此我们必须从主机中删除设备。
所以我们必须找到中断:
cat /proc/interrupts | grep 21
Run Code Online (Sandbox Code Playgroud)
它返回例如 usb2,所以我们搜索 usb 目录:
find /sys/devices/pci0000\:00/0000\:00\:* -iname usb2
Run Code Online (Sandbox Code Playgroud)
,转到 USB 目录,在我的情况下 13.2:
cd /sys/devices/pci0000\:00/0000\:00\:13.2/
Run Code Online (Sandbox Code Playgroud)
并从主机中删除(原文如此!):
echo -n 1 > remove
Run Code Online (Sandbox Code Playgroud)
现在,当启动来宾时,会为其分配 pci 卡。
而为了回报给我们?我会添加答案...如果我找到解决方案!
归档时间: |
|
查看次数: |
1580 次 |
最近记录: |