linux下類似Bus Hound的工具


linux下類似Bus Hound的工具

http://blog.csdn.net/liuqz2009/article/details/7886461

0
推薦在linux大家有時候需要調試usb接口的串口消息,但是沒有類似於windows下的bus hound工具,感覺比較痛苦,其實linux內核提供了usbmon這個工具,可以收集串口信息。

1.准備:

掛接debugfs (這個可以在內核配置中使能),加載usbmon模塊(如果usbmon編譯成模塊). 如果usbmon編譯到內核中的話,第二步可以省略

# mount -t debugfs none_debugs /sys/kernel/debug
# modprobe usbmon
#

確定bus數據已經准備就緒

# ls /sys/kernel/debug/usb/usbmon
0s  0u  1s  1t  1u  2s  2t  2u  3s  3t  3u  4s  4t  4u
#

現在你就可以選擇要么使用'0u'(抓bus上的所有包),並且直接跳到第三步,或者進行第二步找到你設備所在的bus,這樣就過濾掉很多煩人的信息

2. 查找設備所在的bus
運行"cat /proc/bus/usb/devices", 就會發現設備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

命令用來監聽某個bus口,要么你可以監聽所有的bus口

# cat /sys/kernel/debug/usb/usbmon/0u > /tmp/1.mon.out
* 數據格式
現在支持兩種數據格式: '1t'格式和'1u'格式. '1t' 在內核 2.6.21上不支持. '1u'數據格式增加了一些數據項,如:ISO框架信息,間隔時間等.它產生了稍微多余的行,但是確實是'1t'格式的有效補充.
數據內容的詳細說明(從左到右)
- URB Tag. URB地址

- Timestamp, 間隔時間

- Event Type. 時間類型.
支持的類型是: S - submission, C - callback, E - submission error.

- "Address" (通常是一個"管道").它包括4項內容,用冒號分割: URB type ,direction, Bus number, Device address, Endpoint number.
Type和direction被封裝成如下數據格式:
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是十進制數字, 但是他們可能因為閱讀便利而設置成為0.

- URB Status word. 這個要么是字母或者是一些由分號隔開的數字 

- Setup packet, 如果出現的話,包括5個字串: 他們是bmRequestType,bRequest, wValue, wIndex, wLength, (USB Specification 2.0.協議中有詳細介紹)

- 同步號

- Data Length. 數據長度

- Data tag. 即使數據長度不為0,usbmon也不一定總能捕捉到數據,數據包內容只有在此tag為'='才有效

- Data words 大頭十六進制數. 
舉例:
輸入控制得到端口狀態的示例
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口發送一個31字節長度的塊包(其中保存一個SCSI命令 0x5E )到存儲設備
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.mjmwired.net/kernel/Documentation/usb/usbmon.txt
 
======================================================================================================================================================

LinuxUSB驅動程序調試

:這是LinuxUSB驅動程序調試--003:Ubuntu下的准備工作的詳細頁面,介紹了和linux,有關的知識、技巧、經驗,和一些linux源碼等。
Ubuntu下的准備工作:
(1)如何查看內核中的printk輸出: dmesg
    再配合管道命令,   dmesg |head   ,    dmesg |tail
    通過這個命令,我們可以看到內中的printk輸出的內容,這是很有用的一個
    工具。
 
(2)的USB抓包工具:usb_mon
 其實,Ubuntu下已經內置了USB抓包工具---USB_MON 
【其實 make menuconfig 時候會讓我們選擇的】
使用方法如下:
    # mount -t debugfs none /sys/kernel/debug
    # modprobe usbmon
查看當前的USB device:
         # cat  /sys/kernel/debug/usb/devices
         
   下面的輸出:
  T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 12 Spd=480 MxCh= 0
  D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
  P:  Vendor=601a ProdID=4740 Rev= 1.00
  S:  Manufacturer=Ingenic
  S:  Product=JZ4740 USB Boot Device
  C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=  2mA
  I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=50 Driver=skeleton
  E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
  E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
         
  如何看懂上面的輸出?  Documentation/usb/usbmon.txt
  Bus=01 means it's bus 1.
通過上面的 Vendor=601a ProdID 可以找到我們設備的Bus號。
上面Bus=01。
使用下面的名利,就開始監聽 Bus01上的全部USB數據包。
     # cat  /sys/kernel/debug/usb/usbmon/1u
要想開始監聽 全部 Bus 上的全部USB數據包:
     # cat  /sys/kernel/debug/usb/usbmon/0u
     
  一旦有數據包,就會打印出來:
    # cat /sys/kernel/debug/usb/usbmon/1u
      f07dbb80 3233986312 S Co:1:012:0 s 40 01 80c0 0000 0000 0
      f07dbb80 3234327703 C Co:1:012:0 0 0
      f07dbb80 3234327880 S Co:1:012:0 s 40 02 0000 0200 0000 0
      f07dbb80 3234329561 C Co:1:012:0 0 0
      f07dbb80 3234329625 S Bi:1:012:1 -115 32 <
      f07dbb80 3234331550 C Bi:1:012:1 -75 32 = 00000000 00000000  。。。
 
讀懂上面的數據,還是要看usbmon.txt
   URB tag  :標志
   TimeStamp:毫秒數
   Event Type:  S - submission,
                 C - callback,
                 E - submission error.

   URBType:BusNo:DeviceAddr:EndPointNum
          Ci Co   Control input and output
          Zi Zo   Isochronous input and output
          Ii Io   Interrupt input and output
          Bi Bo   Bulk input and output
   URB Status: 0為沒有錯誤。-XXX是錯誤碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM