怎么查看linux usb设备驱动

怎么查看linux usb设备驱动,第1张

下面的信息都是在VMware中运行Ubuntu12-04系统上执行的。同样该命令也支持在嵌入式系统中进行USB调试。

一、cat设备节点获取信息

在一些嵌入式开发中需要调试USB功能,经常会cat /sys 下的相关设备节点来查看某些信息,比如说我们可以看到 /sys/bus/usb/devices 目录有多个子目录。进入到某个子目录可以看到usb设备更加详细的信息(可以理解为设备描述符)。

1、usb设备在总线上的信息

// usb设备在总线上的信息

root@ubuntu:/sys/kernel/debug# cd /sys/bus/usb/devices

root@ubuntu:/sys/bus/usb/devices# ll

total 0

drwxr-xr-x 2 root root 0 Nov 26 21:21 ./

drwxr-xr-x 4 root root 0 Nov 26 21:21 ../

lrwxrwxrwx 1 root root 0 Nov 26 21:21 1-0:1.0 ->../../../devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-0:1.0/

lrwxrwxrwx 1 root root 0 Dec 15 23:10 1-1 ->../../../devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1/

lrwxrwxrwx 1 root root 0 Dec 15 23:18 1-1:1.0 ->../../../devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1/1-1:1.0/

lrwxrwxrwx 1 root root 0 Nov 26 21:21 2-0:1.0 ->../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-0:1.0/

lrwxrwxrwx 1 root root 0 Nov 26 21:21 2-1 ->../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-1/

lrwxrwxrwx 1 root root 0 Nov 26 21:21 2-1:1.0 ->../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-1/2-1:1.0/

lrwxrwxrwx 1 root root 0 Nov 26 21:21 2-2 ->../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-2/

lrwxrwxrwx 1 root root 0 Nov 26 21:21 2-2:1.0 ->../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-2/2-2:1.0/

lrwxrwxrwx 1 root root 0 Nov 26 21:21 usb1 ->../../../devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/

lrwxrwxrwx 1 root root 0 Nov 26 21:21 usb2 ->../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/

其中 usbx/第x个总线,x-y:a.b/的目录格式,x表示总线号,y表示端口,a表示配置,b表示接口。

具体解释可以参照如下:

The names that begin with "usb" refer to USB controllers. More accurately, they refer to the "root hub" associated with each controller. The number is the USB bus number. In the example there is only one controller, so its bus is number 1. Hence the name "usb1".

"1-0:1.0" is a special case. It refers to the root hub's interface. This acts just like the interface in an actual hub an almost every respectsee below.

All the other entries refer to genuine USB devices and their interfaces. The devices are named by a scheme like this:

bus-port.port.port ...

In other words, the name starts with the bus number followed by a '-'. Then comes the sequence of port numbers for each of the intermediate hubs along the path to the device.

For example, "1-1" is a device plugged into bus 1, port 1. It happens to be a hub, and "1-1.3" is the device plugged into port 3 of that hub. That device is another hub, and "1-1.3.1" is the device plugged into its port 1.

The interfaces are indicated by suffixes having this form:

:config.interface

That is, a ':' followed by the configuration number followed by '.' followed by the interface number. In the above example, each of the devices is using configuration 1 and this configuration has only a single interface, number 0. So the interfaces show up as

1-1:1.0 1-1.3:1.0 1-1.3.1:1.0

A hub will never have more than a single interfacethat's part of the USB spec. But other devices can and do have multiple interfaces (and sometimes multiple configurations). Each interface gets its own entry in sysfs and can have its own driver.

2、特定设备的详细信息

进入到某个目录中去,可以看到该设备的详细信息,可用cat命令获取信息。

// usb设备的详细信息

root@ubuntu:/sys/bus/usb/devices/usb1# ll

total 0

drwxr-xr-x 6 root root 0 Nov 26 21:21 ./

drwxr-xr-x 4 root root 0 Nov 26 21:21 ../

drwxr-xr-x 10 root root 0 Nov 26 21:21 1-0:1.0/

drwxr-xr-x 5 root root 0 Dec 15 23:10 1-1/

-rw-r--r-- 1 root root 4096 Dec 15 23:40 authorized

-rw-r--r-- 1 root root 4096 Dec 15 23:40 authorized_default

-rw-r--r-- 1 root root 4096 Dec 15 23:40 avoid_reset_quirk

-r--r--r-- 1 root root 4096 Nov 26 21:21 bcdDevice

-rw-r--r-- 1 root root 4096 Nov 26 21:21 bConfigurationValue

-r--r--r-- 1 root root 4096 Nov 26 21:21 bDeviceClass

-r--r--r-- 1 root root 4096 Nov 26 21:21 bDeviceProtocol

-r--r--r-- 1 root root 4096 Nov 26 21:21 bDeviceSubClass

-r--r--r-- 1 root root 4096 Dec 15 23:40 bmAttributes

