Linux kernel 組込みの USB サブシステムをモニタする仕組み(usbmon)について紹介します。debugfs の活用例としても参考になるのではないでしょうか。
Linux kernel 2.6.21以降を
を有効にしてコンパイルした環境が必要です。
# mount -t debugfs none /sys/kernel/debugすればよいでしょう。
# modprobe usbmon
以上の手順を実行すると、debugfs の下(/sys/kernel/debug/usbmon/) に、「番号 + "s"/"t"/"u"」 という仮想ファイル群が生成されているはずです。
$ ls /sys/kernel/debug/usbmon/ 0s 0u 1t 2s 2u 3t 4s 4u 5t 6s 6u 0t 1s 1u 2t 3s 3u 4t 5s 5u 6t
実際に何個のファイルが見えるかは、システム構成によります。
「USBバス番号 + 'u'」という名前のファイルに、USBの通信内容が配送されます。
とりあえずバス番号に 0 を指定して("0u"を使って)、全通信を監視してみるとよいでしょう。
# cat /sys/kernel/debug/usbmon/0u dfaac8c0 2557329542 S Bo:5:004:2 -115 31 = 55534243 214b0100 00000000 00000600 00000000 00000000 00000000 000000 dfaac8c0 2557329639 C Bo:5:004:2 0 31 > dfaac8c0 2557329649 S Bi:5:004:2 -115 13 < dfaac8c0 2557331148 C Bi:5:004:2 0 13 = 55534253 214b0100 00000000 01 dfaac8c0 2557331171 S Bo:5:004:2 -115 31 = 55534243 224b0100 12000000 80000603 00000012 00000000 00000000 000000 dfaac8c0 2557331388 C Bo:5:004:2 0 31 >
行の内容は以下のようになっています。
特定のデバイスだけを監視したい場合、lsusb の結果を参考にするとよいでしょう。たとえば
$ lsusb |grep PL2303 Bus 005 Device 005: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
のようになっていた場合、 PL2303(USB-シリアルコンバータ)が5番に接続されているので、5uを使えばよいことがわかります。
疑似ファイルには他に 't'/'s'でおわるものがあります。
'*t' は互換性のために残されている古い書式の疑似ファイルなので、通常使用する必要はないでしょう。
'*s' からは usbmon 自体の動作状況を読むことができます。たとえば
# cat /sys/kernel/debug/usbmon/5s nreaders 1 events 350 text_lost 0
なら、
ことがわかります。
's' で終わるファイル群の処理では排他制御が考慮されないため、このインターフェース経由に高負荷をかける場合は何をしているのかよく理解した上で行なってください。