USB设备识别如何工作?


16

我很好奇USB设备识别在Windows中如何工作。我这是这样的:

  • 当您插入设备时,它会告诉Windows“这是我的设备ID以告诉您我是什么”
  • Windows会查看是否已安装任何与该设备ID匹配的驱动程序。该驱动程序可能会告诉Windows设备应称为什么-例如“ BlackBerry Curve”或“ Canon Printer”
  • 如果是这样,它将以某种方式将该设备与该驱动程序关联
  • 否则,它将在线寻找匹配的驱动程序(如果允许的话)

我对吗?如果是这样,那仍然存在一些问题。

  • 当您安装驱动程序时,它们会去哪里?它们是否在文件夹中,还是被添加到注册表中?
  • Windows第一次识别设备,思考并最后说“您的新设备已安装并可以使用”时,它在做什么?
  • Windows在哪里寻找丢失的驱动程序?是否在自己的数据库中?设备制造商是否将驱动程序提交给Microsoft以包含在其中?

谁能解释这个过程是如何工作的?另外,其他操作系统是否会对此有所不同?

Answers:


24

USB总线经过物理设计,因此主机控制器可以识别插入(和拔出)插头的行为。当发生“插入”事件时,主机控制器会通知其设备驱动程序,该设备驱动程序将扫描总线,并要求每个设备标识自己。

所有USB设备都包含有关该设备的信息的集合,称为描述符。使用相同的命令从所有设备检索设备描述符。这使USB总线本身的设备驱动程序可以有效地询问新连接的设备是什么,并期望获得合理的响应。

在所有描述符中,只有少数几个直接用于将驱动程序与大多数设备进行匹配。这是因为USB定义了设备类别,通常每种设备类别的系统驱动程序足以处理声称属于该类别的任何设备。

例如,所有键盘都将属于HID(人机界面)类,例如鼠标,平板电脑和游戏控制器也属于此类。HID类具有几个子类(键盘,鼠标等),因此每个子类都可以按预期方式进行处理。

大多数类似磁盘的设备将声称属于Mass Storage类,而系统驱动程序也适用于这些设备。

除了类和子类之外,描述符还包括供应商ID(VID),产品ID(PID)和修订版。供应商ID由标准委员会分配(主要是按照发布的顺序,但是有些公司有特殊要求:例如Intel是0x8086)。产品ID由每个供应商分配,并且VID和PID的组合对于每个发布的产品必须是唯一的。

首次安装设备时,将以可预测的方式使用VID,PID,修订版,类和子类来选择要加载的设备驱动程序。具有供应商和产品的特定名称,使供应商可以自定义库存系统驱动程序可以正确(几乎)处理的设备。

另一个重要的描述符是设备序列号。如果设备具有序列号,则即使再次使用不同的物理USB端口,也可以在再次插入设备时对其进行识别和处理。这对于存储设备非常重要,这样它们就可以分配相同的驱动器号;对于串行端口适配器和调制解调器之类的设备,必须为其赋予相同的COM端口名称。

MSDN记录了整个过程,但是细节分布在各个地方。


感谢您的系统解释。很有意思!
内森·朗2009年

3
当我编写用于Windows的第一个设备驱动程序时,花了几个小时从文档和样本中收集这些细节,这是一个意外的任务。我很高兴分享这个结果……
RBerteig

7

问题:

  • 目录: 驱动程序安装在2个目录中。在大多数情况下,正在运行的部分已安装到%RootDir%\ system32,设备信息部分已安装到%RootDir%\ inf。在inf目录下,为安装/注册的驱动程序创建一个oem * .inf文件。(*是数字)。在Vista下,安装尚未遇到的设备时,驱动程序将复制到%RootDir%\ system32 \ driverstore目录中,以作为参考。
  • 注册表: 驱动程序被安装为内核模式服务。为此,为驱动程序服务创建了某些注册表项。总线驱动程序下还有一个地方,相应的设备将获得单独的设备实例密钥。在该密钥中,设备具有对该设备当前使用的驱动程序的引用。
  • 设备“到达”:当总线驱动程序在其总线上找到新设备时,它将在其自己的密钥下创建一个密钥注册表,该注册表对应于唯一的设备实例ID,该ID可用于唯一地标识系统上的设备。如果该密钥已经存在,则总线驱动程序将尝试加载此节点引用的设备。当此节点不存在或驱动程序未加载时,系统将通过扫描%RootDir%\ inf下已注册的设备驱动程序来尝试查找该设备的兼容驱动程序。列举并排序符合该设备条件的驱动程序。然后选择最佳驱动程序并为该设备加载。
  • 驱动程序搜索:首先在inf目录中搜索驱动程序。如果找不到驱动程序,则Windows会询问用户是否可以提供驱动程序,或者是否应该在Microsoft服务器上查找。驱动程序制造商可以将其驱动程序提交到Microsoft设备驱动程序服务器上。

Lunatik回答的第一部分是所谓的总线驱动程序如何找到设备。


3

我想推荐一本关于USB的好书:

  • USB Complete作者:Jan Axelson

我知道您没有要求这样做,但是最好了解一些应该连接的USB设备。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.