本文最后更新于:June 30, 2023 pm

本文作者:[wangwenhai] # 概要:虚拟串口基本使用。

虚拟串口使用

前言

调试串口的时候一般用真实设备模拟,但是没有真实设备的时候也可以用模拟器来实现串口调试。本次使用 SOCAT来实现效果。UNIX自带了一个工具,可以直接使用,文档在这里:http://www.dest-unreach.org/socat/

模拟串口

直接在shell中输入如下命令,表示启动两个虚拟串口,为什么是一对?可能大家有疑惑,想一下两个设备通过串口连起来,是不是要求两边都支持串口?

socat -ddd -v -v -v  pty,raw,echo=1  pty,raw,echo=0

上述命令生成两个串口,你可以实现一个模拟两台串口设备收发数据。

输出类似下面的日志代表启动成功:

2021/03/08 18:44:56 socat[39731] I socat by Gerhard Rieger and contributors - see www.dest-unreach.org
2021/03/08 18:44:56 socat[39731] I This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/)
2021/03/08 18:44:56 socat[39731] I This product includes software written by Tim Hudson (tjh@cryptsoft.com)
2021/03/08 18:44:56 socat[39731] I setting option "raw"
2021/03/08 18:44:56 socat[39731] I setting option "echo" to 1
2021/03/08 18:44:56 socat[39731] I openpty({5}, {6}, {"/dev/ttys010"},,) -> 0
2021/03/08 18:44:56 socat[39731] N PTY is /dev/ttys010
2021/03/08 18:44:56 socat[39731] I setting option "raw"
2021/03/08 18:44:56 socat[39731] I setting option "echo" to 0
2021/03/08 18:44:56 socat[39731] I openpty({7}, {8}, {"/dev/ttys013"},,) -> 0
2021/03/08 18:44:56 socat[39731] N PTY is /dev/ttys013
2021/03/08 18:44:56 socat[39731] I resolved and opened all sock addresses
2021/03/08 18:44:56 socat[39731] N starting data transfer loop with FDs [5,5] and [7,7]

然后使用cat命令,监控你要接收的那个虚拟串口,上述案例我选择:"/dev/ttys013"作为监控端,

cat /dev/ttys013

然后使用串口工具可连接你准备发送的一端,上面使用 cat /dev/ttys010,本案例使用Erlang来模拟串口发送端:

%% 连接
{ok, FD} = serctl:open("/dev/ttys010").
%% 发送
serctl:write(FD, <<"ok">>).

观察cat挂起的终端:

-> % cat /dev/ttys013
ok

同时 socat 也会有日志:

> 2021/03/08 18:46:49.213306  length=2 from=2 to=3
ok2021/03/08 18:46:49 socat[39731] I transferred 2 bytes from 5 to 7

最前面的 ok就是发送端发送的数据。

总结

socat 工具是一款很强大的工具,我们可以很容易实现数据转发功能,而串口模拟仅仅是其中一个功能,更多功能需要深入挖掘。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

设计一个简单的虚拟机 Previous
基于Erlang纯手工实现一个WEB框架 Next