You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为USB设备添加自定义属性,以便通过udev规则区分设备?

给缺失序列号的USB设备添加自定义标识以通过udev规则区分

首先明确:不存在你设想的那种直接写入ATTRS{}属性的工具,因为ATTRS{}是从硬件或sysfs读取的固有属性,无法随意修改。但可以通过以下几种方式实现设备区分的需求:

方法1:利用现有路径差异编写udev规则

从你提供的/dev/serial/by-id路径能看到两台设备的明显差异:正常设备路径带序列号,异常设备对应位置是短横线。直接基于这个特征写udev规则即可:

创建规则文件/etc/udev/rules.d/99-ftdi-devices.rules,内容如下:

# 匹配带序列号的正常FTDI设备,创建自定义软链接并标记环境变量
SUBSYSTEM=="tty", KERNEL=="ttyUSB*", ENV{ID_SERIAL}=="FTDI_DEVICE-NAME_*[0-9A-F]*", SYMLINK+="ttyFTDI_Normal", ENV{FTDI_TYPE}="normal"

# 匹配无序列号的异常FTDI设备
SUBSYSTEM=="tty", KERNEL=="ttyUSB*", ENV{ID_SERIAL}=="FTDI_DEVICE-NAME_-*", SYMLINK+="ttyFTDI_Abnormal", ENV{FTDI_TYPE}="abnormal"

可以用udevadm info -n /dev/ttyUSB0查看ENV{ID_SERIAL}的具体值,调整规则里的匹配字符串。

写完规则后,执行udevadm control --reload-rules && udevadm trigger生效。

方法2:通过udev脚本设置临时自定义sysfs属性

如果需要给设备添加自定义的可读取属性,可以通过udev调用脚本,在sysfs目录下创建临时属性(设备断开后会消失):

  1. 创建脚本/usr/local/bin/set-ftdi-attr.sh,赋予执行权限chmod +x:
#!/bin/bash
# 检查设备是否缺失序列号
if [[ -z "$ID_SERIAL_SHORT" ]]; then
    echo "abnormal" > /sys/class/tty/$KERNEL/ftdi_type
    chmod 644 /sys/class/tty/$KERNEL/ftdi_type
else
    echo "normal" > /sys/class/tty/$KERNEL/ftdi_type
    chmod 644 /sys/class/tty/$KERNEL/ftdi_type
fi
  1. 编写udev规则调用该脚本:
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", RUN+="/usr/local/bin/set-ftdi-attr.sh"

替换idVendor和idProduct为你的FTDI设备实际ID,可通过lsusb命令查看。

方法3:给FTDI设备永久烧录序列号(最彻底)

大部分FTDI芯片支持写入自定义序列号,这是一劳永逸的解决方法:

  • 使用FTDI官方工具ft_prog或开源工具minipro,连接异常设备后读取芯片信息,写入自定义序列号(比如MYFTDI001),保存后重启设备。之后就能像正常设备一样通过ATTRS{serial}字段区分。

内容的提问来源于stack exchange,提问作者tnsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 21:32:23