Linux usbmon获取的U盘数据
urb标志 ep->id
时间戳 ep->tstamp
事件类型(S-submission, C-Callback, E-submission error) ep->type
端点类型I(中断),C(控制),B(Bulk)和Z(ISOC) utype
数据方向(i或者o) udir
bus总线号 ep->busnum
该bus总线分配到的设备地址 ep->devnum
端点号,对于in端点,为异或^0x80,即去掉第8位1值的数据,比如0x81,那么这里数据为0x81 ^ 0x80 = 1 ep->epnum
接下来的数据根据不同的端点类型将做不同的格式显示
I(中断) : ep->status和ep->interval 显示端点的状态和端点interval中断间隔值[luther.gliethttp]
C(控制) : 如果事件类型为S,那么显示s bmRequestType bRequest wValue wIndex wLength
如果事件类型非S,即C,那么只显示ep->status
B(Bulk) : ep->status 只显示状态
Z(ISOC) : 如果事件类型为S,那么显示ep->status, ep->interval, ep->start_frame
如果事件类型非S,那么显示ep->status, ep->interval, ep->start_frame, ep->error_count
同时显示ep->numdesc,dp->status, dp->offset, dp->length等信息,是组合最多的一个输出
接下来的数据就是ep->length长度了[luther.gliethttp].
再接下来就是mon_text_read_data填充数据了[luther.gliethttp].
1.如果数据长度ep->length为0,那么直接填入一个'\n'换行.
2.如果确实有数据部分,那么先追入' =',然后在=等号后面追加实际数据内容.
3.如果没有数据部分,比如那么将ep->data_flag作为char类型打印出来[luther.gliethttp]
ep->data_flag共有5种数值,由mon_text_get_data()函数返回
3.1 L -- 表示期待数据长度为0
3.2 < -- 表示有数据要上传,后面有需要接收的数据,后面会有IN动作,
表示in类型,后面还有In读取操作需要读取数据,
同时为S-submission或者E-submission error
3.3 > -- 表示数据部分已经成功下发
表示out类型,同时为C-Callback
3.4 Z -- 表示transfer_buffer为NULL
3.5 0 -- 表示成功获取data.
HUB的中断端点1发生中断,状态成功0,中断interval128ms 数据位02
c393e580 531182834 C Ii:1:001:1 0:128 1 = 02
c393e580 531182947 S Ii:1:001:1 -115:128 2 <
a3+00请求是GetPortStatus, wWvlaue=0, port=1, 数据长度4
P427
c3ad3e00 531183571 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
PortStatus为 01010100
分为 0101 和 0100
c3ad3e00 531183633 C Ci:1:001:0 0 4 = 01010100
clear feature
c3ad3e00 531183663 S Co:1:001:0 s 23 01 0010 0001 0000 0
c3ad3e00 531183670 C Co:1:001:0 0 0
c3ad3e00 531183685 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
c3ad3e00 531183691 C Ci:1:001:0 0 4 = 01010000
c3ad3e00 531210077 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
c3ad3e00 531210121 C Ci:1:001:0 0 4 = 01010000
c3ad3e00 531240074 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
c3ad3e00 531240122 C Ci:1:001:0 0 4 = 01010000
c3ad3e00 531270070 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
c3ad3e00 531270113 C Ci:1:001:0 0 4 = 01010000
c3ad3e00 531300076 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
c3ad3e00 531300122 C Ci:1:001:0 0 4 = 01010000
c3ad3e00 531300234 S Co:1:001:0 s 23 03 0004 0001 0000 0
HUB的中断端点1发生中断,状态成功0,中断interval128ms 数据位02
c393e580 531311050 C Ii:1:001:1 0:128 1 = 02
c393e580 531311086 S Ii:1:001:1 -115:128 2 <
c3ad3e00 531315120 C Co:1:001:0 0 0
c3ad3e00 531370081 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
c3ad3e00 531370130 C Ci:1:001:0 0 4 = 03011000
c3ad3e00 531425071 S Co:1:001:0 s 23 01 0014 0001 0000 0
c3ad3e00 531425116 C Co:1:001:0 0 0
c3ad3e00 531426891 S Ci:1:000:0 s 80 06 0100 0000 0040 64 <
c3ad3e00 531427405 C Ci:1:000:0 -62 0
c3ad3e00 531427744 S Ci:1:000:0 s 80 06 0100 0000 0040 64 <
c3ad3e00 531429392 C Ci:1:000:0 -62 0
c3ad3e00 531429667 S Ci:1:000:0 s 80 06 0100 0000 0040 64 <
c3ad3e00 531431393 C Ci:1:000:0 -62 0
c3ad3e00 531431702 S Co:1:001:0 s 23 03 0004 0001 0000 0
c3ad3e00 531445056 C Co:1:001:0 0 0
HUB的中断端点1发生中断,状态成功0,中断interval128ms 数据位02
c393e580 531500034 C Ii:1:001:1 0:128 1 = 02
c393e580 531500082 S Ii:1:001:1 -115:128 2 <
a3+00请求是GetPortStatus, wWvlaue=0, port=1, 数据长度4
c3ad3e00 531500381 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
c3ad3e00 531500428 C Ci:1:001:0 0 4 = 03011300
c3ad3e00 531500454 S Co:1:001:0 s 23 01 0014 0001 0000 0
c3ad3e00 531500462 C Co:1:001:0 0 0
c3ad3e00 531500480 S Co:1:001:0 s 23 01 0001 0001 0000 0
c3ad3e00 531500487 C Co:1:001:0 0 0
c3ad3e00 531501087 S Co:1:001:0 s 23 01 0001 0001 0000 0
c3ad3e00 531501122 C Co:1:001:0 0 0
c3ad3e00 531501157 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
0101 表示有个设备连接上,port是上电状态
0300 不知道什么意思
c3ad3e00 531501165 C Ci:1:001:0 0 4 = 01010300
c3ad3e00 531501178 S Co:1:001:0 s 23 01 0010 0001 0000 0
c3ad3e00 531501185 C Co:1:001:0 0 0
c3ad3e00 531501195 S Co:1:001:0 s 23 01 0011 0001 0000 0
c3ad3e00 531501201 C Co:1:001:0 0 0
c3ad3e00 531501217 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
0101 表示有个设备连接上,port是上电状态
0300 不知道什么意思
c3ad3e00 531501223 C Ci:1:001:0 0 4 = 01010000
c3ad3e00 531530075 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
0101 表示有个设备连接上,port是上电状态
0300 不知道什么意思
c3ad3e00 531530139 C Ci:1:001:0 0 4 = 01010000
c3ad3e00 531560081 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
0101 表示有个设备连接上,port是上电状态
0300 不知道什么意思
c3ad3e00 531560128 C Ci:1:001:0 0 4 = 01010000
c3ad3e00 531590074 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
0101 表示有个设备连接上,port是上电状态
0300 不知道什么意思
c3ad3e00 531590121 C Ci:1:001:0 0 4 = 01010000
c3ad3e00 531620074 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
0101 表示有个设备连接上,port是上电状态
0300 不知道什么意思
c3ad3e00 531620118 C Ci:1:001:0 0 4 = 01010000
c3ad3e00 531620229 S Co:1:001:0 s 23 03 0004 0001 0000 0
c3ad3e00 531635056 C Co:1:001:0 0 0
c3ad3e00 531690076 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
0301 表示有个设备连接上,port是上电状态 低速设备连接到这个port
1000 不知道什么意思
c3ad3e00 531690123 C Ci:1:001:0 0 4 = 03011000
c3ad3e00 531745066 S Co:1:001:0 s 23 01 0014 0001 0000 0
c3ad3e00 531745116 C Co:1:001:0 0 0
//获取设备描述符
80=bmRequestType 06=Get_Desriptor 01(00)=Device 0000=windex 0040=wlength
c3ad3e00 531746898 S Ci:1:000:0 s 80 06 0100 0000 0040 64 <
c3ad3e00 531768392 C Ci:1:000:0 0 18 = 12010002 00000040 11008877 04010102 0301
c3ad3e00 531768748 S Co:1:001:0 s 23 03 0004 0001 0000 0
HUB的中断端点1发生中断,状态成功0,中断interval128ms 数据位02
c393e580 531779080 C Ii:1:001:1 0:128 1 = 02
c393e580 531779127 S Ii:1:001:1 -115:128 2 <
c3ad3e00 531780124 C Co:1:001:0 0 0
a3+00请求是GetPortStatus, wWvlaue=0, port=1, 数据长度4
c3ad3e00 531835078 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
0301 表示有个设备连接上,port是上电状态 低速设备连接到这个port
1000 不知道什么意思
c3ad3e00 531835126 C Ci:1:001:0 0 4 = 03011000
Clear Feature
This request resets a value reported in the port status.
c3ad3e00 531890074 S Co:1:001:0 s 23 01 0014 0001 0000 0
c3ad3e00 531890118 C Co:1:001:0 0 0
//设置地址
00=bmRequestType 05=Set_Address 0003 =Wvalue
c3ad3e00 531890150 S Co:1:000:0 s 00 05 0003 0000 0000 0
c3ad3e00 531911404 C Co:1:000:0 0 0
//获取设备描述符
80=bmRequestType 06=Get_Desriptor 01(00)=Device 0000=windex 0012=wlength
c3ad3e00 531930073 S Ci:1:003:0 s 80 06 0100 0000 0012 18 <
//设备描述符 12 01 0002 00 00 00 40 11008877 04010102 0301
struct usb_device_descriptor {
__u8 bLength; 0x12 描述符长度
__u8 bDescriptorType; 0x01 描述符类型
__le16 bcdUSB; 0x0002 USB版本号
__u8 bDeviceClass; 0x00 USB分配的设备类
__u8 bDeviceSubClass; 0x00 USB分配的子类
__u8 bDeviceProtocol; 0x00 USB分配的协议
__u8 bMaxPacketSize0; 0x40 端点0最大包大小
__le16 idVendor; 0x1100 厂商编号
__le16 idProduct; 0x8877 产品编号
__le16 bcdDevice; 0x0401 设备出厂编号
__u8 iManufacturer; 0x01 描述厂商字符串的索引
__u8 iProduct; 0x02 描述产品字符串的索引
__u8 iSerialNumber; 0x03 描述设备系列号字符串的索引
__u8 bNumConfigurations; 0x01 可能的配置数量
} __attribute__ ((packed));
c3ad3e00 531931415 C Ci:1:003:0 0 18 = 12010002 00000040 11008877 04010102 0301
//获取配置描述符
80=bmRequestType 06=Get_Desriptor 02(00)=configuration 0000=windex 0009=wlength
c3ad3e00 531931773 S Ci:1:003:0 s 80 06 0200 0000 0009 9 <
//配置描述符 09022000 01010080 32
struct usb_config_descriptor {
__u8 bLength; 0x09 描述符长度
__u8 bDescriptorType; 0x02 描述符类型编号
__le16 wTotalLength; 0x2000配置所返回的所有数据的大小
__u8 bNumInterfaces; 0x01 配置所支持的接口数
__u8 bConfigurationValue;0x01 set_configuration 命令需要的参数值
__u8 iConfiguration; 0x00 描述该配置的字符串的索引值
__u8 bmAttributes; 0x80 供电模式的选择
__u8 bMaxPower; 0x32 设备从总线提取的最大电流
} __attribute__ ((packed));
c3ad3e00 531933399 C Ci:1:003:0 0 9 = 09022000 01010080 32
//获取配置描述符+接口描述符+2个端点描述符
c3ad3e00 531933694 S Ci:1:003:0 s 80 06 0200 0000 0020 32 <
获取配置描述符 09022000 01010080 32
接口描述符 090400 00020806 5000
端点描述符1 0705 01024000 00
端点描述符2 070582 02400000
struct usb_interface_descriptor {
__u8 bLength; 0x09 描述符长度
__u8 bDescriptorType; 0x04 描述符类型
__u8 bInterfaceNumber; 0x00 接口编号
__u8 bAlternateSetting; 0x00 备用的接口描述符编号
__u8 bNumEndpoints; 0x02 该接口使用的断点数
__u8 bInterfaceClass; 0x08 接口类型
__u8 bInterfaceSubClass; 0x06 接口子类型
__u8 bInterfaceProtocol; 0x50 接口协议
__u8 iInterface; 0x00 描述该接口的字符串索引值
} __attribute__ ((packed));
端点1 07 05 01 02 4000 00
struct usb_endpoint_descriptor {
__u8 bLength; 0x07 描述符长度
__u8 bDescriptorType; 0x05 描述符类型
__u8 bEndpointAddress; 0x01 端点地址:0~3 为时端点号1,第七位是方向0输出
__u8 bmAttributes; 0x02 端点属性 bit[0:1]的值00控制,01同步,02批量 ,03中断
__le16 wMaxPacketSize; 0x4000本端点接受或发送最大信息包的大小
__u8 bInterval; 0x00
__u8 bRefresh;
__u8 bSynchAddress;
} __attribute__ ((packed));
端点2 07 05 82 02 4000 00
struct usb_endpoint_descriptor {
__u8 bLength; 0x07 描述符长度
__u8 bDescriptorType; 0x05 描述符类型
__u8 bEndpointAddress; 0x82 端点地址:0~3 为时端点号2,第七位是方向1输入
__u8 bmAttributes; 0x02 端点属性 bit[0:1]的值00控制,01同步,02批量 ,03中断
__le16 wMaxPacketSize; 0x4000本端点接受或发送最大信息包的大小
__u8 bInterval; 0x00
__u8 bRefresh;