每次系统重启时 USB 串行端口都会重置,如何防止这种情况?

每次系统重启时 USB 串行端口都会重置,如何防止这种情况?

我正在使用Ubuntu 18:04 LTS并尝试与串行端口通信,但每次重新启动系统时端口都会被重置,有没有办法防止这种情况发生。例如,假设我正在使用分配给的超声波传感器,/dev/ttyUSB0并且正在使用分配给的脉搏率传感器,/dev/ttyUSB1那么端口在系统重新启动之前应该是稳定的,之后端口往往会发生变化,所以有没有办法冻结分配给传感器的端口,以确保它们在重新启动后保持不变。可以有任意数量的传感器连接到系统。

答案1

我曾经在使用 debian jessie 和后来的 stretch 的 beagle bone 时遇到过同样的问题。

https://unix.stackexchange.com/questions/66901/how-to-bind-usb-device-under-a-static-name

这帮助了我。

总之,他们建议添加 udev 规则:

对我有帮助的话:

上述规则语法可能适用于某些发行版,但在我的发行版(Raspbian)上却不起作用。由于我从未找到一份解释所有细节的文档,所以我自己写了一篇,可在此处找到。归根结底就是这样。

  1. 找出 ttyUSB 上的内容:

    消息 | grep ttyUSB

  2. 列出设备的所有属性:

    udevadm 信息 --name=/dev/ttyUSBx --attribute-walk

(当然,用您的设备编号代替 x)。挑选一个唯一的标识符集,例如 idVendor + idProduct。如果您有多个具有相同 idVendor 和 idProduct 的设备,您可能还需要 SerialNumber。每个设备的 SerialNumbers 应该是唯一的。

  1. 创建一个文件 /etc/udev/rules.d/99-usb-serial.rules,其中包含如下行:

    SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", SYMLINK+="你的设备名称"

(假设您不需要序列号,当然还需要您在步骤 2 中找到的 idVendor 和 idProduct 的号码。

  1. 加载新规则:

    sudo udevadm 触发器

  2. 验证发生了什么:

    ls -l /dev/你的设备名称

将显示符号链接指向的 ttyUSB 编号。如果是 /dev/ttyUSB1,则验证它的所有者和所属组:

ls -l /dev/ttyUSB1

然后只是为了好玩:

udevadm 测试 -a -p $(udevadm 信息 -q 路径 -n /dev/你的设备名称)

相关内容