2010-02-03 69 views
4

目前我需要开发一些程序,通过串行线与cisco设备进行通信。我想在我的开发linux机器上构建测试环境。所以,我发现了dynamips cisco模拟器。该仿真器可以通过串口线提供'-U/dev/ttyS0'选项的接口。那么,这会导致dynamips打开硬件串行端口并通过它进行通信。我可以通过串口客户端(如minicom)从另一台Linux机器连接到此硬件串行端口。Linux上的软件串行端口环回

但是,由于我在两台linux机器上都使用virtualbox,因此我通过virtualbox将串行端口链接到命名管道。这个方案似乎正在工作,但非常冗赘。我正在寻找一种方法来在单个Linux机器上运行dynamips和minicom。

我发现伪终端可能对我有用。但我试图用'-U/dev/ptmx'运行dynamips,然后用minicom连接到/ dev/pts/... port,反之亦然。在这两种情况下,双方都有输入/输出错误。

+0

你要求什么具体问题或错误信息? – 2010-02-03 15:26:10

+0

您是否在这个环回任务中使用了openpty? – lpapp 2013-11-17 06:05:25

回答

6

不幸的是,现代的伪终端并不那么容易。使用posix_openpt()open("/dev/ptmx")打开主站之后,必须在主站FD及其相应的从站设备可用之前,在主FD上调用grantpt()unlockpt()。 (openpty()等效用函数简化了这一点。)

作为一种解决方法,可能有用的方法是socat

 
# terminal 1 
socat pty:link=$PWD/pts unix-l:$PWD/ptm-pipe & 
dynamips -U $PWD/pts 

# terminal 2 
socat unix:$PWD/ptm-pipe - 
+0

或者你可以使用'socat'来打开两个ptys,然后将主结点连接在一起(然后连接到'dynamips'的一个pty,另一个来自'minicom')。 – caf 2010-02-04 00:05:50

+0

我没有安装'minicom',所以我不知道它是否可以这样做。我现在正在阅读它的手册页,它声称也可以在UNIX套接字上工作!这将完全避免第二个“社群”。 – ephemient 2010-02-04 02:14:05

+0

@caf“并将maste结尾在一起”。你是什​​么意思,我该怎么做?一个终端不应该是主人,而是另一个终端? – nass 2013-07-18 13:20:01