QEMU/KVM:无法连接 USB 主机设备

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

我有这个设备,当

libusb_reset_device
时会断开连接并重新连接,我如何将其转发到VM。我查看了源代码,它调用了
libusb_reset_device

这是我连接该设备时的日志跟踪:

[email protected]:usb_host_open_started dev 2:3
[email protected]:usb_host_detach_kernel dev 2:3, if 0
[email protected]:usb_host_parse_config dev 2:3, value 1, active 1
[email protected]:usb_host_parse_interface dev 2:3, num 0, alt 0, active 1
[email protected]:usb_host_parse_endpoint dev 2:3, ep 1, in, bulk, active 1
. . .
[email protected]:usb_host_open_success dev 2:3
[email protected]:usb_host_reset dev 2:3
[email protected]:usb_host_reset dev 2:3
[email protected]:usb_host_close dev 2:3
[email protected]:usb_host_auto_scan_enabled 

这是主机(不是虚拟机)的 dmesg 日志


Feb 14 16:43:25 win-pc kernel: usb 2-1: new high-speed USB device number 3 using xhci_hcd
Feb 14 16:43:25 win-pc kernel: usb 2-1: New USB device found, idVendor=1782, idProduct=5d24
Feb 14 16:43:25 win-pc kernel: usb 2-1: New USB device strings: Mfr=2, Product=3, SerialNumber=4
Feb 14 16:43:25 win-pc kernel: usb 2-1: Product: Spreadtrum
Feb 14 16:43:25 win-pc kernel: usb 2-1: Manufacturer: Spreadtrum
Feb 14 16:43:25 win-pc kernel: usb 2-1: SerialNumber: 20161122200747
Feb 14 16:43:26 win-pc kernel: usb-storage 2-1:1.0: USB Mass Storage device detected
Feb 14 16:43:26 win-pc kernel: scsi host4: usb-storage 2-1:1.0
Feb 14 16:43:26 win-pc kernel: usbcore: registered new interface driver usb-storage
Feb 14 16:43:26 win-pc kernel: usbcore: registered new interface driver uas
Feb 14 16:43:27 win-pc kernel: scsi 4:0:0:0: Direct-Access     Linux    File-CD Gadget   0310 PQ: 0 ANSI: 2
Feb 14 16:43:27 win-pc kernel: sd 4:0:0:0: Power-on or device reset occurred
Feb 14 16:43:27 win-pc kernel: sd 4:0:0:0: [sdb] Attached SCSI removable disk
Feb 14 16:44:41 win-pc kernel: usb 2-1: reset high-speed USB device number 3 using xhci_hcd
Feb 14 16:44:41 win-pc kernel: usb 2-1: USB disconnect, device number 3
Feb 14 16:44:42 win-pc kernel: usb 2-1: new high-speed USB device number 4 using xhci_hcd
Feb 14 16:44:42 win-pc kernel: usb 2-1: New USB device found, idVendor=1782, idProduct=5d24
Feb 14 16:44:42 win-pc kernel: usb 2-1: New USB device strings: Mfr=2, Product=3, SerialNumber=4
Feb 14 16:44:42 win-pc kernel: usb 2-1: Product: Spreadtrum
Feb 14 16:44:42 win-pc kernel: usb 2-1: Manufacturer: Spreadtrum
Feb 14 16:44:42 win-pc kernel: usb 2-1: SerialNumber: 20161122200747
Feb 14 16:44:42 win-pc kernel: usb-storage 2-1:1.0: USB Mass Storage device detected
Feb 14 16:44:42 win-pc kernel: scsi host4: usb-storage 2-1:1.0
Feb 14 16:44:43 win-pc kernel: scsi 4:0:0:0: Direct-Access     Linux    File-CD Gadget   0310 PQ: 0 ANSI: 2
. . .

如您所见,设备将自行断开连接,然后重新连接

如何将这种设备转发到VM

编辑1:

如果你想知道它是什么设备,它是一部 Android 手机。我想将它传递给虚拟机,这样我就可以在虚拟机上使用

adb

编辑2:

我的时区是 UTC+7。你可以根据时间戳看到qemu跟踪日志和dmesg日志之间的相关性

编辑3:

我尝试使用

device_add usb-host,vendorid=1782,productid=5d24
而不是使用
hostbus
hostaddr
,这会导致无限循环:

  • qemu 尝试认领设备
  • 设备自行断开连接并重新连接
  • qemu 尝试再次认领该设备
  • 设备自行断开连接并重新连接
  • 等等...
android linux qemu kvm libusb
1个回答
0
投票

在 QEMU 中访问 USB 设备时,我们需要确保运行 QEMU 的用户具有访问连接到主机的 USB 设备所需的权限。

我假设已经考虑了 udev 规则。

我在链接到 libusb 库的“qemu-system-x86_64”QEMU 二进制文件中发现了一个错误。因此,我决定使用最新版本的 libusb 库来编译 QEMU 源代码。找到了一些有用的论坛,导致了这个决定 link1 link2

请按照此处提到的步骤操作:

构建libusb源代码并在您的ubuntu系统上正确安装

git clone https://github.com/libusb/libusb.git    
git checkout tags/v1.0.22 -b V1.0.22    
./configure --enable-udev --disable-static    
make    
sudo make install

构建Qemu源代码

git clone https://github.com/qemu/qemu.git    
git checkout -b stable-6.1 origin/stable-6.1    
./configure --target-list=x86_64-softmmu --enable-libusb --enable-kvm    
make -j16    
sudo make install
© www.soinside.com 2019 - 2024. All rights reserved.