在Linux中如何监视串行端口上的数据?

在Linux中如何监视串行端口上的数据?,linux,monitoring,serial-port,Linux,Monitoring,Serial Port,我正在调试与串行设备的通信,我需要查看所有双向流动的数据 在Linux上,这似乎应该很容易,因为串行端口由一个文件表示。有没有什么方法可以让我做一种“双向T型”,我告诉我的程序连接到一个管道,该管道将数据复制到一个文件中,并将其随机移动到实际的串行端口设备上 我想我甚至可能知道如何编写这样一个beast,但它似乎不平凡,尤其是让所有IOCTL通过端口配置等等 有人已经建造了这样的东西吗?它似乎太有用了(对于调试串行设备驱动程序的人来说)根本不存在。我发现它非常有用,所以如果你喜欢Python,写

我正在调试与串行设备的通信,我需要查看所有双向流动的数据

在Linux上,这似乎应该很容易,因为串行端口由一个文件表示。有没有什么方法可以让我做一种“双向T型”,我告诉我的程序连接到一个管道,该管道将数据复制到一个文件中,并将其随机移动到实际的串行端口设备上

我想我甚至可能知道如何编写这样一个beast,但它似乎不平凡,尤其是让所有IOCTL通过端口配置等等

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

我发现它非常有用,所以如果你喜欢Python,写这样的东西应该不会太难。

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

-e读取=设置

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

-e write=set

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


一个简单的方法是编写一个打开 pty的主侧和测试中的tty。那你会的 将tty应用程序作为“tty设备”传递到pty的从机端

您必须在pty上使用监控pty属性 掌握并调用真实的tty,如果属性更改


剩下的就是fd双向复制数据和将数据复制到日志的简单过程。

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

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


很像,我在研究串行嗅探器,但是
pty
s打破了奇偶校验。然而,他的嗅探器帮不了我,因为我用的是CP2102,而不是FT232。因此,我通过以下方式编写了自己的嗅探器,现在我有了一个可以在任意文件上记录文件I/O的嗅探器:我调用了它。

完美,谢谢!我知道必须有一个简单的方法来做到这一点。我一直在使用strace,但我甚至没有考虑过它。听起来很棒。但我想知道:我怎么才能知道相关的文件描述符编号是什么呢?所以。。。你到底是怎么做到的?是的,我也很想知道,因为到目前为止我还不知道如何使用strace。干杯这可能会引起那些对给定答案感到困惑的人的兴趣:这个问题看起来也很有趣。如果您可以更新以使用任何vid/pid以及在何处更改它,那将非常好?如果它有一个Makefile另一个位置在这里()和问题讨论可以帮助构建它,但似乎没有实际完成工作@MBR您有更新的版本或文档吗?如何能够监视使用
tcsettr()进行更改的事件
?使用
select
进行监听是否会报告它们?tty驱动程序(和操作系统)只有一个包含输入和输出的select()响应契约。最简单的方法是在成功的select调用之后,在处理任何输入/输出之前,只调用tcgetattr()。