1

によって生成された USB I/O トラフィックのトレースを解読しようとしてusbmonいますが、エンディアンについて頭を悩ませています。例として、私が使用しているトレースの 2 行を次に示します。

ffff8800650e7000 433121059 S Ci:2:000:0 s 80 06 0100 0000 0040 64 <
ffff8800650e7000 433121661 C Ci:2:000:0 0 18 = 12010002 00000040 da0b8781 00010102 0301

最初は、トレースにビッグエンディアン以外の疑いはまったくありませんでしたが、2 行目に、ベンダー IDと製品 IDda0b8781を持つ、トレースしている USB デバイスの ID に対応するものを見つけました(注:トレース内のバイト順の反転)。 0x0bda0x8187

したがって、この時点で、トレースの特定のフィールド内ではusbmon、バイトは常に逆のバイト順であり、そのように解釈されるべきであると考えました。しかし逆に、最初のトレース ラインの終わり近くの小さな部分を調べてみましょう。... 0040 64

0040受け入れられる最大応答サイズを表す 16 進フィールドです。 64は、まったく同じものを表す 10 進数フィールドです。 0x0040= 6410 進数、バイト順を に切り替えることなく0x4000、!= 6410 進数になります。そのため、この時点で、usbmonトレースのさまざまな部分のバイト順について少し不確かになり始めました。

usbmon次に考えたのは、逆バイト順になっているのはトレースのデータ部分だけかもしれないということです。だから私は本当に読むべきだと思った

...12010002 00000040 da0b8781 00010102 0301

なので

1030 20101000 1878b0ad 04000000 20001021...

いいえ、それも正しくないようです。USB 仕様では、ベンダー ID (0x0bda私の場合) は、この特定の文字列のバイト オフセット 8 にある必要があると規定されています。上記の文字列を元の順序のままにしておくと、ベンダー ID はバイト オフセット 8 から始まります (最初の 8 バイトを消費12010002 00000040 します)。しかし、上記のように逆にすると、バイト オフセット 6 から始まります (1030 20101000最初の 6 バイト)。

したがって、私の最善の推測は、すべてのビッグエンディアンを表示し、各 4 バイトワード内でusbmon逆のバイト順序に切り替わることを受け入れますが、データのみです。これが正しいかどうか、または私が見逃しているものが他にある可能性があるかどうかについて、誰かが明確にすることはできますか?

4

1 に答える 1

2

少し遅れるかもしれませんが、usbmon を試してみました (そして、OK であることがわかりました)。

あなたはevtestを見たいと思うかもしれません

http://www.freedesktop.org/wiki/Evtest

于 2012-12-21T16:02:26.177 に答える