我试图将 USB 卡传递给来宾,但我似乎无法使 VFIO 驱动程序粘住,而是主机加载并接管该卡。我的 GPU 已成功通过,因此我确信 vfio/IOMMU 正在工作。
卡:Sonnet Allegro USB 3.1,两端口 USB-C 10Gb PCIe 卡 (USB3C-2PM-E) 主板:ASRock x399 Taichi CPU:Threadripper 1950x 我尝试遵循与我用来传递 GPU 相同的过程,这是我主要学到的这里:
首先,获取卡的ID:
~ lspci | grep USB
01:00.0 USB controller: Advanced Micro Devices, Inc. [AMD] Device 43ba (rev 02)
0a:00.0 USB controller: ASMedia Technology Inc. ASM1142 USB 3.1 Host Controller
0b:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) USB 3.0 Host Controller
45:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) USB 3.0 Host Controller
下一个。获取供应商、产品 ID 和别名,然后相应地修改系统文件,以防止卡被主机抢占:
~ lspci -nn | grep 0a:00
0a:00.0 USB controller [0c03]: ASMedia Technology Inc. ASM1142 USB 3.1 Host Controller [1b21:1242]
cat /sys/bus/pci/devices/0000:0a:00.0/modalias
pci:v00001B21d00001242sv000016B8sd00007230bc0Csc03i30
~ sudo nano /etc/modprobe.d/local.conf
粘贴在最后:
alias pci:v00001B21d00001242sv000016B8sd00007230bc0Csc03i30 vfio-pci
options vfio-pci ids=1b21:1242
然后:
~ sudo update-initramfs -u
然后重新启动并检查该卡是否正在使用 vfio 驱动程序:
~ lspci -kn | grep -A 2 0a
0a:00.0 0c03: 1b21:1242
Subsystem: 16b8:7230
Kernel driver in use: xhci_hcd
我还尝试按照上面提到的同一博客制作一个覆盖脚本:
sudo nano /sbin/vfio-pci-override-usb.sh
#!/bin/sh
DEVS="0000:0a:00.0"
for DEV in $DEVS; do
echo "vfio-pci" > /sys/bus/pci/devices/$DEV/driver_override
done
modprobe -i vfio-pci
#####
sudo chmod 755 /sbin/vfio-pci-override-usb.sh
sudo nano /etc/modprobe.d/local.conf
注释掉之前的条目并添加:
install vfio-pci /sbin/vfio-pci-override-usb.sh
sudo update-initramfs -u
reboot
但还是不行:
~ lspci -kn | grep -A 2 0a:00
0a:00.0 0c03: 1b21:1242
Subsystem: 16b8:7230
Kernel driver in use: xhci_hcd
另外:当我在 lspci 中查找驱动程序(查看还有什么正在使用它)时,它会显示一堆设备,但不是 0a:00。
~ lspci -kn | grep -A 2 xhci
Kernel driver in use: xhci_hcd
01:00.1 0106: 1022:43b6 (rev 02)
Subsystem: 1b21:1062
--
Kernel driver in use: xhci_hcd
0b:00.0 1300: 1022:145a
Subsystem: 1022:145a
--
Kernel driver in use: xhci_hcd
0c:00.0 1300: 1022:1455
Subsystem: 1022:1455
--
Kernel driver in use: xhci_hcd
46:00.0 1300: 1022:1455
Subsystem: 1022:1455
接下来我尝试将驱动程序列入黑名单:
sudo nano /etc/default/grub
# original: GRUB_CMDLINE_LINUX_DEFAULT=”amd_iommu=on”
# to:
GRUB_CMDLINE_LINUX_DEFAULT=”modprobe.blacklist=xhci_hcd amd_iommu=on”
##then:
sudo update-grub
##Uncomment in local.conf:
# options vfio-pci ids=1b21:1242
sudo update-initramfs -u
仍然没有:
lspci -kn | grep -A 2 0a:00
0a:00.0 0c03: 1b21:1242
Subsystem: 16b8:7230
Kernel driver in use: xhci_hcd
我还可以尝试什么?我是否正确地认为该设备使用的内核驱动程序必须是 vfio-pci?
答案1
我知道我参加聚会有点晚了,但我希望以下内容可以帮助那些在谷歌搜索中面临类似问题的人。 请注意,我仅在独立 USB 控制器上对此进行了测试。
xhci_hcd 确实内置在内核中,因此它声明 USB 控制器,除非找到解决方法,否则 vfio-pci 不会分配为正在使用的内核。一种方法是调用脚本来绑定/取消绑定
解决此问题的另一种更简单的方法是使用以下命令:
sudo driverctl -v set-override 0000:0X:00 vfio-pci
其中 0000:0X:00 是您的 pci id。
重新启动后,分配的驱动程序将自动成为 vfio-pci。
答案2
哈哈,愚蠢的我,看来我白费了很多麻烦,我可以在 virt-install 中添加该卡,即使该卡没有绑定到 VFIO 驱动程序,它似乎也很好。
编辑:看来我说得太早了,因为我无法同时通过我的 NVIDIA GPU 和 USB 卡(当我尝试启动它时,virt-manager 只是挂起而没有错误)..但我想这是一个单独的问题是因为它是关于两张特定的卡在一起的。
编辑 #2:技巧是使用不同的 GPU 安装 Windows,然后通过编辑域 XML 来设置 GPU 直通。