Ⅰ. Foundation

在介绍USB虚拟化之前,我们先了解下关于USB的基础知识。

USB,即通用串行总线。作为一种计算机外设,是一种外部总线的标准,用于规范主机与设备之间的通信与连接。USB系统架构分为三个部分,USB主机控制器/根集线器(又名,USB总线接口),USB集线器,USB设备。

USB主机控制器接在PCI/PCIe 总线

Ⅱ. USB的枚举和传输

主机通过USB设备枚举的过程来判断和管理设备的连接和断开。1、USB设备连接至集线器的USB端口后,即就是我们笔记本上面的USB接口,集线器会使用其中断IN管道向主机报告设备的插入事件。

2、主机知道设备接入集线器后,向集线器发出查询请求以了解更多信息。当确认有设备接入总线,主机发出查询请求复位设备,在这期间集线器会确定设备的传输速率并向主机报告。复位结束后USB设备进入缺省状态,并可使用缺省设各地址对管道0的控制事务做出响应。

3、主机向设备发送USB协议规定的请求描述符命令,读取该描述符的前8个字节,以取得却缺省控制管道所支持的最大数据包长度。

4、主机发送配置地址命令分配一个唯一的地址给设备。设备读取这个请求,返回一个确认,并保存新的地址。从此开始所有通信都使用这个新地址。

5、主机向新地址设备重新发送请求描述符命令,读取其设备描述符,以了解该设备的总体信息。

6、主机向设备循环发送请求配置命令,以读取全部配置信息。获得字符串描述比如厂商、产品描述、型号等。

7、主机根据Device 和应答信息,为设备选择一个合适的USB设备驱动程序。

8、加载USB设备驱动后,主机将发出SetConfiguration(x)请求为该设备选择配置。如果配置成功,USB设备进入设备配置状态,可以和主机进行数据通信。

当USB设备连接到USB总线后,设备便可以和主机进行通信。通信的过程中,自上而下要经过四个部分:主机应用程序

USB总线驱动程序(Bus Driver)

USB主控制器驱动程序(Host Driver)

USB功能设备(Device Driver)

主机应用程序--->发送数据传输请求(IRP)--->USB总线驱动程序--->响应IRP,数据转化具有USB协议格式的事务处理--->USB主控制器驱动程序--->将这些事务处理建立成事务列表,同时要求不能超过USB带宽--->USB主控制器读取到事务列表并将事务转化为信息包,发送到USB总线接口--->根集线器--->USB设备收到这些信息后,由USB的SIE引擎自动解码信息包--->将其解包后放入指定端点的接收缓冲区内,由芯片固件对其进行处理。

参考^PCI总线有独立的地址空间,它与处理器地址空间是隔离的

