簡體   English   中英

如何在 Mac 主機上使用 USB 和 QEMU?

[英]How to use USB with QEMU on a Mac host?

我嘗試通過在 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 設備?

USB 是通過 Android Studio 使用物理設備進行 Android 開發所必需的。

我在文件傳輸模式下嘗試了兩個 U 盤和一個 Android 智能手機。

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

開始之前:確保您的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 透傳的權限。 我認為這是您遇到的問題。 因此,使用sudo運行qemu-system-x86_64

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

qemu 6.0.0 使用libusb將 USB 主機設備添加到虛擬機。 有一個問題,如果另一個 kernel 擴展已經聲明了一個設備,libusb 無法在 macOS 上聲明該設備。 似乎某些 kernel 擴展會自動聲明任何連接的設備。 因此 libusb 的作者創建了一個解決方法: https://github.com/libusb/libusb/pull/911

解決方法尚未發布,但您可以使用自制軟件從 github 構建最新版本的 libusb 並鏈接它而不是穩定版本:

brew install --head libusb
brew unlink libusb
brew link --head libusb

完成此操作后,使用 sudo 和 usb-host 設備運行 qemu 應該可以正常工作。

除了指定vendoridproductid之外,您可能還需要指定hostbushostport 您可以使用info usbhost在 qemu 監視器中獲取它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM