1、概述
usbmon是linux内核的一个小工具,主要是用来收集在USB总线上进行I/O操作记录。这个功能类似于工具(如tcpdump、Ethereal)进行网络套接字监控。
2、使用方法
(1)准备
挂载debugfs文件系统(需要内核配置使能),然后加载usbmon模块(如果以模块方式编译)。如果是编译进内核,则不需要加载usbmon。
# mount -t debugfs none_debugs /sys/kernel/debug
# modprobe usbmon
#
(2)查看usbmon监控可以识别到的设备号
# ls /sys/kernel/debug/usb/usbmon
0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u
#
(3)找到所需监控的总线编号
运行“cat /sys/kernel/debug/usb/devices”。分别设备的信息,包括设备描述、Vendor、ProdID等。例如:
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"指的是3号总线。通常使用使用lsusb得到设备的总线号。例如:
Bus 003 Device 002: ID 0557:2004 ATEN UC100KM V2.00
(4)抓取
如果想只抓取3号总线,则:
# cat /sys/kernel/debug/usb/usbmon/3u > /tmp/1.mon.out
如果想抓取所有总线,则
# cat /sys/kernel/debug/usb/usbmon/0u > /tmp/1.mon.out
这个进程会一直获取,直到被杀死。
(5)操作USB设备
此时可以对设备操作以创造一些总线流量,例如可以插入flash设备、复制文件、控制网络摄像头等等。
(6)关闭cat
通常使用Control-C结束cat进程,此时保存的内容在/tmp/1.mon.out里。