在USB设备重新连接时强制libvirt将相同的设备编号传递给guest虚拟机

我有一个HP绘图仪通过USB集线器连接到一个debian服务器的USB电缆。 在服务器上有一个虚拟化的Windows XP。 每次我重新启动绘图仪时,udev会将不同的设备编号分配给绘图仪,以便更改由Windows分配给绘图仪的虚拟打印机端口。

看来不可能强迫udev使用相同的devnum ,所以我应该强制libvirth通过一个固定的总线地址。

我目前在libvirt attach-device使用下面的代码:

 <hostdev mode='subsystem' type='usb' managed='yes'> <source> <vendor id='0x0123'/> <product id='0x0456'/> </source> </hostdev> 

我可以为udev编写一个规则来创build一个固定名称的设备。 如果以这种方式将设备从客户端看到的话,应该很好,因为它总是连接到同一个USB端口。 你知道这有可能吗?

编辑:

我正在努力遵循André的build议。 我不确定要为设备#8添加hostbus和hostport参数。

 # lsusb -t /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M |__ Port 2: Dev 3, If 0, Class=HID, Driver=usbfs, 1.5M |__ Port 3: Dev 4, If 0, Class=hub, Driver=hub/4p, 480M |__ Port 1: Dev 8, If 0, Class=print, Driver=usbfs, 12M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M 

这是我第一次尝试:

 <qemu:commandline> <qemu:arg value='-device'/> <qemu:arg value='ich9-usb-ehci1,id=passthroughehci'/> <qemu:arg value='-device'/> <qemu:arg value='usb-host,hostbus=002,hostport=001,bus=passthroughehci.0'/> </qemu:commandline> 

但它没有工作。