是否可以通过设备ID而不是tty。*端口访问USB串行端口?


17

在Linux USB串行设备上,为其串行端口创建两个别名:
/dev/tty*/dev/serial/by-id/<my_usb_device_id>

OSX上是否可以通过USB设备ID识别串行端口?在System Profiler和使用ioreg -p IOUSBI时都可以看到该ID,但这并不能使我更接近使用该ID进行连接。

我们正在开发几种硬件,每次连接其他设备时都需要进行测试,这很痛苦,因为我需要验证测试软件的串行端口配置,因为在OSX上,tty.*端口名称取决于计算机上的端口,不在设备上。运行linux的人很高兴使用/dev/serial/by-id/<my_usb_device_id>端口自动区分不同的设备。

Answers:


2

对于我拥有的FTDI桥接器,序列号已经出现在设备名称中:在Linux上以及macOS 上,它都显示为/dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DA00AG57-if00-port0(对应于some /dev/ttyUSBx)。(请参阅/programming//a/8632603/4896937了解和之间的区别。)/dev/cu.usbserial-DA00AG57/dev/tty.usbserial-DA00AG57tty.*cu.*

不幸的是,多产桥我有,像你这样的问题仍然适用:表现为一个设备/dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0(不包含序列号)仅仅是/dev/cu.usbserial/dev/tty.usbserial在Mac OS(甚至没有系统概述给出了一个序列号的话)。谁知道如果再插入第二个会发生什么。

也许有一个更一般的答案是与供应商无关的,但是要警告某些设备可能不会报告序列号。


对我来说,它们显示为/dev/tty.usbmodemFD121和/dev/tty.usbmodemFA131。该数字直接取决于笔记本电脑上的USB端口。系统信息显示了由其固件设置的设备的正确ID。这两个系列都是由STM32F2 / F4处理器创建的。
约翰·约翰(Johan)

2

实际上,您应该能够使用找到从设备ID /序列号到串行端口名称的映射ioreg。试试这个命令:

ioreg -r -c IOUSBHostDevice -l

它将打印所有USB主机设备,并从每个设备的子树中打印出所有属性。您应该能够根据其ID或序列号在顶层找到设备。找到它之后,您应该可以浏览其子树,并最终找到class对象IOSerialBSDClient。这将包含IODialinDevice您想要的属性。

如果然后要以编程方式执行此操作,则可以将-a选项添加到ioreg命令,该命令将输出上述输出的plist版本。然后,您可以使用诸如之类的库对此进行解析plistlib

您可能会发现使用IORegistryExplorer应用程序来帮助可视化它很有帮助,因为完整的ioreg输出有点难以阅读!这可在XCode的“硬件IO工具”包中找到,您可以通过在Apple开发人员网站上搜索下载内容来找到。这是我的设备上的外观:

IORegistryExplorer示例

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.