我已经配置了 udev 规则来为 USB 设备创建符号链接:
SUBSYSTEM=="tty", ATTRS{idVendor}=="3032", ATTRS{idProduct}=="0014", SYMLINK+="ttyUSB_GPS"
这将创建一个符号链接ttyUSB_GPS -> ttyACM1
(或ttyUSB_GPS -> ttyACM0
取决于插入的其他内容)。
我有一个在启动时运行并通过 systemd 服务启动 python 程序的 bash 脚本。python 脚本使用串行模块访问 USB 设备,我已将其设置为通过符号链接端口访问ttyUSB_GPS
。但是,执行此操作时出现以下错误:
Error: device reports readiness to read but returned no data (device disconnected or multiple access on port?)
如果我将 python 脚本中的端口更改为默认端口ttyACM1
并重新启动,那么它会在启动时立即运行,但根据插入的其他内容,它可能并不总是这个端口值。
如果我在启动 python 文件之前通过在 bash 脚本中输入sleep
命令等待大约一分钟,然后使用端口值,ttyUSB_GPS
那么它就可以工作。
在 bash 脚本中,我在启动 python 脚本之前检查别名是否存在,所以我不确定为什么它不能像直接访问 ttyACM1 端口一样运行。
符号链接有什么问题导致它在启动时不能立即工作?据我了解,如果符号链接存在,则操作系统应将其视为与原始端口值相同的值。