-r--r--r-- 1 root root 4096 Dec 15 23:40 bMaxPacketSize0

-r--r--r-- 1 root root 4096 Dec 15 23:40 bMaxPower

-r--r--r-- 1 root root 4096 Dec 15 23:40 bNumConfigurations

-r--r--r-- 1 root root 4096 Dec 15 23:40 bNumInterfaces

-r--r--r-- 1 root root 4096 Nov 26 21:21 busnum

-r--r--r-- 1 root root 4096 Dec 15 23:40 configuration

-r--r--r-- 1 root root 65553 Nov 26 21:21 descriptors

-r--r--r-- 1 root root 4096 Dec 15 23:40 dev

-r--r--r-- 1 root root 4096 Nov 26 21:21 devnum

-r--r--r-- 1 root root 4096 Dec 15 23:40 devpath

lrwxrwxrwx 1 root root 0 Nov 27 20:06 driver ->../../../../../bus/usb/drivers/usb/

drwxr-xr-x 3 root root 0 Dec 15 23:40 ep_00/

-r--r--r-- 1 root root 4096 Nov 26 21:21 idProduct

-r--r--r-- 1 root root 4096 Nov 26 21:21 idVendor

-r--r--r-- 1 root root 4096 Dec 15 23:40 ltm_capable

-r--r--r-- 1 root root 4096 Nov 26 21:21 manufacturer

-r--r--r-- 1 root root 4096 Dec 15 23:40 maxchild

drwxr-xr-x 2 root root 0 Nov 26 21:21 power/

-r--r--r-- 1 root root 4096 Nov 26 21:21 product

-r--r--r-- 1 root root 4096 Dec 15 23:40 quirks

-r--r--r-- 1 root root 4096 Nov 26 21:21 removable

--w------- 1 root root 4096 Dec 15 23:40 remove

-r--r--r-- 1 root root 4096 Nov 26 21:21 serial

-r--r--r-- 1 root root 4096 Nov 26 21:21 speed

lrwxrwxrwx 1 root root 0 Nov 26 21:21 subsystem ->../../../../../bus/usb/

-rw-r--r-- 1 root root 4096 Nov 26 21:21 uevent

-r--r--r-- 1 root root 4096 Dec 15 23:40 urbnum

-r--r--r-- 1 root root 4096 Dec 15 23:40 version

二、使用debugfs

1、挂载 debugfs 到 /sys/kernel/debug 路径下

root@ubuntu:mount -t debugfs none /sys/kernel/debug

2、执行上述步骤之后,在 /sys/kernel/debug 就会生成如下的文件

root@ubuntu:/sys/bus/usb/devices# cd /sys/kernel/debug/

root@ubuntu:/sys/kernel/debug# ll

total 0

drwx------ 22 root root 0 Nov 26 21:21 ./

drwxr-xr-x 7 root root 0 Nov 26 21:21 ../

drwxr-xr-x 2 root root 0 Nov 26 21:21 acpi/

drwxr-xr-x 32 root root 0 Dec 4 16:30 bdi/

drwxr-xr-x 2 root root 0 Nov 26 21:21 bluetooth/

drwxr-xr-x 2 root root 0 Nov 26 21:21 cleancache/

drwxr-xr-x 2 root root 0 Nov 26 21:21 dma_buf/

drwxr-xr-x 4 root root 0 Nov 26 21:21 dri/

drwxr-xr-x 2 root root 0 Nov 26 21:21 dynamic_debug/

drwxr-xr-x 2 root root 0 Nov 26 21:21 extfrag/

drwxr-xr-x 2 root root 0 Nov 26 21:21 frontswap/

-r--r--r-- 1 root root 0 Nov 26 21:21 gpio

drwxr-xr-x 3 root root 0 Nov 26 21:21 hid/

drwxr-xr-x 2 root root 0 Nov 26 21:21 kprobes/

drwxr-xr-x 3 root root 0 Nov 26 21:21 kvm-guest/

drwxr-xr-x 2 root root 0 Nov 26 21:21 mce/

drwxr-xr-x 2 root root 0 Nov 26 21:21 pinctrl/

-r--r--r-- 1 root root 0 Nov 26 21:21 pwm

drwxr-xr-x 2 root root 0 Nov 26 21:21 regmap/

drwxr-xr-x 3 root root 0 Nov 26 21:21 regulator/

-rw-r--r-- 1 root root 0 Nov 26 21:21 sched_features

-r--r--r-- 1 root root 0 Nov 26 21:21 sleep_time

-r--r--r-- 1 root root 0 Nov 26 21:21 suspend_stats

drwxr-xr-x 7 root root 0 Nov 26 21:21 tracing/

drwxr-xr-x 3 root root 0 Nov 26 21:21 usb/

drwxr-xr-x 2 root root 0 Nov 26 21:21 virtio-ports/

-r--r--r-- 1 root root 0 Nov 26 21:21 vmmemctl

