usb透传

项目需要,将host os的usb设备透传给guest os,同时实现usb设备的过滤功能。
首先,将这个功能分解为几个小功能:

  • usb设备拔插事件的侦测。
    用pyudev侦测linux系统中的设备插入,拔出事件。
  • usb设备类型的判断。参考一
    用pyusb获取usb设备interface类型信息。
  • libvirt usb设备透传的实现。
    这里用到了libvirt的python api。顺便说一下我怎么学习python的?
我怎么学习Python

Python学起来真的是太舒服了,你可以通过写代码来学习。怎么说,就比如说libvirt的python api,怎么学习,上网查api?不用!几个简单的build-in function:type(), dir(), help()。这就够了。

#!/usr/bin/evn python
#-*- coding: utf-8 -*-

import libvirt
help(libvirt)
#基本上重要的东西都在下面了
#通过libvirt.open(),获得virConnect
#通过virtConnect.lookupByName(),获得virDomain
'''
CLASSES
    __builtin__.object
        virConnect
        virDomain
        virDomainSnapshot
        virInterface
        virNWFilter
        virNetwork
        virNodeDevice
        virSecret
        virStoragePool
        virStorageVol
        virStream
    exceptions.Exception(exceptions.BaseException)
        libvirtError
'''
#查看某个类的函数列表用dir()

整个思路就是通过调用virDomain.attachDevice(),virDomain.detachDevice()实现设备在Guest的热插拔。现在问题是透传给Guest前需要先将设备从Host拔出,拔出的方法就是调用virNodeDevice.dettach()方法。如何通过vid,pid获取virNodeDevice呢?

最新消息,调用:

virsh attach-device login usb-mouse.xml

失败,信息如下:

error: Failed to attach device from usb-mouse.xml
error: internal error: unable to execute QEMU command 'device_add': failed to open host usb device 1:5

什么情况?
问题终于弄清楚了,只能说HCI(host controller interface)水很深,还是有必要了解清楚Qemu的usb device passthrough的基本架构的!

你可能感兴趣的:(usb透传)