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

  或者虚拟机驱动实现上与USB设备对接存在疏漏。

  本期我们来详细的了解下传统PC和桌面云的外设工作原理

  目前,在通用操作系统上,USB外设占主流,下面就以USB摄像头举例说明其两种重定向技术的区别。

 传统PC

  先认识一下传统(PC机模式)USB外设工作的原理

                        

  从上图可以了解到,所有USB外设正常工作,在软件层面依赖的是USB总线驱动。一个应用需要使用USB外设必须与USB设备驱动进行交互,而设备驱动的工作

  完全依赖USB总线驱动来交互设备数据,与硬件交互都是由总线驱动来代理完成。

  桌面云

    在桌面云环境下实现对USB外设的支持,可以有两种方式,一种是基于USB总线的虚拟化重定向,称之为USB端口重定向,即替换掉USB总线驱动;另外一种

  是USB设备驱动的重定向,称之为设备重定向,即替换掉USB设备驱动。

                    

  上图所示,即为USB端口重定向方式,它通过在虚拟机和客户端各内置一个虚拟USB总线驱动,实现原物理下USB总线驱动的拉远。而设备对应的真实USB设备驱动安装

  并运行在虚拟机中,与虚拟机USB总线驱动进行交互,这样对虚拟机中的USB设备驱动来说,并不会感知到所控制的设备实际上在TC远端,同样应用程序也不会感知到

  这个差异。因为USB端口重定向与具体的设备和应用无关,直接将USB端口重定向到桌面虚拟机中,所以USB端口重定向具有良好的设备兼容性。但同时,也正是因为这个原因,USB端口重定向也有一定的局限性,由于没有经过设备驱动层的压缩和预处理,对于某些扫描仪和摄像头等图像类应用,可能会导致带宽过大,网络时延敏感等问题。在这种情况下,需要使用设备重定向技术。

  桌面云下USB重定向各模块作用(如上图)

  USB客户端:负责发现和断开客户端设备,接收服务端总线数据转发到设备,以及获取设备的总线数据转发到服务端

  虚拟USB驱动:作为一个虚拟的功能驱动,负责双向透传总线数据包

  USB服务端:负责获取服务端的总线数据包转发到客户端,以及接受客户端回应的总线数据包转发到虚拟总线驱动

  虚拟USB总线驱动:作为一个虚拟的总线驱动,向上和真实的各类USB功能驱动交互,负责转发各类USB设备的总线数据包,以及将USB 服务传递进来的数据包

  透传到上层功能驱动。

USB重定向的更多相关文章

  1. 谈USB重定向的方式

    在桌面虚拟化的项目中,常常会遇到用户提出的各自外设需求,这时产品对外设的兼容性就成为了项目成败的拦路虎 本文试图用通俗易懂的语言讲讲USB外设重定向的工作流程,先看看普通PC上USB设备的工作流程 u ...

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

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

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

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

  4. virt viewer Usbredir USB重定向

    编译virt viewer之前执行的configure命令,是没有使能usb-redir相关的功能,virt viewer是否支持usbredir是完全依赖于spice-gtk的. virt view ...

  5. 在KVM虚拟机中使用spice系列之二(USB映射,SSL,密码,多客户端支持)

    在KVM虚拟机中使用spice系列之二(USB映射,SSL,密码,多客户端支持) 发布时间: 2015-02-27 00:16 1.spice的USB重定向 1.1 介绍 使用usb重定向,在clie ...

  6. USB/IP项目总结

    青云最近推出了云桌面功能,用户可以像使用本地计算机一样访问远程主机,支持USB重定向,不禁让我想起了2年前调试的一个开源项目USB/IP,当时还用英文写了一个总结性文档,放在这里方便以后查看.     ...

  7. spice在桌面虚拟化中的应用系列之三(USB映射实现,SSL加密,密码认证,多客户端支持)

    本系列其它文章 spice在桌面虚拟化中的应用系列之一(spice简介,性能优化等) spice在桌面虚拟化中的应用系列之二(Linux平台spice客户端的编译安装,支持USB映射) 1.spice ...

  8. USB fuzzing

    简介 最近看一些USB fuzzing方面的东西,总结一下.主要是软件方面的工作. vUSBf 文章在这里:https://www.blackhat.com/docs/eu-14/materials/ ...

  9. 开源虚拟化KVM(一)搭建部署与概述

    一,KVM概述 1.1 虚拟化概述 在计算机技术中,虚拟化意味着创建设备或资源的虚拟版本,如服务器,存储设备,网络或者操作系统等等 [x] 虚拟化技术分类: 系统虚拟化(我们主要讨论的反向) 存储虚拟 ...

随机推荐

  1. BZOJ 2179FFT快速傅立叶

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2179 题目大意:给出两个n位10进制整数x和y,你需要计算x*y. 题解:FFT,不会的可以 ...

  2. django的HTTPREQUEST对象

    Django使用request和response对象 当请求一张页面时,Django把请求的metadata数据包装成一个HttpRequest对象,然后Django加载合适的view方法,把这个Ht ...

  3. 使用原始XML资源——使用原始XML文件

    下面为示例程序添加一个原始的XML文件,将该XML文件放到/res/xml目录下,该XML文件的内容很简单.XML资源的内容如下. 程序清单:  \res\xml\books.xml文件 <?x ...

  4. m3u8的浏览器播放器

    前几天花了点时间研究了下怎么在浏览器中播放m3u8的视频地址,最后终于找到了两个开源的东西可以正常播放,稍稍整理下方便后来人. m3u8是什么就不介绍了,现在所有视频网站基本都是通过m3u8的方式来播 ...

  5. jQuery软键盘插件

    1.html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.or ...

  6. easyui弹出窗关闭前调用确认窗口,先关闭页面后调用弹出窗口

    弹出窗关闭的时候提示是否关闭,同时进行一些对应的方法调用, 然而在进行页面关闭调用的时候,往往页面关闭了,才弹出确认对话框, $.messager.confirm和panel的onBeforeClos ...

  7. gcd-函数

    在网上看到了这个函数 int gcd(int a,int b){if(a==0) return b; if(b==0) return a; return gcd(b,a%b);} 是求最大公约数的 有 ...

  8. Javascript数据类型共有六种

    Javascript数据类型共有六种 /* var box; alert(typeof box); // box是Undefined类型,值是undefined,类型返回的字符串是undefined ...

  9. 框架基础:ajax设计方案(三)--- 集成ajax上传技术 大文件/超大文件前端切割上传,后端进行重组

    马上要过年了,哎,回家的心情也特别的激烈.有钱没钱,回家过年,家永远是舔舐伤口最好的地方.新的一年继续加油努力. 上次做了前端的ajax的上传文件技术,支持单文件,多文件上传,并对文件的格式和大小进行 ...

  10. ASP.NET Zero--15.一个例子(8)商品分类管理-权限控制

    1.添加权限常量 打开文件AppPermissions.cs [..\MyCompanyName.AbpZeroTemplate.Core\Authorization\AppPermissions.c ...