1. dmesg 内核工具的使用查看相关usb相关信息: dmesg |head , dmesg |tail
2. linux USB抓包工具:usb_mon
# mount -t debugfs none /sys/kernel/debug
# modprobe usbmon
查看当前的USB device: # cat /sys/kernel/debug/usb/devices
下面的输出:
T: Bus=02 Lev=02 Prnt=03 Port=00 Cnt=01 Dev#= 6 Spd=12 MxCh= 0
D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0400 ProdID=c35a Rev= 0.63
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=00(>ifc ) Sub=00 Prot=00 Driver=(none)
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
看懂上面的输出 Bus=01 means it's bus 1.
通过上面的P: Vendor=0400 ProdID=c35a Rev= 0.63 该设备在总线 Bus 2上。
3.使用下面指令开始监听 Bus01上的全部USB数据包。
# cat /sys/kernel/debug/usb/usbmon/1u
4.要想开始监听 全部 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
读懂上面的数据,
URB tag :标志
TimeStamp:毫秒数
Event Type : S - submission(请求);C - callback(回复);E - submission error.
URBType :BusNo:DeviceAddr:EndPointNum
URBType: 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是错误码。