前言: USB passthrough让作者疑惑了一番~ 分析: 1,xml 根据libvirt的官方文档:http://libvirt.org/formatdomain.html#elementsHostDevSubsys 或者libvirt的docs:libvirt-3.0.0/docs

xml配置如上,在source中使用vendor id和product id。 2,qemu libvirt通过xml运算,计算出来qemu的参数,即“usb-host”类型设备。qemu-2.8.0-rc4/hw/usb/host-libusb.c中实现。作者选择的是 qemu-2.8.0-rc4的代码,依然不支持host的usb使用bus,port的方式。 3,libusb qemu中操作host的usb设备,通过libusb代码(https://sourceforge.net/projects/libusb/?source=typ_redirect)实现。libusb的代码,作者简单翻了一下,跑了一下测试代码,看了一下trace,大概意思就是分析/sys/bus/usb/devices目录下的文件/文件夹,进而可以打开usb设备,或者获取usb设备的attr;在用户态实现usb协议,则可以直接操作硬件。 usb的设备虚拟化,则和其他usb设备一样,guest中对usb设备进行操作,则qemu把对应的操作通过libusb透传给host的usb设备。 可见,usb的passthrough,并不是直接让guest直接访问host的usb设备。
4,lsusb
相关命令lsusb是一个不错的命令。

后记: 作者对usb协议并不熟悉,关于libusb的解释也未必完全准确。 请教过一个kernel高手的朋友,见我不会usb,还鄙视了我一下~囧