Ubuntu

socat - 監控 USB 埠到標準 CP2102 串列適配器

  • October 9, 2017

我一直在嘗試獲取發送/接收到 CP2102 串列轉換器晶片的 HEX 轉儲。我可以找到人們監控硬體串列埠 /dev/TTYS0 等的例子。

socat -d -d pty,link=/dev/ttyUSB0,raw,echo=0 pty,link=/dev/ttyUSB1,raw,echo=0

有誰知道可以告訴我如何監控這樣的 USB 埠的資源?到目前為止,沒有任何效果。也許我只是不明白串列監控的重新路由方面還是什麼?

如果可能,最簡單的方法可能是調整軟體以發出十六進制。大多數軟體可能已經具有sdio.h(或等效的)和十六進制的串列數據,只需要printf呼叫(或等效)傳入和傳出串列文件描述符的數據。來回傳送數據的額外過程沒有復雜性,並且幾乎沒有額外的延遲。

如果您趕時間,可以使用strace(或等)之類的東西來記錄通信,但會減慢程序很多,並且輸出將需要後處理;另外兩個是核心模組,因此可能不合適。sysdig SystemTap``strace

strace -xx -y -e trace=read,write -p $pid_of_your_program_here

在硬體層面,Bus Pirate 或類似的可能是另一種接入通信的方式。

同時,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...``tcgetattr(6, ...): Inappropriate ioctl for device``socat``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