linux - 嗅探IOCTL和串口通信

标签 linux serial-port ioctl sniffer

我正在尝试反转九十年代早期逻辑分析仪及其 PC 软件所使用的协议(protocol)。 该设备通过RS-232(专有接线)连接并与DOS程序通信,在DOSBOX上成功运行。

我能够使用原始软件控制设备,但使用自定义程序自动从分析仪下载数据会很有用,但要做到这一点,我需要知道串行端口上发生了什么。

我需要知道串行端口设置的模式,虽然我确定数据速率是 1200 或 9600 bps(可在设备上配置),但我不知道流量控制(我猜是 RTS/CTS)。
我还需要在程序和设备之间进行对话,而不干扰他们的通信。
使用另一个程序(cutecom/minicom)读取串行端口会阻止仿真器从硬件接收数据。

所以,总结一下,我需要知道的是:

  • /dev/ttyS0 上设置了什么配置(我认为是通过 IOCTL 调用)
  • 程序和设备之间发生了什么。

我正在考虑编写一个库来充当标准 c 库的代理(通过 LD_PRELOAD),但必须有一种更简单的方法来做到这一点。

最佳答案

您可以使用slsnif(串行线路SNIFfer)。

http://linux.die.net/man/1/slsnif

这是 sourceforge 项目的链接,您可以下载它。我不相信任何现代发行版都附带它,但我可能是错的,所以请先检查您的发行版的软件存储库。

http://sourceforge.net/projects/slsnif/

关于linux - 嗅探IOCTL和串口通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15469511/

相关文章:

python - 在 Linux 上将终端程序从 Bash 迁移到 Python

C++ 串口通讯

android - 使用 ioctl 读取 USB 失败,原因为 "value too large for defined data type"

kernel - 如何从一个驱动程序调用 IOCTL 到另一个驱动程序(不在同一个堆栈中)(在 Windows 上)

c++ - ethtool ioctl 返回未填充的 ethtool_link_settings

r - 将命令的值分配给linux中的变量

linux - linux 中 sed 的输出不会写入文件

android - 如何在android中编译ARM v7I的模块?

c - 在导致段错误的字符串文字上使用 strtol

c++ - C语言多线程串口编程