探索 Linux 下USB 的侦测力(linuxusb检测)

随着现代计算机的普及,USB越来越成为一种重要的输入设备,而Linux系统更是拥有最广泛的硬件兼容性,但在检测某个硬件是否可用时候,往往带来了一些麻烦,本文主要探究Linux 系统中,检测USB 硬件状态是否正常的方法。

首先,让我们查看Linux 系统中如何探测USB 的侦测力:

1. 查看 /proc 下的usb详细信息

在Linux系统中,可以通过在/proc/bus/usb下查看usb信息,我们来看一下。

以 /proc/bus/usb/001 为例:

[root@localhost ~]# ls /proc/bus/usb -l
总用量 16
dr-xr-xr-x 1 root root 0 5月 6 19:54 001

如上输出表明,系统里面有一个usb设备,所以我们可以查看其相关信息

[root@localhost ~]# cat /proc/bus/usb/001/descriptors
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Device Descriptors:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 9 Hub
bDeviceSubClass 0 Unused
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 64
idVendor 0x1d6b Linux Foundation
idProduct 0x0002 2.0 root hub
bcdDevice 4.06
...
bNumConfigurations 1

//你可以把相关代码加入在这里

从上面可以看出,Linux系统中有一个2.0 root hub,所以我们确定USB 在Linux系统中是存在的。

2. 利用 lsusb 命令进行查看

除此之外,我们还可以利用一些命令行工具,获得更为详细的检测结果,比如lsusb 命令:

[root@localhost ~]# lsusb
Bus 002 Device 002: ID 05e3:0745 Genesys Logic, Inc.
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0a5c:4502 Broadcom Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
```

从输出结果可以看出,系统里共连接了两个USB设备,一个来自BroadCom,另外一个来自Genesys Logic,一般情况下,仅检测到这两个设备,就可以确认USB设备已经正常的挂载到Linux系统上。

3. 利用 udevadm 命令

另外,如果我们想要获取更丰富的USB设备信息,我们可以利用udevadm命令来查看

[root@localhost ~]# udevadm info -a -n /dev/bus/usb/001/002

Udevadm info starts with the device specified by the devpath and then

walks up the chain of parent devices. It prints for every device

found, all possible attributes in the udev rules key format.

A rule to match, can be composed by the attributes of the device

and the attributes from one single parent device.

looking at device ‘/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2’:

KERNELS==”1-1.2″

SUBSYSTEMS==”usb”

DRIVERS==”usb”

ATTRS{speed}==”480″

ATTRS{bDeviceClass}==”09″

ATTRS{bDeviceSubClass}==”00″

ATTRS{bDeviceProtocol}==”00″

ATTRS{bNumConfigurations}==”1″

ATTRS{bConfigurationValue}==”1″

ATTRS{configuration}==””

ATTRS{bMaxPower}==”500mA”

ATTRS{authorized}==”1″

ATTRS{bmAttributes}==”80″

ATTRS{bMaxPacketSize0}==”8″

ATTRS{idVendor}==”05e3″

ATTRS{idProduct}==”0745″

ATTRS{bcdDevice}==”2458″

ATTRS{bcdUSB}==”0200″

ATTRS{manufacturer}==”GenesysLogic”

ATTRS{serial}==”000000000424″

ATTRS{speed}==”480″

ATTRS{devnum}==”12″

ATTRS{ignore_device}==”0″

ATTRS{version}==” 2.00″

ATTRS{urbnum}==”56964″

ATTRS{ltm_capable}==”no”

ATTRS{product}==”USB Storage”

ATTRS{removable}==”removable”

ATTRS{bNumInterfaces}==” 1″

ATTRS{bConfigurationValue}==”1″

ATTRS{bNumPorts}==” 2″

从上面结果可以看出,我们可以通过udevadm命令获取更为详细的USB设备相关的信息。
总的来说,Linux系统通过多种办法可以检测USB设备的状态,比如查看/proc/bus/usb信息,或者通过lsusb和udevadm命令获取更为具体的信息。虽然用起来可能有些麻烦

数据运维技术 » 探索 Linux 下USB 的侦测力(linuxusb检测)