You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 09:32:57