lsusb、usbfs查看usb拓扑结构

usb拓扑结构

在调试USB设备时,常常需要查看设备的状态以及获得设备的信息。这里的拓扑结构是获得总线、设备、端口等相关的拓扑图。有两个比较方便的方法一个是lsusb工具,一个是挂载usbfs文件系统,通过/proc目录将信息导出来。usb常见的拓扑架构如下:



lsusb在PC上都有,usbfs挂载依赖于/proc/bus/usb/,但是其和udev冲突,Ubuntu在2.6.31.18还有该目录, 但是2.6.31.20版本以及以后的就不再有该目录了。

usbfs

重新编译内核开启 内核如下选项即可(嵌入式系统常用该方法):

     Device Drivers  ---> 

 [*] USB support  ---> 

 --- USB support 

   [*]     USB device filesystem (DEPRECATED) 

首先挂载usbfs文件系统,

mount -t usbfs none /proc/bus/usb

使用cat /proc/bus/usb/devices



其输出的意义如下:

T---topology,表示的是拓扑结构上的意思。

Bus:是其所在的usb总线号,一个总线号会对应一个rootHub,并且一个总线号对应的设备总数<=127,这是倒不是因为电气特性限制,而是因为USB规范中规定用7bit寻址设备,第八个bit用于标识数据流向。00就是0号总线。

Lev:该设备所在层,这个Lev信息看图最明显了。

Prnt:parent Devicenumber父设备的ID号,rootHUb没有父设备,该值等于零,其它的设备的父设备一定指向一个hub。

port:该设备连接的端口号,这里指的端口号是下行端口号,并且一个hub通常下行端口号有多个,上行端口号只有一个。

Cnt:这个Lev上设备的总数,hub也会计数在内,hub也是usb设备,其是主机控制器和usb设备通信的桥梁。

Dev:是设备号,按顺序排列的,一个总线上最多挂127个;可以有多个总线。

spd:设备的速率,12M(1.1)、480M(2.0)等。

MxCh:最多挂接的子设备个数,这个数值通常对应于HuB的下行端口号个数。

B---Band width

Alloc:该总线分配得到的带宽

Int:中断请求数

ISO:同步传输请求数,USB有四大传输,中断、控制、批量和同步。

D--Device Descriptor 设备描述符。

Ver:设备USB版本号。

Cls:设备的类(hub的类是9),

sub:设备的子类

Prot:设备的协议

MxPS:default 端点的最大packet size

Cfgs: 配置的个数;USB里共有四大描述符,它们是设备描述符、端点描述符、接口描述符和配置描述符。

P---设备信息

Vendor: 厂商ID,Linuxfoundation的ID是1d6b,http://www.linux-usb.org/usb.ids

Rev: 校订版本号

S---Manufacturer

S---产品

S---序列号

C---*配置描述信息

#Ifs:接口的数量,

Atr:属性

MxPwr:最大功耗,USB设备供电有两种方式,self-powered和bus-powered两种方式,驱动代码会判断设备标志寄存器是否过流的。最大500mA。

I--描述接口的接口描述符

If#:接口号

Alt:接口属性

#EPs:接口具有的端点数量,端点零必须存在,在USB设备addressed之前,会使用该端口配置设备。

Cls:接口的类

Sub:接口的子类

Prot:接口的协议

Driver:驱动的名称。

E---端点描述符

Ad(s):端点地址,括号的s为I或者O表示该端点是输入还是输出端点。

Atr(sss):端点的属性,sss是端点的类型,对应上述的四大传输类型。

MxPS:端点具有的最大传输包

Ivl:传输间的间隔。


根据上述的拓扑结构绘制拓扑图如下:



lsusb

上述cat /proc/bus/usb/devices输出的内容,对应lusb -t输出如下:


如果很想编译的Linux内核尽量小,没有第一种方法,嵌入式环境常用以下方法:

1、lsusb下载地址如下:

http://sourceforge.net/projects/libusb/?source=typ_redirect


嵌入式环境下,使用交叉编译./configure CC=arm-linux- gcc --host=arm-linux --prefix=${INSTALL DIRECTORY}


不同版本的lsusb输出结果可能不同,可以使用man lsusb命令详细查看。

比如以下为较新的lsusb输出。
PC 下lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 1: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/7p, 12M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M



   


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shichaog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值