在桌面虚拟化的项目中,常常会遇到用户提出的各自外设需求,这时产品对外设的兼容性就成为了项目成败的拦路虎

本文试图用通俗易懂的语言讲讲USB外设重定向的工作流程,先看看普通PC上USB设备的工作流程

usb硬件只将数据交给usb总线驱动,而应用程序只会把请求提交给本usb设备驱动处理,在usb设备驱动提交usb总线驱动处理

从上图可以看出,能够被虚拟化的只有USB设备驱动和USB总线驱动两个对象

这也是目前业界对USB设备虚拟化的两大主流方式

一.  虚拟USB总线驱动的方案

又叫做USB端口重定向,工作流程如下图

TC上所插USB设备数据通过TC的USB总线提交给虚拟USB驱动,虚拟USB驱动负责在TC总线和USB客户端之间双向传输数据,如实传输USB硬件的一切细节,对虚拟机来说,相当于在虚拟USB总线上插了一个USB硬件,假如在TC上插了一个闪迪的U盘,那在虚拟机看来就是有一个闪迪U盘插上来了,这时候虚拟机的系统会自动打相应的设备驱动

实质上,端口映射只是相当于将PC上USB工作流程里的USB设备驱动到USB总线驱动之间的这段进行了拉长,通过中间加入几个代理,最终还是将TC上USB外设的细节原原本本向虚拟机上的USB应用呈现,只是隐瞒了设备实际上是在远端TC的事实,这样应用根本感知不到和使用本地外设的差异,和运行在PC上是一样的,因此,USB端口重定向具有良好的设备兼容性。

端口重定向也有一定局限性,由于没有经过设备驱动层的压缩和预处理,对于某些扫描仪和摄像头等图像类应用,可能会导致带宽过大,网络时延敏感等问题

二.  虚拟USB设备驱动的方案

又称为USB设备重定向,工作流程如下图

USB设备重定向是在应用层的实现,通过在虚拟机上创建一个虚拟的USB外设驱动(对操作系统来说,一个驱动意味着一个设备),来使应用程序获得数据,对于整个系统来说,虚拟USB外设驱动和TC上的USB设备驱动本质上是两个不同的USB设备,而USB服务端和USB客户端负责维护两个驱动之间的数据通道(类似于在两个U盘之间互相拷贝数据)

显而易见,设备重定向工作流程中的代理环节少了很多,因而数据传输速率更高,延时更低,更适合像USB摄像头等数据流量比较大,同时对延时也比较敏感的外设

事实上,目前主流的远程桌面协议如HDX,Spice等,都为每一类外设提供从客户端到虚拟机的映射,并在应用层提供专门的通道,将不同的流量隔离开来,如摄像头、打印机、扫描类设备、智能卡设备等,甚至针对不同外设应用场景的需求,提供不同的传输Qos

设备重定向的问题主要在TC上的USB设备驱动和外设通道协议的USB客户端之间,如果外设厂家提供的不是遵循外设协议标准的驱动,那么USB客户端可能会不能很好的将其识别到

