答案1
这最终成为一个两部分的答案,如果它可以帮助别人的话,它就在这里:
- 回答最初的问题,要添加 PCI 直通,最好使用虚拟机管理器。选择您的虚拟机并单击打开. 得查看详情并点击“添加硬件“按钮。您也可以通过命令行完成同样的事情:
server$ virsh edit VM_name
并将这些行添加到 XML 文件中。
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0000' bus='0x01' slot='0x01' function='0x2'/>
</source>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</hostdev>
您可以使用以下方式查找域、总线、插槽和功能名称
lspci -t
lspci -n
- 现在,要使上述过程正常工作,您首先必须解除当前驱动程序与 PCI 卡的绑定,并将其绑定到虚拟机驱动程序。 在我的例子中,这是 lspci --v 命令的摘录
server$ lspci -nnv
01:01.0 Multimedia video controller [0400]: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder [14f1:8800] (rev 05)
Subsystem: DViCO Corporation FusionHDTV 5 Gold [18ac:d500]
Flags: bus master, medium devsel, latency 64, IRQ 17
Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
Capabilities: <access denied>
Kernel driver in use: cx8800
解除绑定的说明KVM 项目网站没有帮助,因为它们引用了已弃用的 pci-stub(据我所知)。请执行以下操作以解除驱动程序的绑定并将其绑定到 VFIO 驱动程序:
server$ sudo modprobe kvm_intel
server$ sudo modprobe kvm
server$ kvm-ok
server$ modprobe vfio-pci
server$ sudo chmod 222 /sys/bus/pci/drivers/vfio-pci/new_id
server$ sudo chmod 222 /sys/bus/pci/devices/0000\:01\:01.2/driver/unbind
server$ echo 0000:01:01.2 > /sys/bus/pci/devices/0000\:01\:01.2/driver/unbind
server$ echo "14f1 8802" > /sys/bus/pci/drivers/vfio-pci/new_id
您会注意到,我必须使用 chmod 才能获得解除/绑定驱动程序的权限。同样,您需要先执行步骤 2,然后才能执行步骤 1。
如果在添加 PCI 直通时出现权限问题,请执行以下操作
服务器$modprobe -r vfio_iommu_type1 服务器$modprobe vfio_iommu_type1 allow_unsafe_interrupts=1
我发现了这个技巧这里。