我正在尝试将 PCI Express (PCIe) USB 3.0 卡传递到虚拟机。但是,XHCI_HCD 已编译到内核中,因此会在 VFIO 之前获取设备。
如果我将设备与 XHCI_HCD 解除绑定,该设备将无法在 Windows 中工作。
我曾尝试使用 Ubuntu 的配置编译自定义内核,仅将 xhci 更改为模块,但是,它在启动时崩溃。
请告知如何将物理 USB 硬件设备连接到虚拟 Windows 机器。请注意,我尝试过使用 XEN,效果很好,但 NVIDIA GPU 出现“代码 43”,我无法解决。
答案1
managed
通常,libvirt 会在您启动客户机时立即执行分离,这是因为主机设备定义。但是如果你想/需要调试这个从主机分离阶段,你可以通过以下方式识别设备的 libvirt 名称
$ virsh nodedev-list --tree
一旦您知道可以将其与主机分离并将其绑定到 vfio 以准备直通,这里有一个示例:
$ virsh nodedev-detach pci_0005_01_00_0 --driver vfio
您仍然必须遵循正确启用 IOMMU/DMAR 的其他约束,并将要传递的设备放在其自己的 IOMMU 组中(或传递该组的所有设备)。
您可以添加主机设备对于来宾定义,如果您不确定要添加什么,您可以使用它virsh nodedev-dumpxml
来获取必要的 ID。
答案2
我最终不得不重新编译内核,还必须将 PCI-stub 编译到内核表 xhci_hcd 中
并采取额外步骤来获得一个较小的 43m Initrd.img,而不是 450m