我正在调试与串行设备的通信,我需要看到所有数据都在两个方向上流动。
在Linux上看起来应该很容易,其中串口由文件表示。有什么方法可以做一种“双向T恤”,我告诉我的程序连接到一个管道,将数据复制到一个文件,并将其随机播放到实际的串口设备?
我想我甚至可能知道如何编写这样的野兽,但这似乎并不重要,特别是要让所有的ioctl通过端口配置等等。
有人已经建造了这样的东西吗?它似乎太有用了(对于调试串行设备驱动程序的人来说)不存在。
答案 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。
答案 4 :(得分:0)