目前,我正在尝试访问连接到应用程序的串行端口的两个方向的数据。
我想做的是:
ttymxc0 <
ttymxc0是真正的端口,ttyV0是虚拟端口。
我发现了在Ubuntu16.04:http://www.iheartrobotics.com/2010/02/debugginng-serial-interfaces.html上工作的socat命令
但是,当我使用buildroot在嵌入式系统上使用它时,我会得到以下错误:
socat -d /dev/ttymxc0,raw,echo=0 SYSTEM:'tee input.txt | socat - "PTY,link=/tmp/ttyV0,raw,echo=0,waitslave" | tee output.txt'
socat[3167.1996369920] E address "GOPEN..." in intermediate context, leftdirs=4, rightdirs=7, with 1 parameter(s) is not available
socat[3167.1996369920] W cannot restore terminal settings on fd 3: Bad file descriptor我试图查看文件的访问属性,但没有成功。当您不要求打印输入和输出时,它会工作,但这对我的使用没有帮助。
在这种情况下,对于buildroot和Ubuntu之间有什么不同,有什么想法吗?
发布于 2022-01-12 14:40:10
你已经回答了你自己的问题,但这个稍微现代化的答案是:
$ socat -x -v /dev/ttyUSB0,rawer,b115200,crnl PTY,link=ttyV1,rawer,crnl
< 2022/01/12 15:34:47.845709 length=11 from=0 to=10
65 63 68 6f 20 48 65 6c 6c 6f 0a echo Hello.
--
> 2022/01/12 15:34:47.847937 length=12 from=0 to=11
65 63 68 6f 20 48 65 6c 6c 6f 0d 0a echo Hello..
--
> 2022/01/12 15:34:47.876068 length=7 from=12 to=18
48 65 6c 6c 6f 0d 0a Hello..
--
> 2022/01/12 15:34:47.905274 length=1 from=19 to=19
24 $
--来自socat手册:
-v“不仅将传输的数据写入其目标流,还写入到stderr。输出格式为文本,具有可读性,并以">”或"<“作为表示流方向的前缀。raw过时了,rawer“使终端rawer比raw选项更好。该选项隐式地关闭回显。”b115200“将串行线路速度设置为115200波特”,这是一个非常常见的设置。当然,为你的案子设置正确的。发布于 2022-09-16 23:08:50
如果你对socat的-v输出格式很满意的话,迭戈的回答是很棒的。然而,如果你想要创建一个单独的设备,它只是一个像我这样的原始设备的只读版本,这样你就可以在只读设备上打开minicom,并让其他软件正常地与读写设备交互--我只是想出了以下几个很好的方法。
socat /dev/ttyUSB0,rawer SYSTEM:'tee >(socat - "PTY,link=/tmp/foobar-ro,rawer" >%-) | socat - "PTY,link=/tmp/foobar-rw,rawer,wait-slave"'这很复杂,所以我会把它分解一下。从逻辑上讲是这样的:
socat /dev/ttyUSB3,rawer SYSTEM:'tee [READ-ONLY PTY] | [READ-WRITE PTY]'它的工作原理大致相同:
/dev/ttyUSB0)和第二地址( SYSTEM命令)之间设置双向管道。SYSTEM命令中,tee将它的stdin (即/dev/ttyUSB0的输出)复制到[READ-ONLY PTY]和它自己的stdout中,然后我们将其传输到[READ-WRITE PTY]。[READ-ONLY PTY]是用第二个socat命令创建的,其中第一个地址是- (socat的STDIO地址类型的缩写),第二个是一个新的PTY。我们还确保用>%-关闭第二个socat命令的stdout;这就是使其只读的原因。[READ-WRITE PTY]。第三个套接字的标准输出成为第一个套接字中系统地址的输出,并输入到原始设备的输入,完成循环。https://stackoverflow.com/questions/38868351
复制相似问题