粘贴在最后:

粘贴在最后:

我试图将 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 直通。

相关内容