谈USB重定向的方式的更多相关文章

  1. USB重定向

    第一期中,我们一起简要的看了下传统PC和桌面云下USB重定向和USB设备重定向方式的差异,了解了桌面云下外设兼容性问题来源的根源-USB设备本身驱动不规范/不支持, 或者虚拟机驱动实现上与USB设备对 ...

  2. 浅谈USB设备的VID和PID

    根据USB规范的规定,所有的USB设备都有供应商ID(VID)和产品识别码(PID),主机通过不同的VID和PID来区别不同的设备,VID和PID都是两个字节长,其中,供应商ID(VID)由供应商向U ...

  3. Spring MVC(三)控制器获取页面请求参数以及将控制器数据传递给页面和实现重定向的方式

    首先做好环境配置 在mvc.xml里进行配置 1.开启组件扫描 2.开启基于mvc的标注 3.配置试图处理器 <?xml version="1.0" encoding=&qu ...

  4. 浅谈URL重定向

    转载:https://blog.csdn.net/kiyoometal/article/details/90698761 重定向原理 HTTP 协议的重定向响应的状态码为 3xx .浏览器在接收到重定 ...

  5. nrf52——DFU升级USB/UART升级方式详解(基于SDK开发例程)

    摘要:在前面的nrf52--DFU升级OTA升级方式详解(基于SDK开发例程)一文中我测试了基于蓝牙的OTA,本文将开始基于UART和USB(USB_CDC_)进行升级测试. 整体升级流程: 整个过程 ...

  6. 浅谈输入输出”重定向“——基于Linux系统

    前言 进程在启动后会自动的打开3个文件:标准输入.标准输出和标准错误输出分别对应文件描述符0.1.2.对于每个进程他们都都维护了一张文件描述符表(file descriptor table),通常fd ...

  7. 小米pad MI PAD 开发者选项、USB调试开启方式

    设置->关于平板->在MIUI版本一行连续点击7次. 之后就出现了开发者选项.可以开启USB调试等. 你能想到吗……??

  8. 客户端通过spice-gtk实现USB重定向

    1.安装必要的工具: sudo apt-get install build-essential autoconf git-core intltool 2.安装必要的依赖包: -dev libxfixe ...

  9. KVM通过qemu实现USB重定向

    KVM是通过qemu来支持USB设备的,可以在启动的时候就指定需要连接的USB设备,也可以系统启动后动态的添加删除.通过qemu的help可知,使用qemu的usb_add host:xxx:xxx来 ...

随机推荐

  1. idea关闭标签快捷键修改----兼 常用实用快捷键

    还有一个快捷键: 自动补全返回值 : ctrl + alt + v alt + enter: 自动添加未定义的方法 idea 原本的关闭快捷键是: ctrl + F4,但是不好用,谁的手指伸这么长 修 ...

  2. 【 MAKEFILE 编程基础之二】MAKEFILE 书写规划以及语法规则!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/768.html   ...

  3. CRM N:1 关系或者字段无法删除

    点开详细信息查看那些实体引用了该组件.查看内容如下: 1 查看窗体上有无该字段; 2 查看视图中有无该字段; 3 查看试图的 筛选条件; 4 查看试图的 查找列; 5 发布之后再试试.

  4. Delphi StringGrid控件的用法

    Delphi StringGrid控件 组件名称:StringGrid         ●固定行及固定列:  StringGrid.FixedCols:=固定行之数;  StringGrid.Fixe ...

  5. python文件相关

    文件操作基本流程初探 f = open('chenli.txt') #打开文件 first_line = f.readline() print('first line:',first_line) #读 ...

  6. Linux性能优化 第二章 性能工具:系统CPU

    2.1 CPU性能统计信息 2.1.1运行队列统计 在Linux中,一个进程要么是可运行的,要么是阻塞的(正在等待一个事件的完成).阻塞进程可能在等待从I/O设备来的数据,或者是系统调用的结果如果一个 ...

  7. Tomcat内存优化

    一.Tomcat内存优化 T omcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.sh 中设置 JAVA_OPTS参数. 1.JAVA_OP ...

  8. git命令简洁版

    五:业务逻辑GITgit  status要经常用 1. 把远端代码下载下来git clone https://或者git@10.0.4.73:sns,进入cd 文件夹 另外在自己新建立一个项目时,需要 ...

  9. linux中ps命令

    ps的参数 -C的使用 [root@centos7 ~]# ps -C nginx -o user,pid,comm USER PID COMMAND root 2697 nginx nginx 26 ...

  10. spring揭密学习笔记(1) --spring的由来

    1.spring起源于在EJB暴露出各种严重问题的情况应运而生. Spring是于2003年兴起的一个轻量级的Java开发框架, Spring倡导一切从实际出发,以实用的态度来选择适合当前开发场景的解 ...