探索 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
总用量 16dr-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 hubDevice 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命令获取更为具体的信息。虽然用起来可能有些麻烦