首页 > 解决方案 > 如何在 Mac 主机上使用 USB 和 QEMU?

问题描述

我尝试通过在 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。

我在文件传输模式下尝试了两个 U 盘和一个 Android 智能手机。

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

标签: macosusbqemu

解决方案


在我们开始之前:确保您的vendoridproductid匹配您要共享的设备之一。在您的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

推荐阅读