第一期中,我们一起简要的看了下传统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. Centos5.5系统备份

    使用root用户切换到根目录 然后,使用下面的命令备份完整的系统: tar cvpzf backup.tgz / --exclude=/proc --exclude=/lost+found --exc ...

  2. vmwvare 网卡设置讲解

  3. 几种常用的控件(下拉框 可选框 起止日期 在HTML页面直接读取当前时间)

    下拉框 <div class="form-group">                        <label class="col-xs-3 c ...

  4. Handler消息传递机制——Handler类简洁

    Handler类的主要作用有两个: 在新启动的线程中发送消息. 在主线程中获取.处理消息. 上面的说法很简单,只要分成两步即可:在新启动的线程中发送消息:然后在主线程上获取.并处理消息.但这个过程涉及 ...

  5. 结合social relationship的推荐系统(持续更新)

    最近看了一些结合社会关系的推荐系统,把论文罗列一下: (TidalTrust) Generating predictive movie recommendations from trust in so ...

  6. Everything开机自启

    第一步:关闭自动启动 在设置中关闭everything开机自动启动. 第二步:创建计划任务 点击“开始”—“任务计划程序”—“创建任务” 首先设置任务的名称等,注意一定要勾选“使用最高权限运行”. 然 ...

  7. 二分查找 - vb.net

    Module Module1    Sub Main()        Dim array(999) As Integer        Dim searchValue As Integer      ...

  8. python中关于局部变量与全局变量的认识

    1.函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义一个局部变量,不管全局域中有没有用到该变量名,函数中使用的将是局部变量,例如: num = 100 def func(): num = ...

  9. Nginx反向代理、CORS、JSONP等跨域请求解决方法总结

    由于 Javascript 同源策略的存在使得一个源中加载来自其它源中资源的行为受到了限制.即会出现跨域请求禁止. 通俗一点说就是如果存在协议.域名.端口或者子域名不同服务端,或一者为IP地址,一者为 ...

  10. webpack入门+react环境配置

    小结放在前:这篇文章主要是为下一篇的react提前铺好路,webpack是一个前端资源模块化管理和打包工具,说白了就是方便我们管理自己的常用的一些代码,比如你开发中用到sass以及jade同时用到es ...