|
0 推薦在linux大家有時候需要調(diào)試usb接口的串口消息,但是沒有類似于windows下的bus hound工具,感覺比較痛苦,其實linux內(nèi)核提供了usbmon這個工具,可以收集串口信息。 1.準(zhǔn)備: 掛接debugfs (這個可以在內(nèi)核配置中使能),加載usbmon模塊(如果usbmon編譯成模塊). 如果usbmon編譯到內(nèi)核中的話,第二步可以省略 # mount -t debugfs none_debugs /sys/kernel/debug # modprobe usbmon # 確定bus數(shù)據(jù)已經(jīng)準(zhǔn)備就緒 # ls /sys/kernel/debug/usb/usbmon 0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u # 現(xiàn)在你就可以選擇要么使用'0u'(抓bus上的所有包),并且直接跳到第三步,或者進行第二步找到你設(shè)備所在的bus,這樣就過濾掉很多煩人的信息 2. 查找設(shè)備所在的bus 運行"cat /proc/bus/usb/devices", 就會發(fā)現(xiàn)設(shè)備T開頭的行.T行有一個bus口,如下所示 T: Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0 D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0557 ProdID=2004 Rev= 1.00 S: Manufacturer=ATEN S: Product=UC100KM V2.00 Bus=03 說明它在bus3口上 3. 開始查看信息 # cat /sys/kernel/debug/usb/usbmon/3u > /tmp/1.mon.out 命令用來監(jiān)聽某個bus口,要么你可以監(jiān)聽所有的bus口 # cat /sys/kernel/debug/usb/usbmon/0u > /tmp/1.mon.out * 數(shù)據(jù)格式 現(xiàn)在支持兩種數(shù)據(jù)格式: '1t'格式和'1u'格式. '1t' 在內(nèi)核 2.6.21上不支持. '1u'數(shù)據(jù)格式增加了一些數(shù)據(jù)項,如:ISO框架信息,間隔時間等.它產(chǎn)生了稍微多余的行,但是確實是'1t'格式的有效補充. 數(shù)據(jù)內(nèi)容的詳細說明(從左到右) - URB Tag. URB地址 - Timestamp, 間隔時間 - Event Type. 時間類型. 支持的類型是: S - submission, C - callback, E - submission error. - "Address" (通常是一個"管道").它包括4項內(nèi)容,用冒號分割: URB type ,direction, Bus number, Device address, Endpoint number. Type和direction被封裝成如下數(shù)據(jù)格式: Ci Co Control input and output Zi Zo Isochronous input and output Ii Io Interrupt input and output Bi Bo Bulk input and output Bus number, Device address, 和Endpoint是十進制數(shù)字, 但是他們可能因為閱讀便利而設(shè)置成為0. - URB Status word. 這個要么是字母或者是一些由分號隔開的數(shù)字 - Setup packet, 如果出現(xiàn)的話,包括5個字串: 他們是bmRequestType,bRequest, wValue, wIndex, wLength, (USB Specification 2.0.協(xié)議中有詳細介紹) - 同步號 - Data Length. 數(shù)據(jù)長度 - Data tag. 即使數(shù)據(jù)長度不為0,usbmon也不一定總能捕捉到數(shù)據(jù),數(shù)據(jù)包內(nèi)容只有在此tag為'='才有效 - Data words 大頭十六進制數(shù). 舉例: 輸入控制得到端口狀態(tài)的示例 d5ea89a0 3575914555 S Ci:1:001:0 s a3 00 0000 0003 0004 4 < d5ea89a0 3575914560 C Ci:1:001:0 0 4 = 01050000 通過bus5口發(fā)送一個31字節(jié)長度的塊包(其中保存一個SCSI命令 0x5E )到存儲設(shè)備 dd65f0e8 4128379752 S Bo:1:005:2 -115 31 = 55534243 5e000000 00000000 00000600 00000000 00000000 00000000 000000 dd65f0e8 4128379808 C Bo:1:005:2 0 31 > 詳細信息請參閱:http://www./kernel/Documentation/usb/usbmon.txt |
|
|
來自: lchjczw > 《USB調(diào)試》