[英]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。
開始之前:確保您的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 透傳的權限。 我認為這是您遇到的問題。 因此,使用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 應該可以正常工作。
除了指定vendorid
和productid
之外,您可能還需要指定hostbus
和hostport
。 您可以使用info usbhost
在 qemu 監視器中獲取它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.