美文网首页
USB学习笔记四之/proc/bus/usb/devices

USB学习笔记四之/proc/bus/usb/devices

作者: 浙南旧事 | 来源:发表于2021-07-07 20:43 被阅读0次
    1. /proc/bus/usb/devices信息详解

    /proc/bus/usb/devices中的信息主要来自描述符,它以设备为单位,在设备内部再以行为单位显示各种信息。每个设备的信息大致像下面这样:

    T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480  MxCh= 1
    B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
    D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1d6b ProdID=0002 Rev= 4.09
    S:  Manufacturer=Linux 4.9.37 xhci-hcd
    S:  Product=xHCI Host Controller
    S:  SerialNumber=12300000.xhci_0
    C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
    E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms
    

    T是拓扑结构,Lev就是该设备位于拓扑结构中的层次level。Prnt是父设备的设备号(root hub没有父设备,这里固定用0)。Port是设备所挂接hub的端口。对于root hub,Port值固定用0,对于其余设备,Port值用物理端口号减1(物理端口号一般是从1开始计数,减1之后就是从0开始)。Cnt的一般说法是这个level上设备的总数,但这其实是不严谨的。对于root hub,Cnt的值固定为0,对于其余设备,Cnt值更像是一个同level内不同设备的序号(从1开始),因此只有同level内最后一个设备的Cnt值,才可以看做是该level上设备的总数。Dev是设备号,Spd是速度,MxCh是支持的最多子设备数(即hub设备包含的端口数,非hub设备这个值为0)。

    B是带宽信息,只有root hub有这一行。Alloc后的三个数值分别表示分配到的带宽,最大带宽及两者之比。这里的统计是以1毫秒为单位,一般高速或超速设备,最大带宽是预留80%,即800us,低速设备是预留90%。Int是中断请求次数,Iso是同步传输请求次数。

    D是设备描述符,其后的P,S信息也来自设备描述符。Prot是协议Protocol。MxPS是端点0一次可以处理的最大字节数。Cfgs是配置数。

    C是配置描述符,带星号表示是当前生效的配置。Ifs是接口数目,Cfg是配置编号。
    I是接口描述符,注意,这里的一行表示接口的一个设置(setting),带星号表示是该接口当前生效的设置(setting)。因为多个接口可以同时生效,因此就没有当前生效的接口这种说法。If是接口编号,Alt是设置(setting)编号,EPs是端点数。

    E是端点描述符。

    1. 示例拓扑结构

    还是用之前的例子,即在一台主控上插入一个u盘,一个键盘及一个脚踏板,拓扑结构为:

           root hub4            // level 0
               |
              hub               // level 1
               |
            dev(u盘)            // level 2
    
           root hub3            // level 0
               |
              hub               // level 1
               |
     dev(脚踏板) dev(键盘)      // level 2
    
    1. 示例/proc/bus/usb/devices信息

    上述例子的/proc/bus/usb/devices信息为:

    ~ # cat /proc/bus/usb/devices 
    
    T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480  MxCh= 1
    B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
    D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1d6b ProdID=0002 Rev= 4.09
    S:  Manufacturer=Linux 4.9.37 xhci-hcd
    S:  Product=xHCI Host Controller
    S:  SerialNumber=12300000.xhci_0
    C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
    E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms
    
    T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=5000 MxCh= 1
    B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
    D:  Ver= 3.00 Cls=09(hub  ) Sub=00 Prot=03 MxPS= 9 #Cfgs=  1
    P:  Vendor=1d6b ProdID=0003 Rev= 4.09
    S:  Manufacturer=Linux 4.9.37 xhci-hcd
    S:  Product=xHCI Host Controller
    S:  SerialNumber=12300000.xhci_0
    C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
    E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms
    
    T:  Bus=03 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480  MxCh= 1
    B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
    D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1d6b ProdID=0002 Rev= 4.09
    S:  Manufacturer=Linux 4.9.37 xhci-hcd
    S:  Product=xHCI Host Controller
    S:  SerialNumber=12310000.xhci_1
    C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
    E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms
    
    T:  Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480  MxCh= 4
    D:  Ver= 2.10 Cls=09(hub  ) Sub=00 Prot=02 MxPS=64 #Cfgs=  1
    P:  Vendor=0451 ProdID=8142 Rev= 1.00
    S:  SerialNumber=A302086958BF
    C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=01 Driver=hub     // 这个hub设备仅有一个接口,但这个接口有两个设置(setting)
    E:  Ad=81(I) Atr=03(Int.) MxPS=   1 Ivl=256ms
    I:* If#= 0 Alt= 1 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=02 Driver=hub
    E:  Ad=81(I) Atr=03(Int.) MxPS=   1 Ivl=256ms
    
    T:  Bus=03 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#=  5 Spd=1.5  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
    P:  Vendor=055a ProdID=0998 Rev= 0.01
    C:* #Ifs= 2 Cfg#= 1 Atr=a0 MxPwr= 80mA
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=01 Driver=usbhid  // 脚踏板设备有两个接口
    E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=10ms
    I:* If#= 1 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=02 Driver=usbhid
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=10ms
    
    T:  Bus=03 Lev=02 Prnt=02 Port=01 Cnt=02 Dev#=  3 Spd=1.5  MxCh= 0
    D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
    P:  Vendor=413c ProdID=2105 Rev= 3.52
    S:  Manufacturer=Dell
    S:  Product=Dell USB Keyboard
    C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr= 70mA
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=01 Driver=usbhid
    E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=24ms
    
    T:  Bus=04 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=5000 MxCh= 1
    B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
    D:  Ver= 3.00 Cls=09(hub  ) Sub=00 Prot=03 MxPS= 9 #Cfgs=  1
    P:  Vendor=1d6b ProdID=0003 Rev= 4.09
    S:  Manufacturer=Linux 4.9.37 xhci-hcd
    S:  Product=xHCI Host Controller
    S:  SerialNumber=12310000.xhci_1
    C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
    E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms
    
    T:  Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=5000 MxCh= 4
    D:  Ver= 3.00 Cls=09(hub  ) Sub=00 Prot=03 MxPS= 9 #Cfgs=  1
    P:  Vendor=0451 ProdID=8140 Rev= 1.00
    C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
    E:  Ad=81(I) Atr=13(Int.) MxPS=   2 Ivl=16ms
    
    T:  Bus=04 Lev=02 Prnt=02 Port=03 Cnt=01 Dev#=  3 Spd=5000 MxCh= 0
    D:  Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs=  1
    P:  Vendor=152d ProdID=0580 Rev=11.01
    S:  Manufacturer=Dahua
    S:  Product=PSSD
    S:  SerialNumber=DD56419884C86
    C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=896mA
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage  // u盘仅有一个接口,但这个接口有两个设置(setting)
    E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 0 Alt= 1 #EPs= 4 Cls=08(stor.) Sub=06 Prot=62 Driver=usb-storage
    E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    

    相关文章

      网友评论

          本文标题:USB学习笔记四之/proc/bus/usb/devices

          本文链接:https://www.haomeiwen.com/subject/nntaultx.html