usb禁止重定向_USB虚拟化与重定向(一)相关推荐

  1. Windows重定向技术【文件重定向与注册表重定向】

    目录 重定向技术 重定向技术适用版本: 重定向技术产生原因:为了确保32位程序能够顺利运行 一:重定向-文件重定向 文件重定向原因:为了确保32位程序能够顺利运行 文件重定向产生场景: 文件重定向具体 ...

  2. php 302临时重定向,php实现301永久重定向和302临时重定向

    对于许多站点而言,以域名365mini.com为例:用户在浏览器中输入网址http://www.365mini.com/或者http://www.365mini.com/index.php,实际上访问 ...

  3. linux输出重定向跨服务器,【一看就懂,一听就会】Linux重定向详解——输出重定向...

    一.啥是重定向?? Linux重定向定向分为两种,一种输入重定向,一种是输出重定向: 从字面上理解,输入输出重定向(重新定义方向) 就是「改变输入与输出的方向」的意思. 总结: 输入方向就是我们人类从 ...

  4. 虚拟服务器设置重定向,什么是域名重定向,怎样在虚拟主机设置域名重定向

    域名重定向的基础知识 域名重定向有多种用途.如果您已经将您的网站移动到一个新的域,或者已经更改了您的某些页面的URL结构,那么现在是利用域名重定向的时候了. 掌握如何将域名重定向到另一个域在您的网站管 ...

  5. python 重定向输入_python怎么重定向输入

    匿名用户 1级 2017-05-31 回答 控制台重定向 最简单常用的输出重定向方式是利用控制台命令.这种重定向由控制台完成,而与Python本身无关. Windows命令提示符(cmd.exe)和L ...

  6. php重定向和伪静态,PHP重定向与伪静态的区别详解

    伪静态是SEO重要的方法,通过重定向来实现,并且可以通过重定向来隐藏网站的技术,过滤异常访问.本课分为两部分,前半部分详细介绍Apache重定向的基础知识,后半部分通过多个实际案例再次加深对重定向的理 ...

  7. php重定向什么意思,PHP重定向与伪静态区别

    什么是伪静态 伪静态是相对真静态来讲 伪静态只是把URL改成静态形式,实际上还是动态网页 伪静态有着真静态一样的SEO 什么是重定向(很常用重点学习) 将网络请求重新定一个方向,转到别的位置 分为内部 ...

  8. php重定向返回200,PHP重定向回上一页

    我为login.php页面所做的是,如果用户已登录,他将被重定向到first.php页面. session_start(); if(isset($_SESSION['usr']) && ...

  9. php如何实现302重定向,php 301 302重定向实现代码

    很多网站的站长们都喜欢把前台的顶级域名301重定向到带有www的二级域名上,或者带www的二级域名重定向到顶级域名上,以集中权重.而在网站的后端设计中,一些页面的提交跳转则需要使用到302重定项.关于 ...

  10. 【已阅】printf,echo,cat指令与输出重定向>,输入重定向<与追加重定向>>等

    printf指令的功能(+输出/追加重定向) 语法:printf "格式化数据" (>/>>重定向) 功能:格式化输出(默认往显示器文件且不带换行符) 实例演示 ...

最新文章

  1. leetcode:2680 Remove Duplicates from Sorted Array 删除数组中的重复元素
  2. 三次样条插值三弯矩matlab_三次样条(cubic spline)插值
  3. 1.2 离散时间信号-采样
  4. 设计新Xlator扩展GlusterFS[转]
  5. 自制爬虫例--抓取网站图像与简介
  6. ios uilabel 根据文字 计算宽度 高度
  7. 复杂电路简化经典例题_一天搞定考试系列之电路原理(3)
  8. 基于JAVA+SpringMVC+MYSQL的ktv预订管理系统
  9. 70个经典的 Shell 脚本面试问题
  10. 【Twitter】时序图神经网络
  11. 人民币发行量比美元还大吗?
  12. 【计算机网络笔记】数据链路层(封装成帧,差错检测,可靠传输)
  13. 验证码~正则表达式【整理汇总】
  14. linux下od命令的使用教程,linux od命令详解
  15. win10系统启动wifi服务器,windows10系统下开启wifi共享的两种方法
  16. 微信小程序之将base64图片转为本地图片
  17. cocos如何在游戏中动态设置横竖屏
  18. C++:实现量化Integration积分测试实例
  19. 鳄鱼mt4复盘助手_教你一个正确的MT4复盘小技巧
  20. android webview第三方框架,Android 中使用第三方 WebView,腾讯X5浏览器

热门文章

  1. 华为android解锁,华为bootloader怎么解锁 华为手机bootloader解锁教程
  2. [深度学习] fast-reid入门教程
  3. #金项奖获奖项目专题# | 京东闪付---快人一步
  4. mysql8忘记密码后重置密码
  5. Fastjson 远程命令执⾏漏洞
  6. 电脑小技巧系列——快捷打开程序应用
  7. 线性调频信号与脉冲压缩
  8. 常用 ASCII 码整理
  9. 输入一行数字、数字之间用空格隔开python_Python 实现一行输入多个数字(用空格隔开)...
  10. pyhive python连接hive