QEMU 的 USB 直通出现错误“qemu:无法添加 USB 设备”

QEMU 的 USB 直通出现错误“qemu:无法添加 USB 设备”

当我尝试在运行 osx Yosemite 10.10 的 macbook pro retina 2015 上使用 qemu 通过 usb 直通运行 arch linux 时,使用以下命令:

sudo qemu-system-i386 -cpu core2duo -cdrom archlinux-2015.11.01-dual.iso -boot order=d -m 1G -usbdevice host:0x13fe:0x5500

我不断收到错误:

qemu:无法添加 USB 设备‘主机:0x13fe:0x5500’

而在系统信息中,USB 设备的供应商 ID 为“0x13fe”,产品 ID 为“0x5500”。

我使用代码块(在 bash 中)获得相同的供应商和产品 ID

`system_profiler SPUSBDataType     | awk '
      /Product ID:/{p=$3}
      /Vendor ID:/{v=$3}
      /Manufacturer:/{sub(/.*: /,""); m=$0}
      /Location ID:/{sub(/.*: /,""); printf("%s:%s %s (%s)\n", v, p, $0, m);}
    '
`

在 qemu 上文档,它说通过 USB 的正确形式是

主机:供应商 ID:产品 ID

所以我相信我做得对。

我正在运行 qemu 2.4.0.1

我在这里做错什么了吗?

答案1

我不确定你为什么会收到这个错误,但-usbdevice无论如何你都不想使用它,因为它只能以“全速”模式(12M)连接设备,即使它是主机端的“高速”(480M)设备:

在此处输入图片描述

如果您连接的是“超高速”(5000M)设备(主机端启用了 xHCI),它甚至可能根本不起作用:

在此处输入图片描述

因此,您需要采用更现代、更通用的-device usb-host方法,并选择模拟主机控制器(例如-device nec-usb-xhci):

在此处输入图片描述

它也适用于“高速”(480M)设备:

在此处输入图片描述

以及“全速”(12M)设备:

在此处输入图片描述

模拟主机控制器的可能选择有:

[tom@localhost ~]$ qemu-system-x86_64 -device help |& grep usb.*hci
name "ich9-usb-ehci1", bus PCI
name "ich9-usb-ehci2", bus PCI
name "ich9-usb-uhci1", bus PCI
name "ich9-usb-uhci2", bus PCI
name "ich9-usb-uhci3", bus PCI
name "ich9-usb-uhci4", bus PCI
name "ich9-usb-uhci5", bus PCI
name "ich9-usb-uhci6", bus PCI
name "nec-usb-xhci", bus PCI
name "piix3-usb-uhci", bus PCI
name "piix4-usb-uhci", bus PCI
name "usb-ehci", bus PCI
name "vt82c686b-usb-uhci", bus PCI

[tom@localhost ~]$ qemu-system-x86_64 -device help |& grep ohci
name "pci-ohci", bus PCI, desc "Apple USB Controller"
name "sysbus-ohci", bus System, desc "OHCI USB Controller"

nec-usb-xhci在大多数情况下都应该能发挥最佳和良好的作用。

vendorid顺便说一句,除了+之外,还有其他方法productid可以指定要连接的设备-device usb-host。例如,hostbus+ hostaddr

在此处输入图片描述

或者,hostbus+ hostport

在此处输入图片描述

当系统中存在多个相同型号的设备时,这非常方便。

參考文獻:http://git.qemu.org/?p=qemu.git;a=blob_plain;f=docs/usb2.txt;hb=HEAD

答案2

最有可能的原因是“-usbdevice host”仅适用于 Linux,不能在 osx 上使用。

https://people.cs.clemson.edu/~ccorsi/kyouko/qemu-doc.html#index-g_t_002dusbdevice-38

host:bus.addr
  Pass through the host device identified by bus.addr (Linux only). 
host:vendor_id:product_id
  Pass through the host device identified by vendor_id:product_id (Linux only). 

答案3

我的笔记本电脑也遇到了同样的问题。你可以使用以下命令-hdb /dev/sdb代替:-usb -usbdevice ...

sudo qemu-system-i386 ubuntu16.img --enable-kvm -monitor stdio -m 2048 -hdb /dev/sdb -vga cirrus -vnc :0

相关内容