方法 1:使用 socat
工具
socat
是一个多功能网络工具,可创建虚拟串口对。
步骤:
-
安装
socat
:sudo apt update sudo apt install socat
-
创建虚拟串口对:
socat -d -d pty,raw,echo=0 pty,raw,echo=0
输出示例:
N PTY is /dev/pts/2 N PTY is /dev/pts/3
此时生成了一对虚拟串口
/dev/pts/2
和/dev/pts/3
。 -
测试通信:
-
终端 1:监听一个端口
cat /dev/pts/2
-
终端 2:向另一个端口发送数据
echo "Hello Rock Pi" > /dev/pts/3
终端 1 应显示接收到的消息。
-
方法 2:使用 tty0tty
内核模块
tty0tty
是一个内核模块,提供虚拟串口对(如 /dev/tnt0
和 /dev/tnt1
)。
步骤:
-
安装依赖:
sudo apt install build-essential dkms
-
下载并编译
tty0tty
:git clone https://github.com/lcgamboa/tty0tty.git cd tty0tty/module make sudo cp tty0tty.ko /lib/modules/$(uname -r)/kernel/drivers/misc/ sudo depmod
-
加载模块:
sudo modprobe tty0tty
-
验证设备文件:
ls /dev/tnt*
应看到
/dev/tnt0
到/dev/tnt7
。 -
设置权限(可选):
sudo chmod 666 /dev/tnt0
方法 3:使用 Python 的 pyserial
库
通过伪终端(PTY)模拟虚拟串口。
步骤:
-
安装
pyserial
:pip install pyserial
-
创建 Python 脚本:
import serial import os# 创建虚拟串口对 master, slave = os.openpty() serial_name = os.ttyname(slave)print(f"Virtual Serial Port: {serial_name}")# 示例:写入数据 ser = serial.Serial(serial_name) ser.write(b"Hello from Python") ser.close()
常见问题
-
权限不足:
-
将用户加入
dialout
组:sudo usermod -aG dialout $USER
-
重新登录生效。
-
-
虚拟串口无响应:
-
检查是否已正确创建端口对。
-
确保读写程序使用相同的波特率(虚拟端口通常忽略波特率,但某些软件可能要求设置)。
-
应用场景
-
开发调试:模拟硬件串口进行软件测试。
-
多设备通信:在无物理连接时测试串口协议。
-
容器/虚拟机:在虚拟化环境中使用串口通信。
根据需求选择合适的方法,推荐使用 socat
快速测试,或 tty0tty
获得持久化设备。