我一直试图得到一个HEX转储,什么是正在发送/接收到CP2102串行转换芯片。我可以找到监视硬件串口/dev/TTYS0 0等人的例子。
socat -d -d pty,link=/dev/ttyUSB0,raw,echo=0 pty,link=/dev/ttyUSB1,raw,echo=0有人知道有什么资源可以告诉我如何监控这样的USB端口吗?到目前为止,一切都不起作用。也许我只是不明白串行监控的重路由方面什么的?
发布于 2017-10-09 16:46:49
如果可能的话,最简单的方法可能是调整软件以发出十六进制。大多数软件可能已经有了sdio.h (或等效的)和十六进制的串行数据,只需对往返于串行文件描述符的数据进行printf调用(或等效)。没有复杂的额外进程运送数据往返和很少额外的延迟。
如果您匆匆忙忙,可以使用strace (或sysdig SystemTap等)之类的方法来记录通信,尽管strace会大大减慢进程的速度,而且输出将需要后处理;另外两个是内核模块,所以可能不合适。
strace -xx -y -e trace=read,write -p $pid_of_your_program_here在硬件级别,总线、盗用或类似的可能是另一种进入通信的方式。
同时,socat(1)似乎为十六进制选项提供了一个方便的-x:
-x Writes the transferred data not only to their target streams,
but also to stderr. The output format is hexadecimal, prefixed
with "> " or "< " indicating flow directions. Can be combined
with -v .在做了一些实验之后,我可以通过以下方式监听到一个随机的Arduino:
socat -x PTY,link=/dev/blah,raw,wait-slave /dev/serial/by-id/usb-Arduino...然后您的软件可以打开/dev/blah (或者可能通过EXEC运行它?)。注意,在raw路径之后没有指定任何/dev/serial/by-id/usb-Arduino...选项,与该设置一样,当socat试图配置它时,会出现tcgetattr(6, ...): Inappropriate ioctl for device错误。socat输出可能还需要后处理,因为它看起来类似于:
--
2017/10/09 16:32:20 socat[30806] I transferred 1 bytes from 6 to 5
< 2017/10/09 16:32:20.475916 length=31 from=2042 to=2072
52 65 71 75 65 73 74 69 6e 67 20 74 65 6d 70 65 Requesting tempe
72 61 74 75 72 65 73 2e 2e 2e 44 4f 4e 45 0a ratures...DONE.
--https://unix.stackexchange.com/questions/396602
复制相似问题