USB/IP
我这段时间正在学习USBIP方面的知识, 这篇文章是我学习国外的论文之后自己做出的总结
1. 介绍
在资源管理的机制之中, 使用的关键的技术就是网络透明的设备共享机制, 通过该机制, 可以和其他计算机的设备进行无缝交互
在之前的技术之中, 已经提出了很多的设备的共享技术, 但是设备访问接口的网络透明性并没有得到充分的解决
注:
网络的透明性:指的是不关注内部的具体的传输的细节, 只关注两端
这篇文章介绍的透明的设备共享机制是USB/IP, 这个机制的主要的组件是虚拟主机控制器接口驱动器, 它是作为外围总线的驱动器, 由于大多数应用程序或者是设备驱动程序在访问这些外部设备的时候, 也都是通过接口来访问的, 而且接口一般都是位于操作系统的最底层。
USB/IP的设备共享技术相比于传统的方法, 具有如下的一些的优点:
-
计算机可以访问共享设备的全部的功能
-
只需要几个额外的驱动程序即可
-
不同操作系统的设备也可以相互共享设备
在usb2.0规范之中, 主机以3种传输速度 —— 分别是1.5Mb/s, 12Mb/s, 480Mb/s和4种传输的类型 —— 控制, 批量, 中断和同步, 这些传输都是由一个硬件 —— usb host controller进行控制。
2. 架构
下图是大多数操作系统的usb驱动模型:
注:
在设备驱动栈的最底层是usb hcd, 负责将主机控制器的I/O接口抽象到适用于所有的usb驱动的通用API
usb pdd负责控制每个usb设备
关键的设计是:usb主机控制器和usb hcd(usb 主机控制器驱动)将为usb pdd提供输入输出数据,尽管一个usb和usb pdd是使用buffer去传输一些数据以及一些回复的数据, 但是usb hcd并不会去区分这2种数据。
在usb设备驱动之中, usb request block(即URB)是以一种独立于控制器的形式去提供usb的输入和输出, 这些输入和输出包括:
- 缓冲区
- 方向
- 速度
- 类型
- 目标的地址
- 完成处理器
一个设备驱动或者说应用去控制一个usb设备的时候, 是按照如下的方式:
-
一个usb pdd将来自另外一个驱动器的I/O请求转化成URB, 并且将这些URB提交给usb hcd