如何监控Linux中串口的数据?

时间:2009-06-02 16:04:31

标签: linux monitoring serial-port

我正在调试与串行设备的通信,我需要看到所有数据都在两个方向上流动。

在Linux上看起来应该很容易,其中串口由文件表示。有什么方法可以做一种“双向T恤”,我告诉我的程序连接到一个管道,将数据复制到一个文件,并将其随机播放到实际的串口设备?

我想我甚至可能知道如何编写这样的野兽,但这似乎并不重要,特别是要让所有的ioctl通过端口配置等等。

有人已经建造了这样的东西吗?它似乎太有用了(对于调试串行设备驱动程序的人来说)不存在。

5 个答案:

答案 0 :(得分:20)

strace对此非常有用。您可以看到所有ioctl调用,并解码相应的结构。在您的情况下,以下选项似乎特别有用:

  

-e read = set

     

对从中读取的所有数据执行完整的十六进制和ASCII转储   文件描述符列在   指定集。例如,要查看所有内容   文件描述符上的输入活动3   和5使用-e读= 3,5。请注意这一点   独立于正常的追踪   read(2)系统调用是哪个   由选项-e控制   跟踪=读出。

     

-e write = set

     

执行完整的十六进制和ASCII   转储写入文件的所有数据   描述符中列出的描述符   组。例如,要查看所有输出   文件描述符3和5上的活动   使用-e write = 3,5。请注意,这是   独立于正常的追踪   write(2)系统调用是哪个   由选项-e控制   跟踪=写。

答案 1 :(得分:4)

我发现pyserial非常有用,所以如果你使用Python,那么编写这样的东西应该不会太难。

答案 2 :(得分:2)

一种简单的方法是编写一个打开的应用程序 一个pty的主人和被测试的tty。你会的 将你的tty应用程序传递给pty的slave端作为'tty device'。

您必须在pty上使用tcgetattr()监控pty属性 如果属性发生了变化,请掌握并在真实的tty上调用tcsetattr()

其余的将是fd双向复制数据并将其复制到日志中的简单select()

答案 3 :(得分:1)

我看了很多串口嗅探器。所有这些都基于创建虚拟串行端口和从该端口嗅探数据的想法。但是,任何波特/奇偶校验/流量变化都会破坏连接。

所以,我写了自己的嗅探器:)。现在大多数串口都只是USB转串口转换器。我的嗅探器通过debugfs从USB收集数据,解析并输出到控制台。此外,还会记录任何波特率变化,流量控制,线路事件和串行错误。该项目处于开发的早期阶段,目前只支持FTDI。

http://code.google.com/p/uscmon/

答案 4 :(得分:0)

很像2,我一直在寻找串行嗅探器,但是pty打破了奇偶校验。但是,他的嗅探器并没有帮助我,因为我使用的是CP2102,而不是FT232。因此,我遵循@MBR编写了自己的嗅探器,现在有了一个可以在任意文件上记录文件I / O的嗅探器:我将其称为this