0 推薦在linux大家有時(shí)候需要調(diào)試usb接口的串口消息,但是沒有類似于windows下的bus hound工具,感覺比較痛苦,其實(shí)linux內(nèi)核提供了usbmon這個(gè)工具,可以收集串口信息。 1.準(zhǔn)備: 掛接debugfs (這個(gè)可以在內(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上的所有包),并且直接跳到第三步,或者進(jìn)行第二步找到你設(shè)備所在的bus,這樣就過濾掉很多煩人的信息 2. 查找設(shè)備所在的bus 運(yùn)行"cat /proc/bus/usb/devices", 就會(huì)發(fā)現(xiàn)設(shè)備T開頭的行.T行有一個(gè)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)聽某個(gè)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ù)項(xiàng),如:ISO框架信息,間隔時(shí)間等.它產(chǎn)生了稍微多余的行,但是確實(shí)是'1t'格式的有效補(bǔ)充. 數(shù)據(jù)內(nèi)容的詳細(xì)說明(從左到右) - URB Tag. URB地址 - Timestamp, 間隔時(shí)間 - Event Type. 時(shí)間類型. 支持的類型是: S - submission, C - callback, E - submission error. - "Address" (通常是一個(gè)"管道").它包括4項(xiàng)內(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是十進(jìn)制數(shù)字, 但是他們可能因?yàn)殚喿x便利而設(shè)置成為0. - URB Status word. 這個(gè)要么是字母或者是一些由分號隔開的數(shù)字 - Setup packet, 如果出現(xiàn)的話,包括5個(gè)字串: 他們是bmRequestType,bRequest, wValue, wIndex, wLength, (USB Specification 2.0.協(xié)議中有詳細(xì)介紹) - 同步號 - Data Length. 數(shù)據(jù)長度 - Data tag. 即使數(shù)據(jù)長度不為0,usbmon也不一定總能捕捉到數(shù)據(jù),數(shù)據(jù)包內(nèi)容只有在此tag為'='才有效 - Data words 大頭十六進(jìn)制數(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ā)送一個(gè)31字節(jié)長度的塊包(其中保存一個(gè)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 > 詳細(xì)信息請參閱:http://www./kernel/Documentation/usb/usbmon.txt |
|