提示
X
本案例来自tskb,请前往tskb修改源内容:立即前往
'>

USB映射原理说明

|

问题描述

功能原理
日常使用中,我们将USB外设插入PC/ARM/X86等终端上,便能在虚拟机中识别到此外设并进行读写操作了。我们知道虚拟机都运行在VMP上,然后终端通过网络与VMP进行通信,因此我们将USB数据由网络在终端和VMP上虚拟机间的传输叫做USB重定向,即USB映射,详细如下所示:



USB映射详细的流程如下:
1、PC/ARM/X86等终端系统接收到一个USB外设插入的事件,这个事件会通知VDIClient。
2、VDIClient收到消息后,开始获取USB外设的信息,包括VID和PID、型号、名称、配置信息等。

3、VDIClient获取到USB外设的基础配置信息后,会给Windows虚拟机发送一个USB外设插入的事件。VDIClient通过USB映射通道通知VMP服务器的虚拟USB主控制器(虚拟主控),将事件告知Windows虚拟机。

4、Windows虚拟机收到有USB外设插入的事件后,通过USB映射通道向VDIClient发送命令,获取USB外设的信息。当获取USB外设基本信息完成,就在虚拟机里面给USB外设找到匹配的驱动。

5、Windows虚拟机找到匹配的驱动后,将其与虚拟机关联起来,用户便可以在虚拟机里对USB外设进行读写操作了。
6、用户在虚拟机读写U盘的操作,都会变成命令通过USB映射通道发送给VDIClient,VDIClient解析这些命令,然后转换为ioctl读写U盘,再将读写的结果通过USB映射通道传回Windows虚拟机。

7、使用结束或者中途拔出USB外设,PC/ARM/X86终端会收到一个热拔出事件,然后将这个消息传输给虚拟机,虚拟机取消与驱动的关联,之后PC/ARM/X86终端取消usbfs驱动与USB外设的关联。
8、最后,windows虚拟机将这个USB通道释放。

注意:
Ioctl函数:设备驱动程序中对设备的I/O通道进行管理的函数
usbfs:USB文件系统
③上述原理仅适用于windows虚拟机,linux和国产化虚拟机由于USB映射的功能原理还在梳理,后续待完善;

解决方案

操作影响范围

无法显示该用户名 发表于 2022-9-5 08:49
  
感谢分享,有助于工作排错
finger1688 发表于 2022-9-5 12:55
  
楼主分享的案例很实用,具有典型性,希望有更多这样的干货供我们学习参考,非常感谢!
李宏瑜 发表于 2022-9-5 16:10
  
楼主分享的案例很实用,具有典型性,希望有更多这样的干货供我们学习参考,非常感谢!
照华Thomas 发表于 2022-12-28 15:27
  
感谢分享,有助于工作排错
照华Thomas 发表于 2022-12-28 18:19
  
向专家 咨询请教个问题:
目前在应用 云桌面,深信服终端盒子,经常会遇到 USB外设的故障,描述如下:
设备类型:通用串行总线控制器
设备状态:由于该设备有问题,Windows已将其停止。(代码 43)
有没有好的 解决办法? 谢谢!
言不由衷 发表于 2023-10-28 20:32
  

我要分享
文档编号: 209329
作者: admin
更新时间: 2023-01-05 17:29
适用版本: