Macos 如何在断开连接时跟踪USB设备?

Macos 如何在断开连接时跟踪USB设备?,macos,usb,iokit,Macos,Usb,Iokit,我有一堆USB串行设备(准确地说是:),如果可能的话,我想在拔出/重新插入事件中“跟踪”它们(即使重新插入事件是到不同的USB端口) 驱动程序似乎从其USB位置创建BSD拨号/调出/tty设备名称,但这取决于您将其插入的USB端口 查看插入两个单独USB端口的两个相同设备之间的IOKit属性字典,唯一的区别在于sessionID、USB地址、locationID、portNum或似乎从locationID派生的值会话ID在每个会话中都会发生变化(即每次拔出/重新插入后都会不同) 由于这些设备都返

我有一堆USB串行设备(准确地说是:),如果可能的话,我想在拔出/重新插入事件中“跟踪”它们(即使重新插入事件是到不同的USB端口)

驱动程序似乎从其USB位置创建BSD拨号/调出/tty设备名称,但这取决于您将其插入的USB端口

查看插入两个单独USB端口的两个相同设备之间的IOKit属性字典,唯一的区别在于
sessionID
USB地址
locationID
portNum
或似乎从
locationID
派生的值<代码>会话ID在每个会话中都会发生变化(即每次拔出/重新插入后都会不同)

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


有什么想法吗?

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

正如您所猜测的,问题在于设备本身没有唯一的id。如果设备有唯一的序列号(在IOKit属性字典中公开),您可以处理它,如果设备上有一点用户可寻址的闪存,您可以访问,那么您可以对其进行写入,但就我所知,没有


到目前为止,我能做的唯一一件事就是跟踪位置,并告诉人们如果想要识别设备,就将设备连接到相同的端口。然而,在我的例子中,我确实有一组可预测的设备,它们自己处理序列号,所以我可以通过直接查询序列线另一端的设备来完成这一点。

可惜USB串行驱动程序框架不强制(或至少强烈推荐)所有驱动程序使用设备“位置ID”创建
/dev
文件

它似乎是用于通过设备连接到的物理端口标识设备的逻辑通用值。它总是提供的,总是唯一的,总是特定于物理端口的,在重新启动时不会更改,在重新连接到同一物理端口时在删除和重新插入时不会更改,并且不依赖于可选功能(如序列号)

同时,对于那些没有序列号的设备,例如多产的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