烟雨蒙蒙520 发表于 2025-3-24 16:03

多个 USB 设备识别混乱的问题。

在 Linux 下使用 udev 规则 绑定 EVB-LAN8670-USB 设备,并确保多个设备不会发生识别冲突,可以按照以下步骤进行:

1. 识别设备信息
首先,插入 EVB-LAN8670-USB 设备,并使用以下命令查找设备的详细信息:

bash
复制
编辑
udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)
或者查看 dmesg 输出:

bash
复制
编辑
dmesg | grep -i usb
或者:

bash
复制
编辑
lsusb -v | grep -i "EVB-LAN8670"
查找以下关键属性:

idVendor(厂商 ID)

idProduct(产品 ID)

serial(设备序列号,保证唯一性)

devpath 或 busnum(用于定位设备)

例如:

pgsql
复制
编辑
ATTRS{idVendor}=="0424"
ATTRS{idProduct}=="274e"
ATTRS{serial}=="000123456789"
2. 创建 udev 规则
在 /etc/udev/rules.d/ 目录下创建一个新规则文件,例如 99-lan8670.rules:

bash
复制
编辑
sudo nano /etc/udev/rules.d/99-lan8670.rules
添加如下内容:

bash
复制
编辑
SUBSYSTEM=="usb", ATTRS{idVendor}=="0424", ATTRS{idProduct}=="274e", ATTRS{serial}=="000123456789", SYMLINK+="evb-lan8670-1"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0424", ATTRS{idProduct}=="274e", ATTRS{serial}=="000987654321", SYMLINK+="evb-lan8670-2"
解释:

SUBSYSTEM=="usb" → 仅匹配 USB 设备

ATTRS{idVendor}=="0424" → 设备厂商 ID

ATTRS{idProduct}=="274e" → 设备产品 ID

ATTRS{serial}=="000123456789" → 通过唯一序列号区分设备

SYMLINK+="evb-lan8670-1" → 设备将映射到 /dev/evb-lan8670-1

如果是 USB 串口设备(如 /dev/ttyUSBx),则可以使用:

bash
复制
编辑
SUBSYSTEM=="tty", ATTRS{idVendor}=="0424", ATTRS{idProduct}=="274e", ATTRS{serial}=="000123456789", SYMLINK+="ttyLAN8670_1"
3. 重新加载 udev 规则
执行以下命令,使新规则生效:

bash
复制
编辑
sudo udevadm control --reload-rules
sudo udevadm trigger
然后拔掉 USB 设备,再次插入,检查 /dev/ 目录:

bash
复制
编辑
ls -l /dev/evb-lan8670-*
如果一切正常,应该看到:

bash
复制
编辑
lrwxrwxrwx 1 root root 10 Mar 24 12:00 /dev/evb-lan8670-1 -> /dev/ttyUSB0
lrwxrwxrwx 1 root root 10 Mar 24 12:00 /dev/evb-lan8670-2 -> /dev/ttyUSB1
4. 确保规则在启动时生效
有时设备会在系统启动时被动态分配不同的 /dev/ttyUSBx,可以通过 systemd 确保规则加载:

bash
复制
编辑
sudo systemctl restart udev
5. 额外建议
如果设备没有唯一序列号,可以用 KERNELS 或 DEVPATH 进行匹配:

bash
复制
编辑
KERNELS=="1-1.3", SUBSYSTEM=="usb", SYMLINK+="evb-lan8670-1"
可以在 /var/log/syslog 或 journalctl -xe 查看 udev 规则是否生效。

结论
通过 udev 规则,我们可以确保 EVB-LAN8670-USB 设备不会因多个设备插入而发生名称混乱。现在,即使多次插拔,它们都会保持固定的 /dev/evb-lan8670-* 设备节点名称。

可以试试看,如果有问题可以提供 udevadm info 的输出

21mengnan 发表于 2025-3-24 16:19

要给每个设备不同的ID

yiy 发表于 2025-3-26 21:11

按理说系统会给不同的设备提供不同的ID

海市蜃楼神秘 发表于 2025-3-26 22:36

如果按照这个方法操作,设备的识别顺序会不会因为电脑的 USB 接口不同而改变呢

穷得掉渣大侠 发表于 2025-3-27 09:34

这个方法对 USB 3.0 设备和 USB 2.0 设备都适用吗

不想起床喵星人 发表于 2025-3-27 10:23

udev 规则文件的命名有特殊要求吗

heisexingqisi 发表于 2025-3-27 15:34

用命令行太费劲了。

懒癌晚期患者 发表于 2025-3-27 19:23

如果设备的序列号丢失或者无法识别,还能通过其他方式来区分设备吗

作业粉碎机 发表于 2025-3-27 22:12

这个方法在不同的 Linux 发行版上都能通用吗
页: [1]
查看完整版本: 多个 USB 设备识别混乱的问题。