Ubuntu 24.04下pyserial错误枚举不存在的/dev/ttyS*虚拟串口设备问题
Ubuntu 24.04下pyserial错误枚举不存在的/dev/ttyS*虚拟串口设备问题
遇到这个问题确实挺头疼的,我帮你分析下可能的原因和解决办法:
问题背景回顾
你将多台PC从Ubuntu 22.04升级到24.04后,使用serial.tools.list_ports.comports()枚举串口时发现:
- Ubuntu 24.04下会列出全部虚拟的
/dev/ttyS0到/dev/ttyS31设备,同时包含真实存在的串口(如ttyUSB0等) - 同一台机器在Ubuntu 22.04下仅列出真实存在的串口
- 两个版本系统下执行
ls /dev都能看到ttyS0到ttyS31,但pyserial的枚举逻辑出现了差异
可能的原因
核心问题出在pyserial的端口检测逻辑或Ubuntu 24.04对虚拟ttyS设备的属性设置变化:
- 在Ubuntu 22.04中,这些虚拟ttyS设备缺少硬件标识(hwid)或关键系统属性,pyserial会自动过滤掉这类无效端口
- 升级到24.04后,系统给这些虚拟ttyS设备补上了相关属性,导致pyserial误判它们为有效串口
解决办法
1. 代码层面手动过滤无效端口
通过检查端口的硬件ID(hwid)来区分真实串口和虚拟ttyS设备,真实物理串口会有对应的硬件信息,虚拟ttyS设备的hwid通常为空。示例代码如下:
from serial.tools.list_ports import comports def get_real_serial_ports(): real_ports = [] for port in comports(): # 过滤掉无硬件信息的ttyS虚拟设备 if port.name.startswith('ttyS') and not port.hwid: continue real_ports.append(port.name) return real_ports # 测试输出真实串口 print(get_real_serial_ports())
2. 调整pyserial版本
Ubuntu 24.04自带的pyserial版本可能和22.04存在差异,导致检测逻辑变化:
- 尝试升级到最新稳定版:
pip install --upgrade pyserial - 若升级后问题仍存在,可降级到Ubuntu 22.04常用的版本(比如3.5):
完成版本调整后重新测试枚举结果。pip install pyserial==3.5
3. 系统层面udev规则调整(不推荐)
可以通过修改udev规则标记虚拟ttyS设备为非串口,但操作相对复杂且可能影响系统其他功能,因此更推荐前两种方法。
备注:内容来源于stack exchange,提问作者slarag
相关产品推荐
相关产品推荐

