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

socat使用rawer选项时无法读取串口数据的问题咨询

问题根因

你遇到的是4.9版本aarch64内核串口驱动与socat rawer模式参数重置逻辑的兼容性问题,核心问题出在你贴出的两组stty参数差异上:

  1. rawer模式下串口波特率被重置为0,无法正常收发数据
  2. rawer模式下-cread标志被置位,直接关闭了串口的接收功能

具体逻辑说明

  • socat的raw选项只会基于当前终端配置做最小限度的调整,保留用户显式设置的波特率、CREAD接收位等核心串口参数,所以运行正常。
  • socat的rawer是更激进的绝对裸模式,会先把所有终端参数重置为POSIX定义的默认裸状态,再叠加用户传入的参数。你的4.9内核ttyTHS串口(通常是英伟达Jetson系列的TEGRA串口)驱动对该重置操作的处理存在缺陷:
    • 用户提前传入的b9600波特率参数被重置操作覆盖,最终被设置为0
    • 重置操作会默认清除CREAD接收位,而该版本串口驱动不会在设置波特率时自动恢复该位,直接导致串口不接收任何数据

x86_64 5.4内核环境下正常的原因是:高版本内核串口驱动对tcsetattr全量重置操作的处理逻辑更完善,会保留用户显式设置的波特率优先级,且USB转串口驱动默认会强制维持CREAD位为开启状态,不会被重置操作清除。

解决办法

两种方案可选,都可以完全复现rawer的裸终端效果,同时避开兼容性问题:

  • 方案1:手动补全rawer比raw多关闭的终端标志,不直接使用rawer选项:
    socat /dev/ttyTHS1,b9600,raw,cread,iexten=0,echo=0,echoe=0,echok=0,echoctl=0,echoke=0 -
    
  • 方案2:调整参数顺序,用后置的配置覆盖rawer的重置结果:
    socat /dev/ttyTHS1,rawer,b9600,cread -
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:45:07