-r--r--r-- 1 root root 0 Nov 26 21:21 wakeup_sources

drwxr-xr-x 2 root root 0 Nov 26 21:21 x86/

3、cat 设备节点

执行下述命令之后会以特定格式打印目前USB总线上所有USB设备的信息如下:

root@ubuntu:/sys/kernel/debug# cat usb/devices

T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2

B: Alloc= 17/900 us ( 2%), #Int= 1, #Iso= 0

D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1

P: Vendor=1d6b ProdID=0001 Rev= 3.13

S: Manufacturer=Linux 3.13.0-32-generic uhci_hcd

S: Product=UHCI Host Controller

S: SerialNumber=0000:02:00.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= 2 Ivl=255ms

T: Bus=02 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=0e0f ProdID=0003 Rev= 1.03

S: Manufacturer=VMware

S: Product=VMware Virtual USB Mouse

C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 0mA

I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=usbhid

E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=1ms

T: Bus=02 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 3 Spd=12 MxCh= 7

D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1

P: Vendor=0e0f ProdID=0002 Rev= 1.00

S: Product=VMware Virtual USB Hub

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= 1 Ivl=255ms

T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 6

B: Alloc= 0/800 us ( 0%), #Int= 1, #Iso= 0

D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1

P: Vendor=1d6b ProdID=0002 Rev= 3.13

S: Manufacturer=Linux 3.13.0-32-generic ehci_hcd

S: Product=EHCI Host Controller

S: SerialNumber=0000:02:03.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=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 7 Spd=480 MxCh= 0

D: Ver= 2.00 Cls=ff(vend.) Sub=ff Prot=ff MxPS=64 #Cfgs= 1

P: Vendor=0bda ProdID=0129 Rev=39.60

S: Manufacturer=Generic

S: Product=USB2.0-CRW

S: SerialNumber=20100201396000000

C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=500mA

I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=06 Prot=50 Driver=rts5139

E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms

E: Ad=83(I) Atr=03(Int.) MxPS= 3 Ivl=64ms

至于信息的详细解析可以参照 Linux源代码中 Documentation/usb/proc_usb_info.txt 文件。现摘录其中对该格式的详细解释:

| | |__Product ID code

| |__Vendor ID code

|__Device info tag #2

String descriptor info:

S: Manufacturer=ssss

| |__Manufacturer of this device as read from the device.

| For USB host controller drivers (virtual root hubs) this may

| be omitted, or (for newer drivers) will identify the kernel

| version and the driver which provi

linux

主机的硬件配备

lspci

找到的是目前主机上面的硬件配备

[root@www

~]#

lspci

[-vvn]

选项与参数:

-v

:显示更多的

pci

接口装置的详细信息

-vv

:比

-v

还要更详细的信息

-n

:直接观察

pci

id

而不是厂商名称

查阅您系统内的

pci

装置:

[root@www

~]#

lspci

#不必加上任何选项,就能够显示出目前的硬件配备为何

host

bridge:

<==主板芯片

vga

compatible

controller

<==显卡

audio

device

<==音频设备

pci

bridge

<==接口插槽

usb

controller

<==usb控制器

isa

bridge

ide

interface

smbus

ethernet

controller

<==网卡

04:00.0

ethernet

controller:

realtek

semiconductor

co.,

ltd.

查看一般详细信息

[root@www

~]#

lspci

-v

查看网卡详细信息:

[root@www

~]#

lspci

-s

04:00.0

-vv

-s

:后面接的是每个设备的总线、插槽与相关函数功能

USB采用树形拓扑结构,主机侧和设备侧的USB控制器分别称为主机控制器((Host Controller)和USB设备控制器(UDC),每条总线上只有一个主机控制器,负责协调主机和设备间的通信,而设备不能主动向主机发送任何消息。

在Linux系统中,USB驱动可以从两个角度去观察,一个角度是主机侧,一个角度是设备侧。从上图主机侧去看,在Linux驱动中,处于USB驱动最底层的是USB主机控制器硬件,在其上运行的是USB主机控制器驱动,在主机控制器上的为USB核心层,再上层为USB设备驱动层(插入主机上的U盘、鼠标、USB转串口等设备驱动)。因此,在主机侧的层次结构中,要实现的USB驱动包括两类:USB主机控制器驱动和USB设备驱动,前者控制插入其中的USB设备,后者控制USB设备如何与主机通信。Linux内核中的USB核心负责USB驱动管理和协议处理的主要工作。主机控制器驱动和设备驱动之间的USB核心非常重要,其功能包括:通过定义一些数据结构、宏和功能函数,向上为设备驱动提供编程接口,向下为USB主机控制器驱动提供编程接口维护整个系统的USB设备信息完成设备热插拔控制、总线数据传输控制等。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/6259444.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-19
下一篇2023-03-19

发表评论

登录后才能评论

评论列表(0条)

    保存