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

升级glibc至2.29后树莓派4配置串口报输入输出错误求解决

解决glibc-2.29环境下树莓派4打开/dev/ttyS0串口的IO错误问题

针对你在树莓派4上升级glibc到2.29后,Python串口程序出现serial.serialutil.SerialException: Could not configure port: (5, 'Input/output error')的问题,可尝试以下几种解决方案:

1. 修复串口设备权限

  • 将当前用户加入dialout组(串口操作的权限组):
    sudo usermod -aG dialout $USER
    
    执行后重新登录系统生效,避免每次运行程序都需要sudo权限。
  • 临时测试可直接修改设备权限(重启后失效):
    sudo chmod 666 /dev/ttyS0
    

2. 确认树莓派串口硬件配置

glibc升级后可能暴露了之前被忽略的串口配置问题:

  1. 打开树莓派配置工具:
    sudo raspi-config
    
  2. 进入Interface Options -> Serial Port
  3. 选择**"否"关闭串口控制台**,选择**"是"启用串口硬件支持**
  4. 重启树莓派:
    sudo reboot
    
  5. 验证硬件串口映射:执行ls -l /dev/serial*,确保/dev/ttyS0链接到/dev/ttyAMA0(硬件串口),而非miniUART(/dev/ttyS0默认可能是miniUART,性能受限且易出配置问题)。

3. 显式配置所有串口参数

glibc-2.29对串口参数的默认处理更严格,需在代码中显式声明所有必要配置,避免依赖pyserial的默认值:

import serial
import GPIO

# RS485初始化修改版
def RS485_initial(self):
    MODE = 0 # mode = 0是全双工,mode = 1是半双工
    if MODE == 1:
        EN_485 = 4
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(EN_485, GPIO.OUT)
        GPIO.output(EN_485, GPIO.HIGH)
    # 显式指定所有串口参数
    self.ser = serial.Serial(
        port="/dev/ttyS0",
        baudrate=115200,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_1,
        bytesize=serial.EIGHTBITS,
        timeout=1,
        xonxoff=False,
        rtscts=False,
        dsrdtr=False
    )

# RS232初始化修改版
def RS232_initial(self):
    self.ser = serial.Serial(
        port="/dev/ttyS0",
        baudrate=9600,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_1,
        bytesize=serial.EIGHTBITS,
        timeout=1,
        xonxoff=False,
        rtscts=False,
        dsrdtr=False
    )

4. 调整pyserial版本适配glibc-2.29

部分旧版本pyserial与glibc-2.29的系统调用处理不兼容:

  • 卸载当前版本:
    pip3 uninstall pyserial
    
  • 安装兼容版本(推荐3.4或最新稳定版):
    pip3 install pyserial==3.4
    # 或升级到最新版
    pip3 install --upgrade pyserial
    

5. 用strace定位具体出错的系统调用

如果以上方案无效,可通过strace跟踪程序的系统调用,定位具体哪个配置步骤出错:

strace -e trace=ioctl python3 your_serial_script.py

查看输出中失败的ioctl调用及其参数,针对性修改pyserial的serialposix.py源码(比如在_reconfigure_port方法中添加参数检查或调整系统调用逻辑)。

内容的提问来源于stack exchange,提问作者Rossi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:21:29