Android usb设备名为null 请求权限弹窗如何修改_地址空间


Ⅰ. Foundation

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

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

USB主机控制器接在PCI/PCIe 总线[1]上,USB集线器又接在USB主机控制器(根集线器)上,USB设备接在USB集线器上。所以,USB系统是一个典型的树形结构。树的根就是USB主机控制器。USB 主机控制器对挂载的所有USB设备采用分时共享机制,受响应时间的限制,整个USB系统最多只能支持7层。以USB主控为第一层,包括最底层的USB设备为第7层。

Ⅱ. 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总线后,设备便可以和主机进行通信。通信的过程中,自上而下要经过四个部分:

  1. 主机应用程序
  2. USB总线驱动程序(Bus Driver)
  3. USB主控制器驱动程序(Host Driver)
  4. USB功能设备(Device Driver)

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

参考

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