2009-06-02 78 views
22

我正在調試與串行設備的通信,我需要查看所有數據流向兩個方向。如何在Linux中監控串口上的數據?

在Linux上,這似乎應該很容易,其中串行端口由文件表示。有什麼辦法可以做一種「雙向T恤」,我告訴我的程序連接到一個管道,它將數據複製到一個文件中,並且還將其拖放到實際的串口設備上/從中?

我想我可能甚至知道如何寫這樣的野獸,但似乎不平凡的,特別是讓所有通過端口配置通過讀寫控制等

有沒有人已經建成這樣的事?它似乎太有用(對於調試串行設備驅動程序的人員)已不存在。

+6

那麼......你是怎麼做到的? – detly 2011-02-10 05:16:51

+1

是的,我也會有興趣知道,因爲我至今未能理解如何使用strace。乾杯! – mac 2012-09-09 19:50:28

+1

這可能會對那些與給定的答案掙扎的人感興趣:http://unix.stackexchange.com/questions/12359/how-can-i-monitor-serial-port-traffic – geekboyUK 2013-01-01 23:12:27

回答

18

strace對此非常有用。您可以看到所有ioctl調用,並解碼相應的結構。下列選項似乎在你的情況下尤其有用:

-e讀=設置

執行從 指定集中列出 文件描述符讀取的所有數據的完整十六進制和ASCII轉儲。例如,要查看文件描述符3 和5中的所有 輸入活動,請使用-e read = 3,5。請注意,此 獨立於read(2)系統調用的正常跟蹤 ,該系統調用是由選項-e trace = read控制的 。

-e寫=設置

執行所有寫入到文件中指定的 集中列出 描述了數據的完整十六進制和ASCII 轉儲。例如,要查看文件描述符3和5 上的所有輸出 活動,請使用-e write = 3,5。請注意,這是 獨立於正常跟蹤 寫入(2)系統調用是 控制的選項-e trace =寫入。

3

我發現pyserial是非常有用的,所以如果你使用Python,寫這樣的東西不應該太難。

2

一個簡單的方法是編寫一個應用程序,該應用程序打開一個pty的主控方和被測試的tty。然後,您將 將您的tty應用程序作爲'tty設備'傳遞給pty的從屬端。

你將不得不監察PTY對pty 主與tcgetattr()屬性和對現實TTY呼叫tcsetattr(),如果屬性改變。

其餘的將是一個簡單的select()兩個fd的雙向複製數據並將其複製到日誌。

1

我看了很多串口嗅探器。所有這些都基於從該端口創建虛擬串行端口和嗅探數據的想法。但是,任何波特/奇偶校驗/流量更改都會中斷連接。

所以,我寫了我自己的嗅探器:)。現在大多數串口只是USB轉串口轉換器。我的嗅探器通過debugfs從USB中收集數據,解析並輸出到控制檯。此外還會記錄任何波特率變化,流量控制,線路事件和串行錯誤。該項目正處於發展的早期階段,目前僅支持FTDI。

http://code.google.com/p/uscmon/