我正在调试与串行设备的通信,需要查看所有数据来回流动的情况。
在Linux中,串行端口表示为文件,因此似乎应该很容易实现这点。有没有一种方法可以进行“双向tee”,我让我的程序连接到一个管道,将数据复制到文件并传输到/从实际的串行端口设备?
我甚至认为我知道如何编写这样的程序,但这貌似是个不容易的问题,特别是要通过端口配置等操作传递所有的IO控制命令。
是否已经有人构建了这样的东西?这似乎太有用了(对于调试串行设备驱动程序的人们)而不可能不存在。
我正在调试与串行设备的通信,需要查看所有数据来回流动的情况。
在Linux中,串行端口表示为文件,因此似乎应该很容易实现这点。有没有一种方法可以进行“双向tee”,我让我的程序连接到一个管道,将数据复制到文件并传输到/从实际的串行端口设备?
我甚至认为我知道如何编写这样的程序,但这貌似是个不容易的问题,特别是要通过端口配置等操作传递所有的IO控制命令。
是否已经有人构建了这样的东西?这似乎太有用了(对于调试串行设备驱动程序的人们)而不可能不存在。
strace非常有用。您可以可视化所有ioctl调用,并解码相应的结构体。以下选项在您的情况下似乎特别有用:
-e read=set
对于指定集合中列出的文件描述符,执行完整的十六进制和ASCII转储以查看所有读取的数据活动。例如,要查看文件描述符3和5上的所有输入活动,请使用-e read=3,5。请注意,这与read(2)系统调用的正常跟踪是独立的,该跟踪受-e trace=read选项控制。
-e write=set
对于指定集合中列出的文件描述符,执行完整的十六进制和ASCII转储以查看所有写入的数据活动。例如,要查看文件描述符3和5上的所有输出活动,请使用-e write=3,5。请注意,这与write(2)系统调用的正常跟踪是独立的,该跟踪受-e trace=write选项控制。
tcgetattr()
监视pty主设备的属性,并在属性更改时在真实tty上调用tcsetattr()
.select()
,双向复制数据并将其复制到日志中。tcsetattr()
进行的更改事件?它们是否可以通过使用 select
进行监听来报告? - dolmen