将 USB 设备传递给 Qemu KVM

将 USB 设备传递给 Qemu KVM

我正在尝试让我的 Windows 虚拟机访问我的 USB 笔式驱动器,但我在将此 USB 传递到虚拟机时遇到问题。

在我的 Linux 主机上,我运行 lsusb,我的设备被标识为

Bus 001 Device 018 : ID 8564:1000 Transcend Information, Inc. Jetflash

看了一些指南,我尝试使用以下命令将此 USB 传递到 kvm

qemu-system-x86_64 -m 3G --enable-kvm "Windows 10.qcow2" -usb -device usb-host,hostbus=1,hostaddr=18

无论我尝试什么,我都会收到错误消息,指出“usb-host”不是有效的设备。

我尝试将其更改为 usb-storage,因为这是我在执行 lsusb -t 时看到的设备类别,但我不知道要传递什么作为设备 ID。如果我将其留空,它会显示属性正如预期的那样,“.drive”丢失了。

我尝试做一个ls /sys/bus/usb/devices打印出一些信息,例如

1-0:10 1-1 1-1.1 ........usb1 usb2

但无论我尝试在命令中传递哪个 id qemu-system-x86_64 -m 3G --enable-kvm "Windows 10.qcow2" -usb -device usb-storage,drive=<one of the above>

它说不存在具有给定价值的此类财产。

所以,

  1. 我应该担心 usb-host 不是有效设备吗?
  2. 我需要做什么才能让usb-storage设备 ID 正常工作?
  3. qemu-kvm 支持 USB 2、3 和流媒体摄像头吗?

我在用着QEMU emulator version 4.1.0

答案1

只是想我应该投入两分钱。我试图将 USB 打印机添加到我的虚拟机中,并尝试了整个“qemu-kvm”命令路线,但无济于事。我最终只是手动将 xml 条目添加到我的虚拟机的域 xml 中,如下所示库虚拟机关联。在主机上运行:

lsusb

找到代表您的 USB 设备的行。

Bus 001 Device 003: ID 03f0:1617 HP, Inc LaserJet 3015

“ID”代表您的供应商 ID 和产品 ID,以冒号分隔。然后只需替换下面 xml 代码中的设备供应商和产品 ID(包括十六进制的 0x)并将其添加为 VM 的“devices”块中的元素:

<hostdev mode='subsystem' type='usb'>                                                            
  <source startupPolicy='optional'>                                                              
    <vendor id='0x03f0'/>                                                                        
    <product id='0x1617'/>                                                                       
  </source>                                                                                      
  <boot order='2'/>                                                                              
</hostdev>

祝你好运,希望这能帮到你。仅供参考,要编辑域的 xml 文件,请运行:

virsh dumpxml yourdomain

进而

virsh edit yourdomain

这将加载您可以编辑的 xml 文件。

答案2

如果您可以使用图形前端, virt-manager那么 的 USB 直通就可以了。

在信息部分中单击add Hardware并选择USB Host Device

我用它来将笔式驱动器传递给 Windows 10 来宾,直到现在才遇到任何问题。

如果添加了 USB 设备,则在未检测到该设备时,机器将无法启动。即必须连接笔式驱动器才能启动虚拟机。

答案3

我是这个平台的新手,所以请原谅我的格式。如前所述,一切都始于

lsusb

获取总线和设备号(在您的情况下为 1 和 18)。然后,创建一个 jetflash.xml 文件,其中包含:

<hostdev mode='subsystem' type='usb' managed='yes'>
  <source>
    <address bus='1' device='18'/>
  </source>
</hostdev>

您会看到数字的去向!现在,附加/分离到正在运行的 vmID:

virsh attach-device vmID /path/to/jetflash.xml
virsh detach-device vmID /path/to/jetflash.xml

我希望这有帮助。

答案4

我遇到了一个非常相似的问题,但是我使用 virt 管理器,我花了几个小时试图找出可能出现的问题,最初我认为我的 xml 文件中有问题。但是运行后发现这个问题出现了sudo pacman -Syu

由于某种原因,这使得我的 qemu-hw-usb-host 丢失,导致 USB 主机无法被识别为有效的设备名称。

我的解决方案是重新安装libusb sudo pacman -S libusb(不确定这是否有必要),然后sudo pacman -S qemu-hw-usb-host

我希望这对于遇到此问题的任何人来说都是一个简单且有用的解决方案。

相关内容