我需要为 qemu 下的 VM 通过 USB 3.0 控制器。
我的 lspci -nnk 是:
...
02:00.0 USB controller [0c03]: Renesas Technology Corp. uPD720201 USB 3.0 Host Controller [1912:0014] (rev 03)
Kernel driver in use: xhci_hcd
03:00.0 USB controller [0c03]: VIA Technologies, Inc. VL805 USB 3.0 Host Controller [1106:3483] (rev 01)
Subsystem: Gigabyte Technology Co., Ltd VL805 USB 3.0 Host Controller [1458:5007]
Kernel driver in use: xhci_hcd
...
我想通过的是uPD720201,它在它的IOMMU组中是孤独的。
我的 vfio.conf 是:
options vfio-pci ids=1002:68f9,1002:aa68,1912:0014 disable_vga=1
#Note : the 1002:68f9 and 1002:aa68 are the gpu card, which is correctly pass trough
但现在问题似乎是 xhci_hcd 驱动程序覆盖了 vfio 驱动程序,因为它似乎在启动时正确加载:
$ dmesg | grep "vfio"
[ 4.475492] vfio: unknown parameter 'vfio_iommu_type1' ignored
[ 4.476319] vfio: unknown parameter 'vfio_virqfd' ignored
[ 4.477177] vfio: unknown parameter 'vfio_pci' ignored
[ 4.478023] vfio: unknown parameter 'ids' ignored
[ 21.546903] vfio-pci 0000:05:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=none:owns=none
[ 21.568068] vfio_pci: add [1002:68f9[ffff:ffff]] class 0x000000/00000000
[ 21.588151] vfio_pci: add [1002:aa68[ffff:ffff]] class 0x000000/00000000
[ 21.588824] vfio_pci: add [1912:0014[ffff:ffff]] class 0x000000/00000000
[ 27.296307] vfio-pci 0000:05:00.0: vgaarb: changed VGA decodes: olddecodes=none,decodes=none:owns=none
我已经尝试在 blacklist.conf 和 grub 中将 xhci_hcd 列入黑名单:
/etc/modprobe.d/blacklist.conf
...
blacklist xhci_hcd
...
/etc/default/grub
...
GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=on iommu=pt kvm_amd.npt=1 modprobe.blacklist=xhci_hcd"
...
在这些修改之后,我当然做了一个 update-initramfs -u 和一个 update-grub2 。在所有情况下它都没有效果,我总是有“使用中的内核驱动程序:xhci_hcd”我发现禁用 xhci_hcd 的唯一方法是通过以下方式取消绑定我的卡:
$ echo '0000:02:00.0' | tee /sys/bus/pci/devices/0000:02:00.0/driver/unbind
但我不知道如何在启动时执行它(可能在 vfio 分配之前)。
您知道禁用 xhci_hcd (或其他方法)以使其工作的解决方案吗?
我试过了,我有这个:
该命令已经出现,但都在一行上,所以我只是在它们之间放置了回车符。
现在我的板载 USB3 控制器已禁用(我尝试在其上放置一个 USB 设备,但它确实已禁用)但不是我添加的。
我的 lspci -nnk 是:
...
02:00.0 USB controller [0c03]: Renesas Technology Corp. uPD720201 USB 3.0 Host Controller [1912:0014] (rev 03)
Kernel driver in use: xhci_hcd
03:00.0 USB controller [0c03]: VIA Technologies, Inc. VL805 USB 3.0 Host Controller [1106:3483] (rev 01)
Subsystem: Gigabyte Technology Co., Ltd VL805 USB 3.0 Host Controller [1458:5007]
...
注意:现在我的 grub 文件是(它使我在上面描述的内容持久化):
/etc/default/grub
...
GRUB_CMDLINE_LINUX="amd_iommu=on iommu=pt kvm_amd.npt=1"
GRUB_CMDLINE_LINUX="modprobe.blacklist=xhci_hcd"
...
我最终选择从 kernel.org 源代码完全重建内核,并将 xhci_hcd 作为加载模块而不是内置模块。现在我可以通过以下方式禁用 xhci_hcd :
其次是:
现在我可以将控制器附加到 VM 并获得:
但不幸的是,我的板载 USB 3.0 控制器(VL805)被禁用,所以我只做一个:
所以现在两个控制器都可以在好的机器上工作,但是有点复杂
注意:grub 和 blacklist.conf 中的所有配置都是无用的。
你能调出 GRUB 引导菜单并编辑类似于@matsuzaki 在这篇文章中所做的命令行选项吗?
如果是这样,那么您可以将黑名单添加
modprobe.blacklist=xhci_hcd
为参数。根据这篇文章,您可能想尝试
F1
调出启动菜单:askubuntu.com/questions/1014626/how-to-access-grub-menu