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