3

我有一堆 USB 串行设备(准确地说是:http: //plugable.com/products/PL2303-DB9),如果可能的话,我想通过拔出/“跟踪”它们replug 事件(即使 replug 事件指向不同的 USB 端口)。

驱动程序似乎是从它们的 USB 位置创建它们的 BSD 拨入/标注/tty 设备名称,但这取决于您将它们插入的 USB 端口。

查看插入两个单独 USB 端口的两个相同设备之间的 IOKit 属性字典,唯一的区别在于、 、sessionIDUSB Address似乎源自. 似乎每次会话都会发生变化(即每次拔出/重新插入后都不同)。locationIDportNumlocationIDsessionID

由于这些设备都返回0iSerialNumber我想我在这里基本上搞砸了,但我想我会把它扔在这里,看看是否有人有任何想法。是否有一些通用工具可以将一些“令牌”写入我可以读回的 USB 设备?我在 USB 标准的快速浏览/谷歌搜索中没有看到任何东西,但这样的设施肯定会奏效......

有任何想法吗?

4

2 回答 2

6

不幸的是,没有很好的方法来做到这一点(如果你想出一个,请在此处发布,因为我多年来一直试图想出一个)。

正如您所推测的那样,问题在于设备本身没有唯一的ID。如果设备具有唯一的序列号(在 IOKit 属性字典中公开),您可以处理它,并且如果设备上有一点用户可寻址的闪存可以访问,那么您可以写入它,但作为据我所知,没有。

到目前为止,我唯一能做的就是跟踪位置并告诉人们如果他们希望设备被识别,就将设备连接到相同的端口。但是,就我而言,我确实有一组可预测的设备,它们自己处理序列号,所以我可以通过直接查询串行线另一端的设备来做一些事情。

于 2013-05-05T10:57:41.367 回答
0

USB 串行驱动程序框架不强制(或至少强烈建议)所有驱动程序/dev使用设备“位置 ID”创建文件,这太糟糕了。

这似乎是用于通过设备连接到的物理端口来识别设备的逻辑通用值。它始终提供,始终唯一,始终特定于物理端口,在重新启动后不会更改,如果再次重新连接到同一物理端口,则不会在移除和重新插入时更改,并且不依赖于可选具有这样的序列号。

同时,对于那些没有序列号的设备,例如 Prolific PL2303,当前的驱动程序(1.6.1,又名 1.6.0,在 10.13.6 上)/dev/cu.usbserialN每次移除和重新连接设备时都会组成一些随机名称(即使相同的端口),并且通常它也会在重新启动后发生变化。

例如,这是我插入外部集线器的三个 USB 串行设备:

    USB2.0 Hub:

      Product ID: 0x0610
      Vendor ID: 0x05e3  (Genesys Logic, Inc.)
      Version: 92.12
      Speed: Up to 480 Mb/sec
      Manufacturer: GenesysLogic
      Location ID: 0x26400000 / 3
      Current Available (mA): 500
      Current Required (mA): 100
      Extra Operating Current (mA): 0

        USB-Serial Controller:

          Product ID: 0x2303
          Vendor ID: 0x067b  (Prolific Technology, Inc.)
          Version: 3.00
          Speed: Up to 12 Mb/sec
          Manufacturer: Prolific Technology Inc.
          Location ID: 0x26430000 / 8
          Current Available (mA): 500
          Current Required (mA): 100
          Extra Operating Current (mA): 0

        USB-Serial Controller:

          Product ID: 0x2303
          Vendor ID: 0x067b  (Prolific Technology, Inc.)
          Version: 3.00
          Speed: Up to 12 Mb/sec
          Manufacturer: Prolific Technology Inc.
          Location ID: 0x26420000 / 7
          Current Available (mA): 500
          Current Required (mA): 100
          Extra Operating Current (mA): 0

        FT232R USB UART:

          Product ID: 0x6001
          Vendor ID: 0x0403  (Future Technology Devices International Limited)
          Version: 6.00
          Serial Number: A603YGV3
          Speed: Up to 12 Mb/sec
          Manufacturer: FTDI
          Location ID: 0x26410000 / 6
          Current Available (mA): 500
          Current Required (mA): 90
          Extra Operating Current (mA): 0
于 2018-08-13T20:25:13.030 回答