文章目录

  • 1. 查看linux usb设备
    • 1.1.通过/sys/kernel/debug/usb/devices文件
    • 1.2. 通过lsusb命令
  • 2.启动带usb设备的虚拟机
    • 2.1.根据Bus, Dev来识别
    • 2.2. 根据Bus,Port来识别
  • 3.动态删除usb设备
    • 3.1.列出qemu的虚拟usb设备
    • 3.2.删除指定设备
    • 3.3.动态添加设备

1. 查看linux usb设备

1.1.通过/sys/kernel/debug/usb/devices文件

[root@192 usb-test]# cat /sys/kernel/debug/usb/devicesT:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480  MxCh= 6
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0002 Rev= 3.10
S:  Manufacturer=Linux 3.10.0-693.21.1.el7.x86_64.debug ehci_hcd
S:  Product=EHCI Host Controller
S:  SerialNumber=0000:02:03.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256msT:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12   MxCh= 2
B:  Alloc=  0/900 us ( 0%), #Int=  1, #Iso=  0
D:  Ver= 1.10 Cls=09(hub  ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0001 Rev= 3.10
S:  Manufacturer=Linux 3.10.0-693.21.1.el7.x86_64.debug uhci_hcd
S:  Product=UHCI Host Controller
S:  SerialNumber=0000:02:00.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   2 Ivl=255msT:  Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12   MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0e0f ProdID=0003 Rev= 1.03
S:  Manufacturer=VMware
S:  Product=VMware Virtual USB Mouse
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=02 Driver=usbhid
E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=1msT:  Bus=02 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#=  3 Spd=12   MxCh= 7
D:  Ver= 1.10 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0e0f ProdID=0002 Rev= 1.00
S:  Product=VMware Virtual USB Hub
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   1 Ivl=255msT:  Bus=02 Lev=02 Prnt=03 Port=00 Cnt=01 Dev#=  4 Spd=12   MxCh= 0
D:  Ver= 2.00 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=0e0f ProdID=0008 Rev= 1.00
S:  Manufacturer=VMware
S:  Product=Virtual Bluetooth Adapter
S:  SerialNumber=000650268328
C:* #Ifs= 2 Cfg#= 1 Atr=c0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=1ms
E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1msT:  Bus=02 Lev=02 Prnt=03 Port=01 Cnt=02 Dev#=  6 Spd=12   MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=16 #Cfgs=  1
P:  Vendor=0ef5 ProdID=2202 Rev= 1.00
S:  Manufacturer=USB Mass Storage
S:  Product=USB Mass Storage
S:  SerialNumber=2005102616390601
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms

1.2. 通过lsusb命令

[root@localhost ~]# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M|__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M|__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/7p, 12M|__ Port 1: Dev 4, If 0, Class=Wireless, Driver=btusb, 12M|__ Port 1: Dev 4, If 1, Class=Wireless, Driver=btusb, 12M|__ Port 2: Dev 5, If 0, Class=Mass Storage, Driver=usb-storage, 12M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M

2.启动带usb设备的虚拟机

注意,识别出host上usb设备的方式有很多种,以下的并不完整

2.1.根据Bus, Dev来识别

  • qemu命令行方式
 -device usb-host,hostbus=2,hostaddr=6,id=hostdev0

这种方式优点在于Dev号是唯一的,如1.2节所示,每个层级的设备都是统一编号

  • libvirt xml方式
<hostdev mode='subsystem' type='usb' managed='yes'><source><vendor id='0x0ef5'/><product id='0x2202'/><address bus='2' device='6' /></source>
</hostdev>

这里效果和上面一样,但是不知道vendor和product的id是否是必须的???

2.2. 根据Bus,Port来识别

  • qemu命令行方式
-device usb-host,hostbus=2,hostport=2.2,id=hostdev0 \

这里要注意hostport的2.2,代表是Bus=02,Port2的Port2,或者是level2的Port2???

  • libvirt xml方式
    赞不支持,需要开发

3.动态删除usb设备

3.1.列出qemu的虚拟usb设备

(qemu) info usbDevice 0.2, Port 1, Speed 12 Mb/s, Product host:1.2, ID: hostdev0Device 0.3, Port 2, Speed 12 Mb/s, Product QEMU USB HubDevice 0.4, Port 2.1, Speed 12 Mb/s, Product USB Mass Storage, ID: hostdev1

图3-1

字段含义
ID: hostdev0这个就是qemu启动参数里面的id
Device 0.2指的是guest里面看到的Dev 2
Port 1指的是Bus 01下面的Port1
Port 2.2指的是Bus 01下面的Port2,再下面的Port1
Product指的是产品名字,没任何意义
由此可见,真正是对host可见的只有ID,因此要删除一个设备,只能通过ID号

[root@192 usb-test]# lsusb  -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M|__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M|__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/7p, 12M|__ Port 1: Dev 4, If 0, Class=Wireless, Driver=btusb, 12M|__ Port 1: Dev 4, If 1, Class=Wireless, Driver=btusb, 12M|__ Port 2: Dev 5, If 0, Class=Mass Storage, Driver=usb-storage, 12M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M|__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 480M

从host上U盘信息也可以看到,与图3-1显示的信息无关

3.2.删除指定设备

(qemu) device_del hostdev1
(qemu) info usbDevice 0.2, Port 1, Speed 12 Mb/s, Product host:1.2, ID: hostdev0Device 0.3, Port 2, Speed 12 Mb/s, Product QEMU USB Hub

可以看到,ID为hostdev1的设备被删除了

-libvirt删除
[root@localhost usb-test]# virsh detach-device vm1-usb --file usb_2.0.xml

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

3.3.动态添加设备

[root@localhost usb-test]# virsh attach-device vm1-usb --file usb_2.0.xml
Device attached successfully

[1]USB device & USB controller & USB passthrough
[2]Linux下,查看USB设备信息
[3]KVM usb passthrough配置
[4]虚机支持虚拟USB存储设备
[5]qemu: usb存储设备仿真

qemu下的USB直通功能介绍相关推荐

  1. Ubuntu系统目录下各文件夹功能介绍【转载】

    一 根目录 /bin 二进制可执行命令 /dev 设备文件(硬盘/光驱等) /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录,下面会有以登录用户名作为文件 ...

  2. WINCE6.0+S3C2443下的usb function(功能)驱动

    ********************************LoongEmbedded************************ 作者:LoongEmbedded(kandi) 时间:201 ...

  3. android外接usb摄像头demo_手机USB接口有哪些功能 手机USB接口功能介绍【详解】

    手机身上的USB接口主要的任务就是充电,连接PC传输数据,你还能想到其他的功能吗?没错,它还能连接USB小风扇.小台灯等外设.但是,你以为所有手机在实现这些功能时的体验和效果都是一样的吗? 充电速度和 ...

  4. Ubuntu根目录下各文件的功能介绍

    Ubuntu的根目录下存在着很多的文件夹,但你知道他们都存放着哪些文件呢?这些是深入了解Ubuntu系统必不缺少的知识,本文就关于此做一下介绍吧. /bin/    用以存储二进制可执行命令文件,/u ...

  5. 可编程 USB 转串口适配器开发板 S2S 功能介绍

    可编程 USB 转串口适配器开发板 S2S 功能介绍 USB2S 支持基于 STC 单片机的二次开发,若有需要,可参照原理图和单片机型号手册自行开发具有特殊功能的固件程序. 1.自带固件S2S 功能介 ...

  6. 在WinCE 6.0系统下实现USB功能定制

    USB的广泛应用就不用多说了,相信目前的各个领域的嵌入式产品中,很少有不用USB的.USB是主从结构的,分为USB Host和USB Slave,从USB1.0,USB1.1到现在的USB2.0,基于 ...

  7. linux下软件发布,Linux Kernel 5.12发布下载,附新特性及新功能介绍

    Linus Torvalds在Linux内核邮件列表中宣布正式发布Linux Kernel 5.12版本,已提供linux-5.12.tar.xz/tar.gz下载,以下为你介绍该版本的更改.新特性及 ...

  8. 请使用webdav_介绍下phpdav的使用功能价值

    说明一下:原测试地址域名没有续费已经废弃,新的测试地址: https://webdav.work:8150/ 我用php开发了一个webdav协议的软件phpdav github地址: xinghan ...

  9. Enter的使用计算机,Win7系统下键盘Enter回车键五大功能介绍

    win7系统电脑下好好利用键盘上的按键能够提高我们的工作操作效率,不同的键盘就组合都有奇妙的功能.相信大家对Enter回车键都很熟悉吧,其实在win7系统Enter回车键不仅只有简单的换行和确定功能, ...

最新文章

  1. 230. Kth Smallest Element in a BST ——迭代本质:a=xx1 while some_condition: a=xx2
  2. AFN中请求序列化的设置
  3. 在线maven托管_使用Amazon s3托管您的Maven工件
  4. Linux下Kill函数用法
  5. URL不能过长,否则summit方法提交失败
  6. STL之Deque容器
  7. python: symbol lookup error
  8. C语言课程2——我们交流的工具:Coding.net
  9. php获取文件夹下指定文件名_VBA和Python对对碰,获取文件名称(含子文件夹)
  10. nodejs下载慢问题
  11. HTML期末作业我的家乡静态网页设计
  12. PHP获取汉字笔画数功能
  13. PLsql oracle 误删除 恢复
  14. 电脑常用快捷键大全(收藏)
  15. java实时监控系统_JavaMonitor
  16. 398、Java框架52 -【Hibernate - 分页、两种获取方式】 2020.10.27
  17. 高德地图插件的简单使用
  18. 【林轩田】机器学习基石(七)——VC维
  19. 明星热图|欧阳娜娜、张艺兴代言新品牌;吴彦祖、高圆圆、全智贤演绎服装新品;关晓彤、欧阳靖、张云龙出席品牌活动...
  20. 绕口令:《舌头是怎样练成的》

热门文章

  1. Python之美[从菜鸟到高手]--urllib源码分析
  2. ThinkPad T430i 愉快安装 Windows11
  3. Windows错误代码 (Bitlocker)
  4. VR游戏创业:2016会迎来春天,收入或超百万美元
  5. Error: Cannot find module ‘dotenv‘解决方法
  6. python OpenCV 视频处理
  7. 【前端】【vue.js】【参考项目】vue-konva-project
  8. airpods升系统_AirPods 系统更新,空间音频来了!
  9. 文字图片转换成word文档的方法?
  10. 在过去的职业生涯中,我收获了什么?我的工作成果是什么?我拿什么证明?