socat 生成虚拟串口


🔥linux 下如何生成虚拟串口?

💧linux 中有虚拟终端的概念即 pty,pty 是成对的逻辑终端设备(有两个终端组成,支持双向收发),linux 系统调用原生支持生成虚拟终端。

💧无论是实体串口,还是虚拟串口,表现形式都是串口。

Ubuntu上,利用 socat 实现虚拟串口

安装 socat

apt-get install socat

生成虚拟串口对

socat -d -d pty,b115200 pty,b115200

命令输出内容

root@ioufev:/opt# socat -d -d pty,b115200 pty,b115200
2022/03/03 06:47:50 socat[178621] N PTY is /dev/pts/2
2022/03/03 06:47:50 socat[178621] N PTY is /dev/pts/3
2022/03/03 06:47:50 socat[178621] N starting data transfer loop with FDs [5,5] and [7,7]

在这个示例中 /dev/pts/2/dev/pts/3 就是生成的虚拟串口对。
注意不同的机器生成的串口设备的编号可能不一样,比如有的机器上可能会生成 /dev/pts/0/dev/pts/1 等。
之后我们可以像访问真实的串口设备一样访问这两个虚拟串口了。

串口使用

查看输出

cat /dev/pts/2

向串口输入

echo 123 > /dev/pts/2

如果要一直输出内容,可以使用 minicom

Linux 串口工具 minicom

虚拟终端的概念

tty:终端设备的统称

tty是Teletype或TeletypeWriter的缩写,中文翻译为电传打字机。电传打字机通常有键盘、收发报器和印字机等组成,是传真机使用以前的通信设备,原理近似电报。后被显示器和键盘所取代,所以现在叫终端比较合适。

终端是一种字符型设备,他有多种类型,通常使用tty来简称各种类型的终端设备。

目前,tty一般指控制终端(man 4 tty),设备文件是 /dev/ttyx 。

pty:虚拟终端

A pseudoterminal缩写为pty,是虚拟终端或伪终端,可以在终端模拟器(terminal emulator)中运行,man pty查看。pty是成对的逻辑终端设备(即master和slave设备,对master的操作会反映到slave上,对slave的操作也会反映到master上),与实际物理设备无关。A pty is a pair of virtual character devices that provide a bidirectional communication channel. one end is called master; the other end is called the slave.

linux提供了两套虚拟终端接口,BSD-style和System V-style,System V-style终端也被称为UNIX 98 pseudoterminals,是目前使用的伪终端样式。

An unused UNIX 98 pseudoterminal master is opened by calling posix_openpt(3). (This function opens the master clone device, /dev/ptmx; see pts(4).) After performing any program-specific initializations, changing the ownership and permissions of the slave device using grantpt(3), and unlocking the slave using unlockpt(3)), the corresponding slave device can be opened by passing the name returned by ptsname(3) in a call to open(2).

PTM指pseudoterminal master,PTS指pseudoterminal slave。

/dev/ptmx (UNIX 98 master clone device),所有主设备对应的设备文件都指向/dev/ptmx

/dev/pts/* (UNIX 98 slave devices)

串行端口终端

与计算机串行端口(RS-232)连接的终端设备,对应的设备文件名称为/dev/tty+类型+设备编号,如/dev/ttyS0,S表示设备类型,0为指定类型下的设备编号。

这里的串行端口可以是通过硬件或软件模拟的,如USB转串口,虚拟串口。

参考


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM