使用pySerial打开/dev/ttyr串口失败:Errno 6 设备不存在或地址错误
在Scientific Linux 7.9上用Python 3.8.8(ipython)通过pyserial打开/dev/ttyr00时,收到错误:
SerialException: [Errno 6] could not open port /dev/ttyr00: [Errno 6] No such device or address: '/dev/ttyr00'
但ls -lart | grep ttyr能看到设备文件,修改权限也没用,同系列的ttyr02/ttyr03也有同样问题。
以下是针对性的解决方案:
检查硬件是否真的被系统识别:
执行dmesg | grep ttyr(或针对USB串口设备执行lsusb),查看是否有对应的硬件日志,确认驱动是否正确加载。如果没有相关输出,说明硬件没被识别,设备文件只是udev生成的占位符。验证设备是否被其他进程占用:
用lsof /dev/ttyr00或者fuser /dev/ttyr00查看是否有其他进程在使用该串口,如果有,先关闭对应进程再尝试。用终端工具测试串口可用性:
避开Python,直接用screen /dev/ttyr00 57600或者minicom -D /dev/ttyr00 -b 57600尝试打开串口,如果同样失败,说明问题出在系统层面而非Python代码。检查udev规则的有效性:
如果ttyr*是自定义的udev别名,去/etc/udev/rules.d/目录下查看对应的规则文件,确认规则里的硬件参数(比如ATTRS{idVendor}、ATTRS{idProduct})是否和你的串口设备匹配,以及SYMLINK设置是否正确。重新加载udev规则:
执行以下命令强制刷新udev配置:sudo udevadm control --reload-rules && sudo udevadm trigger之后重新尝试打开串口。
确认设备的实际路径:
用udevadm info -q path -n /dev/ttyr00查看该设备文件对应的实际硬件路径,如果输出为空或者指向不存在的路径,说明设备文件无效。
内容的提问来源于stack exchange,提问作者Steven Thomas

