Linux上/dev目录下的USB设备检测

4

在Linux中使用lsusb命令,可以了解到新连接的USB设备的总线和设备号以及其名称。

但是,我如何只使用命令行知道USB设备连接到了哪个设备目录(/dev/*)中的Linux设备?


我尝试了dmesg | tail命令,它只显示USB的详细信息,如VID、PID、产品名称、制造商名称等。我无法知道udev(设备管理器)将设备连接到/dev/下的位置。 - Manku
2个回答

8
并不是每个设备都必须直接显示在/dev/下面,但某些设备类别会嵌套在/dev/的子目录中。
USB设备驱动程序有些不同。 如果连接了有效的USB设备,USB HCI将读取VID:PID,并告诉usb-core该设备的VID:PID组合已连接。
如果usbcore检测到VID:PID组合的任何注册驱动程序,它将将其与设备配对,并相应地创建设备文件。
即使没有相应的驱动程序,设备也会显示在/dev/bus/usb/..中,以表示设备已被检测到。
您需要安装设备驱动程序才能使设备运行/操作。
您可以通过以下方式验证设备驱动程序是否与设备配对:

cat /sys/kernel/debug/usb/devices

每个检测到的USB设备都会在此处有一个条目,并显示"Driver="字段,以显示与您的设备关联的驱动程序。
现在,如果有一个驱动程序,在适当的/dev树中进行了条目,您将在那里找到设备。
并非每个设备都会直接显示在/dev/的第一层级下。 比如说,你的鼠标/键盘不会直接显示在/dev/下面,而是在/dev/input/内部。
同样地,如果连接的USB设备是字符/块设备,它可能会显示在那里,但也有例外情况。
如果你的设备是以太网/无线设备,接口设备将不会直接显示在/dev/下面,请与现有的eth0、wlan0进行交叉检查,它们不会直接出现在/dev/下,而是在/proc/net/devices中。
sda/b/c会直接显示在/dev/下,因为它们是块设备,并由udev管理。

5

这是我笔记本电脑上 lsusb 命令的输出示例:

Bus 004 Device 123: ID 2001:3c1b D-Link Corp. DWA-127 Wireless N 150 High-Gain Adapter(rev.A1) [Ralink RT3070]

这是 004 巴士上的设备 123。 /dev/bus/usb/004/123 只是感兴趣设备的文件。

路径可能在不同的内核上有所不同。上面的结果适用于内核版本 3.15.2。


是的,我看到了。但它只显示USB字符设备类型,后面跟着/dev/bus/usb/004/123(例如情况)。假设我以USB大容量存储为例,那么它应该显示为块设备以执行操作。我如何知道块设备路径,例如/dev/sdb(例如情况)? - Manku
并不是每个设备都必须直接显示在 /dev/ 下面,但是一些设备类别将嵌套在 /dev/ 内的子目录下。 - Sun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接