怎么查看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 内核中增加程序需要完成以下三项工作:

1. 将编写的源代码复制到 Linux 内核源代码的相应目录;

2. 在目录的 Kconfig 文件中增加新源代码对应项目的编译配置选项;

3. 在目录的 Makefile 文件中增加对新源代码的编译条目。

bq27501驱动编译到内核中具体步骤如下:

1. 先将驱动代码bq27501文件夹复制到 ti-davinci/drivers/ 目录下。

确定bq27501驱动模块应在内核源代码树中处于何处。

设备驱动程序存放在内核源码树根目录 drivers/ 的子目录下,在其内部,设备驱动文件进一步按照类别,类型等有序地组织起来。

a. 字符设备存在于 drivers/char/ 目录下

b. 块设备存放在 drivers/block/ 目录下

c. USB 设备则存放在 drivers/usb/ 目录下。

注意:

(1) 此处的文件组织规则并非绝对不变,例如: USB 设备也属于字符设备,也可以存放在 drivers/usb/ 目录下。

(2) 在 drivers/char/ 目录下,在该目录下同时存在大量的 C 源代码文件和许多其他目录。所有对于仅仅只有一两个源文件的设备驱动程序,可以直接存放在该目录下,但如果驱动程序包含许多源文件和其他辅助文件,那么可以创建一个新子目录。

(3) bq27501的驱动是属于字符设备驱动类别,虽然驱动相关的文件只有两个,但是为了方面查看,将相关文件放在了bq27501的文件夹中。在drivers/char/目录下增加新的设备过程比较简单,但是在drivers/下直接添加新的设备稍微复杂点。所以下面首先陪李给出在drivers/下添加bq27501驱动的过程,然后再简单说明在drivers/char/目录下添加的过程。

2. 在/bq27501下面新建一个Makefile文件。向里面添加代码:

obj-$(CONFIG_BQ27501)+=bq27501.o

此时,构建系统运行做扮就将会进入 bq27501/ 目录下,并且将bq27501.c 编译为 bq27501.o

3. 在/bq27501下面新建Kconfig文件。添加代码:

menu "bq27501 driver"

config BQ27501

tristate"BQ27501"

default y

---help---

Say 'Y' here, it will be compiled into thekernelIf you choose 'M', it will be compiled into a module named asbq27501.ko.

endmenu

注意:help中的文字不能加回车符,否则make menuconfig编译的时候会报错。

4. 修改/drivers目录下的Kconfig文件,在endmenu之前添加一条语句‘source drivers/bq27501/Kconfig’ 对于驱动程序,Kconfig 通常和源代码处于同一目录。 若建立了一个新的目录,而且也希望 Kconfig 文件存在于该目录中的话,那么就必须在一个已存在的 Kconfig 文件中将它引入,需要用上面的语句将其挂接在 drivers 目录中的Kconfig 中。

5. 修改/drivers目下Makefile文件,添加‘obj-$(CONFIG_BQ27501) +=bq27501/’。这行编译指令告诉模块构建系统在编译模块时需要进入 bq27501/ 子目录中。此时的驱动程序的编译取决于一个特殊配置 CONFIG_BQ27501 配置选项。

6. 修改arch/arm目录下的Kconfig文件,在menu "Device Drivers……endmenu"直接添加语句

source "drivers/bq27501/Kconfig" 楼主芦胡迟 学习linux可以看看http://www.linuxprobe.com/chapter-00.html。


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

原文地址: http://outofmemory.cn/bake/11988619.html

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

发表评论

登录后才能评论

评论列表(0条)

保存