我有 2 个相同的设备,我想使用 udev 规则来区分它们。
但是,在对设备执行以下操作后,我发现 1 个设备的给定硬件中缺少序列号。
对于每个设备,该序列号应该是唯一且可见的。
当仅连接好的时,它会显示序列号,
$ udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0) | grep -i Serial
ATTRS{serial}=="XXXXXXXX"
仅连接有故障的一台时,不显示序列号。
$ udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB1) | grep -i Serial
$
当仅连接好的时:
$ ls /dev/serial/by-id/*
/dev/serial/by-id/usb-FTDI_DEVICE-NAME_XXXXXXXX-if00-port0
仅连接故障一侧时:
$ ls /dev/serial/by-id/*
/dev/serial/by-id/usb-FTDI_DEVICE-NAME_-if00-port0
那么有没有办法向这些设备添加自定义属性,以便我可以使用 udev 规则区分它们?
类似于要执行的命令或程序之类的东西
$ attribute_writing_binary /dev/tty_device_path "ATTRS{custom_attribute}=value"
注意:到目前为止,我所查看的资源和解决方案都是基于设备连接到哪个端口的规则。我的意图是写入设备的键值对字符串持久保留在设备本身上,并在连接到另一台计算机时保留这些值,因此我可以在多个硬件实例上部署,并且可以分配标识。
答案1
您的设备显示为/dev/serial/by-id/usb-FTDI_DEVICE-NAME_*
设备这一事实表明,您的设备中使用了 FTDI USB 转串口转换器芯片(或其假冒克隆芯片)。
据我了解,正品FTDI USB转串口芯片不支持自定义属性分配;但是,它们确实支持自定义供应商/产品标识符和/或序列号的可选分配。此功能旨在在制造要集成芯片的设备时使用,并且这些参数可能只能设置一次,此后永久。
配置FTDI芯片的工具叫做FT_PROG
,它是可在此处获得,尽管仅适用于 Windows。
这是它的用户指南。
请注意,近年来,假冒(假冒)USB 转串口芯片似乎一直是 FTDI 的一个大问题,以至于他们似乎曾经遇到过发布了一个驱动程序版本,该版本将主动尝试检测假冒产品并导致它们永久失败。
该FT_PROG
工具旨在在制造包含此类芯片的设备时使用,因此在芯片制造商看来,它可以更好地禁用其发现的任何假冒芯片:如果在设备制造过程中禁用了假冒芯片过程中,它只会伤害使用假冒芯片而不是正品芯片的制造商,而不会伤害设备的最终用户。
因此,如果您尝试使用 FT_PROG 为您的设备配置唯一的序列号,并且其中一个设备包含假芯片,该程序存在禁用您设备中的芯片的风险。
某些(较旧)版本的 FTDI USB 转串口芯片似乎还需要一个小型外部 EEPROM 芯片来支持可编程标识符,如果您的“故障”设备的 EEPROM 出现故障或丢失,您将无能为力它在软件层面。