我正在使用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)上却不起作用。由于我从未找到一份解释所有细节的文档,所以我自己写了一篇,可在此处找到。归根结底就是这样。
找出 ttyUSB 上的内容:
消息 | grep ttyUSB
列出设备的所有属性:
udevadm 信息 --name=/dev/ttyUSBx --attribute-walk
(当然,用您的设备编号代替 x)。挑选一个唯一的标识符集,例如 idVendor + idProduct。如果您有多个具有相同 idVendor 和 idProduct 的设备,您可能还需要 SerialNumber。每个设备的 SerialNumbers 应该是唯一的。
创建一个文件 /etc/udev/rules.d/99-usb-serial.rules,其中包含如下行:
SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", SYMLINK+="你的设备名称"
(假设您不需要序列号,当然还需要您在步骤 2 中找到的 idVendor 和 idProduct 的号码。
加载新规则:
sudo udevadm 触发器
验证发生了什么:
ls -l /dev/你的设备名称
将显示符号链接指向的 ttyUSB 编号。如果是 /dev/ttyUSB1,则验证它的所有者和所属组:
ls -l /dev/ttyUSB1
然后只是为了好玩:
udevadm 测试 -a -p $(udevadm 信息 -q 路径 -n /dev/你的设备名称)