如何在 Mac 主机上将 USB 与 QEMU 结合使用?

问题描述 投票:0回答:3

我尝试以下方法通过 macOS 主机上运行的 Ubuntu 来宾访问 USB 存储设备:

sudo qemu-system-x86_64 -m 8G -boot d -smp 4 -net nic -net user \
   -hda Ubuntu/ubuntu.img -machine type=q35,accel=hvf \
   -device intel-hda -device hda-duplex \
   -device nec-usb-xhci -device usb-host,vendorid=0x0781,productid=0x5580

不幸的是,我无法从访客访问 USB 设备。访客系统日志说:

... kernel: [...] usb 5-1: USB new high-speed USB device number 3 using xhci_hcd
... kernel: [...] usb 5-1: New USB device found, idVendor=0781, idProduct=5580, bcdDevice= 0.10
... kernel: [...] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
... kernel: [...] usb 5-1: Product: Extreme
... kernel: [...] usb 5-1: Manufacturer: SanDisk
... kernel: [...] usb 5-1: SerialNumber: AA010829152XXXXXXX
... kernel: [...] usb 5-1: can't set config #1, error -32
... mtp-probe: checking bus 5 device 3: "/sys/devices/pci0000:00/0000:00:04.0/usb5/5-1"
... mtp-probe: bus: 5, device:3 was not an MTP device

如何成功访问USB设备?

使用物理设备通过 Android Studio 进行 Android 开发需要 USB。

我在文件传输模式下尝试了两个 USB 记忆棒和 Android 智能手机。

版本信息: macOS:10.13.6, qemu:5.1.0, Ubuntu:20.04.

macos usb qemu
3个回答
3
投票

开始之前:确保您的

vendorid
productid
与您要共享的设备相匹配。在您的 macOS 来宾上,您可以通过运行

来做到这一点
system_profiler SPUSBDataType

你应该得到类似的东西

    USB 3.1 Bus:

      Host Controller Driver: AppleUSB...
      PCI Device ID: 0x1234
      PCI Revision ID: 0x1234
      PCI Vendor ID: 0x1234
      Bus Number: 0x00

        USB 3.1 Storage Device:

          Product ID: 0x4242
          Vendor ID: 0x2424
          Version: 42
          Serial Number: ABCDE
          Speed: Up to 10 Gb/s
          Manufacturer: FooBar

对您来说可能看起来有点不同,但这没关系。对您来说重要的产品供应商ID是您想要共享的实际设备之一,而不是总线。所以在这种情况下,那就是

vendorid=0x2424,productid=0x4242

一旦一切正确,请确保以 root 身份运行

qemu-system-x86_64
。否则,您将没有 USB 直通的权限。我认为这就是您遇到的问题。因此,使用
qemu-system-x86_64
运行
sudo
:

sudo qemu-system-x86_64 ... -device nec-usb-xhci -device usb-host,vendorid=0x2424,productid=0x4242
    

3
投票
qemu 6.0.0 使用

libusb 将 USB 主机设备添加到虚拟机。有一个问题,如果设备已被另一个内核扩展声明,libusb 无法在 macOS 上声明该设备。似乎某些内核扩展会自动声明任何连接的设备。因此 libusb 的作者创建了一个解决方法:https://github.com/libusb/libusb/pull/911

解决方法尚未发布,但您可以使用 homebrew 从 github 构建最新版本的 libusb 并链接它而不是稳定版本:

brew install --head libusb brew unlink libusb brew link --head libusb
完成此操作后,使用 sudo 和 USB 主机设备运行 qemu 应该可以正常工作。

除了指定

vendorid

productid
,您可能还需要指定 
hostbus
hostport
。您可以使用 
info usbhost
 在 qemu 监视器中获取它们。


0
投票
有选项: -设备 qemu-xhci -设备 USB 主机,主机总线 = 002,主机地址 = 007 它可能需要以 root 身份运行: 含义 总线 2 设备 7: 如果不需要 root 则必须 深入探讨允许用户的配置 做这些事情 PAM/组:

© www.soinside.com 2019 - 2024. All rights reserved.