我想在 Linux 中设置虚拟串行端口模拟器。我希望端口是永久的,这样每次重启时都可以使用它们。我尝试使用索卡特为了这个目的,
socat -d -d pty,raw,echo=0 pty,raw,echo=0
但是我在测试程序中使用这些 VSP(虚拟串行端口)时经常遇到“端口繁忙”问题。此外,我发现很难创建永久/持久的 VSP。
我现在想尝试使用 tty0tty 来实现我的目的。但我找到的关于如何使用它的文档很少。有人能告诉我吗?如果还有任何针对 socat 的解决方案,请发表评论。
答案1
安装
从以下来源之一下载 tty0tty 包:
克隆仓库https://github.com/freemed/tty0tty:
git clone https://github.com/freemed/tty0tty
提取它:
tar xf tty0tty-1.2.tgz
从提供的源构建内核模块:
cd tty0tty-1.2/module make
将新的内核模块复制到内核模块目录中:
sudo cp tty0tty.ko /lib/modules/$(uname -r)/kernel/drivers/misc/
加载模块:
sudo depmod sudo modprobe tty0tty
/dev/
您应该会在(ls /dev/tnt*
)中看到新的串行端口赋予新的串口适当的权限:
sudo chmod 666 /dev/tnt*
您现在可以访问串行端口/dev/tnt0
(1、2、3、4 等)。请注意,连续端口是互连的。例如,/dev/tnt0
和/dev/tnt1
就像使用直接电缆一样连接。
跨引导持久化
编辑文件/etc/modules
(Debian)或/etc/modules.conf
sudo nano /etc/modules.conf
并添加以下行:
tty0tty
警告
注意此方法不会使模块在内核更新后继续存在所以如果您更新内核,请确保再次构建 tty0tty 并重复该过程。
如果您不移动模块,每次内核更新systemctl --failed
都会返回服务systemd-modules-load.service
已结束“ failed
”的信息。同样在journalctl -xe | grep "Failed to find"
。