2012-07-31 1 views
0

usbmon에 의해 생성 된 USB I/O 트래픽의 흔적을 해독하려고 시도하고 있으며 endianness에 대한 내 머리를 얻는 데 문제가 있습니다. 예를 위해, 여기에 내가 함께 일하고 추적에서 두 줄입니다 : 내가 처음에 추적에 큰 엔디 언 이외의 어떠한 의심도 없었다usbmon, usb 사양 및 endianness/byte-order

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 

,하지만 나는 두 번째에 da0b8781을 보았다 라인은 추적하고있는 USB 장치의 ID에 해당하며 벤더 ID는 0x0bda이고 제품 ID는 0x8187입니다 (추적에서 바이트 순서의 역전에 유의하십시오).

그래서이 시점에서 나는 usbmon 추적의 주어진 필드 내에서 바이트가 항상 역 바이트 순서이고 그와 같이 해석되어야한다고 생각했습니다. 그러나 반대로 첫 번째 추적 라인의 끝 부분에있는 작은 부분을 살펴 보겠습니다. ... 0040 64

0040은 최대 허용 응답 크기를 나타내는 16 진수 필드입니다. 64은 정확하게 똑같은 것을 나타내는 십진수입니다. 0x0040 = 64바이트 순서를 바꾸지 않고0x4000으로 변경하면 십진수는! 64입니다. 그래서이 시점에서 usbmon 추적의 다른 부분의 바이트 순서에 대해 조금 불확실 해지기 시작했습니다.

다음으로 나는 역 바이트 순서 인 usbmon 추적의 데이터 부분일지도 모른다고 생각했습니다. 그래서 나는 아마도 내가 정말 바로이 될 것 같지 않습니다,

1030 20101000 1878b0ad 04000000 20001021... 

아니로

...12010002 00000040 da0b8781 00010102 0301 

을 읽는해야한다 생각했다. USB 사양은이 특정 문자열에 대해 공급 업체 ID (필자의 경우 0x0bda)가 바이트 오프셋 8에 있어야 함을 나타냅니다. 위의 문자열을 원래 순서대로두면 공급 업체 ID는 바이트 오프셋 8 (12010002 00000040이 처음 8 바이트 사용)에서 시작하지만 위와 같이 역순환하면 바이트 오프셋 6 (1030 20101000 만 시작합니다. 처음 6 바이트를 소비 함).

그래서 최선 추측 지금 usbmon 표시 모든 빅 엔디안, 그것은 내에서 바이트 순서 각각 4 바이트 단어를 반전 스위치를 받아 들일 것입니다,하지만 데이터 만. 누군가가 이것이 옳은지 또는 내가 놓친 뭔가가있을 수 있는지에 대한 명확한 설명을 해줄 수 있습니까?

답변

2

당신을 위해 조금 늦게 될 수도 있지만 나는 usbmon 시도 (그리고 확인을 발견) 한

당신이 살펴 봐야 할 수 있습니다 evtest에서

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