3

我正在从事一个项目,该项目涉及自动检测从 OS X 系统插入和拔出的 USB 和火线设备。对于给定的设备,系统需要在插入设备时识别设备(无论哪个端口)并加载特定于设备的捆绑包来处理它。

实现这项工作的关键显然是每个设备的唯一标识。我知道 USB 设备是由供应商 ID 和产品 ID 字段的组合标识的,但这不提供唯一 ID,只提供设备的“种类”。如果我有两个相同的设备并将它们都插入计算机,我想要一些方法来区分它们。是否有一种通用且可靠的方法来执行此操作,也许使用 USB 描述符中的其他字段?

一个相关的问题,这对 USB 串行端口有什么作用?假设我插入了两个相同品牌/型号的 USB 串行端口。OS X 应该在 /dev 树中为它们提供唯一的 inode。但是,假设它称它们为 /dev/usbserial1 和 /dev/usbserial2。如果我然后拔下端口并仅插入其中一个,该端口是否会被赋予与以前相同的名称,还是只会插入 /dev/usbserial1(因为它是唯一的)端口?

火线设备也有同样的问题,尽管我认为火线设备应该有 64 位 GUID。在这种情况下,我正在寻找某人来验证使用 GUID 进行火线设备识别是否可靠。换句话说,如果我插入两个相同品牌和型号的独立相机,我会期望它们有不同的 GUID 吗?

我知道我可以使用适当的硬件测试其中的一些,但我目前没有多个硬件,所以我希望有人至少知道上述问题的一些答案。

4

2 回答 2

1

幸运的是,除了 VID/PID 组合之外,您的 USB 设备还应该有唯一的序列号。如果要枚举IOUSBDevice对象,请查看USB Serial Number属性。

于 2011-06-09T10:11:24.763 回答
0

在 Windows 上,Microsoft 通过以下方式记住设备特定的设置:

  • 设备的序列号(USB 设备描述符中的 iSerialNumber 字段),如果可用
  • 或者,通过设备的“路径”:它的总线(即它插入的集线器等)+ USB VID 和 PID

没有序列号,USB 设备几乎无法区分。您可以区分不同的 USB 磁盘驱动器,但对于没有任何类型的非易失性存储器的设备(许多 USB 设备属于此类),它们只是无法区分,因此您只需要尽最大努力去做用户期望。

于 2011-06-09T15:53:26.147 回答