USB 设备识别如何工作?

USB 设备识别如何工作?

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

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

我说得对吗?如果是这样,那仍然留下一些问题。

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

有人能解释一下这个过程到底是如何进行的吗?另外,其他操作系统是否也有不同的做法?

答案1

USB 总线的物理设计使得主机控制器能够识别插入(和拔出)插头的动作。当发生此“插入”事件时,主机控制器会通知其设备驱动程序,设备驱动程序会扫描总线并要求每个设备进行自我识别。

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

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

所有键盘都声称属于 HID(人机界面)类,鼠标、平板电脑和游戏控制器也是如此。HID 类有多个子类(键盘、鼠标等),因此每个子类都会以预期的方式进行处理。

大多数类似磁盘的设备都声称属于大容量存储类,并且系统驱动程序也适用于这些设备。

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

首次安装设备时,VID、PID、修订版本、类别和子类别会以可预测的方式用于选择要加载的设备驱动程序。有了供应商和产品特定的名称,供应商就可以自定义设备,否则,这些设备可能只能由普通系统驱动程序 (几乎) 正确处理。

另一个重要的描述符是设备序列号。如果设备有序列号,那么即使使用不同的物理 USB 端口,当再次插入时也可以识别和处理该设备。这对于存储设备很重要,因为这样它们会分配相同的驱动器号,对于串行端口适配器和调制解调器等设备也很重要,因为这样它们会分配相同的 COM 端口号。

整个过程记录在微软但细节分散在各个地方。

答案2

问题 :

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

Lunatik 给出了答案的第一部分,即所谓的总线驱动程序如何找到设备。

答案3

给大家推荐一本关于usb的好书:

  • Jan Axelson 撰写的《USB 完整版》

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

相关内容