我很好奇 USB 设备识别在 Windows 中是如何工作的。我想它是这样的:
我对吗?如果是这样,那仍然会留下一些问题。
任何人都可以解释这个过程是如何真正起作用的吗?另外,其他操作系统是否以不同的方式执行此操作?
RBe*_*eig 27
USB 总线的物理设计使得插入(和移除)插头的行为可以被主机控制器识别。当这个“plug”事件发生时,主机控制器通知它的设备驱动程序扫描总线并要求每个设备识别自己。
所有 USB 设备都包含有关设备的信息集合,称为描述符。使用相同的命令从所有设备检索设备描述符。这允许 USB 总线本身的设备驱动程序有效地询问新连接的设备它是什么,并期望得到合理的响应。
在所有描述符中,只有少数直接用于将驱动程序匹配到大多数设备。这是因为 USB 定义了设备类,通常每个设备类的系统驱动程序足以处理声称属于该类的任何设备。
例如,所有键盘都将声称属于 HID(人机界面)类,鼠标、平板电脑和游戏控制器也是如此。HID 类有几个子类(键盘、鼠标等),因此每个子类都以预期的方式处理。
大多数类似磁盘的设备都声称属于大容量存储类,系统驱动程序也只适用于这些设备。
除了类和子类之外,描述符还包括供应商 ID (VID)、产品 ID (PID) 和修订版。供应商 ID 由标准委员会分配(主要是按发布顺序,但有些公司有特殊要求:例如,intel 是 0x8086)。产品 ID 由每个供应商分配,并且 VID 和 PID 的组合对于每个发布的产品必须是唯一的。
首次安装设备时,会以可预测的方式使用 VID、PID、修订版、类和子类来选择加载的设备驱动程序。具有供应商和产品特定名称使供应商可以自定义设备,否则可能会(几乎)由库存系统驱动程序正确处理。
另一个重要的描述符是设备序列号。如果设备具有序列号,则即使使用不同的物理 USB 端口,再次插入时也可以对其进行识别和处理。这对于存储设备很重要,以便为它们分配相同的驱动器号,对于串行端口适配器和调制解调器等设备,以便为它们指定相同的 COM 端口名称。
这整个过程记录在MSDN 上,但详细信息散布在各个地方。
问题 :
Lunatik 有答案的第一部分,即所谓的总线驱动程序如何找到设备。
| 归档时间: |
|
| 查看次数: |
18853 次 |
| 最近记录: |