方法 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 获得持久化设备。
