确定USB设备文件路径

Determine USB device file Path

如何在 Linux 中正确获取 USB 设备文件路径。 我使用命令:find / -iname "usb" 得到如下结果:

/dev/bus/usb
/sys/bus/usb
/sys/bus/usb/drivers/usb
/sys/kernel/debug/usb

在/dev/bus/usb下我看到:

001  002  003  004  005  006

但我认为它们不是我需要的文件。

下 /sys/bus/usb/devices/:

sh-3.2# ls /sys/bus/usb/devices/
1-0:1.0  1-1:1.0  3-0:1.0  5-0:1.0  usb1     usb3     usb5
1-1      2-0:1.0  4-0:1.0  6-0:1.0  usb2     usb4     usb6

在 /sys/bus/scsi/devices/ 下,当我插入 USB 时,我看到:

2:0:0:0      host0        host2        target2:0:0

当我移除 USB 时,我看到:

sh-3.2# ls
host0

那么USB用的是哪个设备文件呢?我怎样才能识别它?我需要用 USB 设备文件制作一个 C 程序...

另外,你能给我解释一下数字1-1:1.0吗?这是什么意思?

谢谢。

So which device file is used for USB? How can i indentify it?

你在/sys/后面看到的主要是configuration/information关于设备的。 /dev/bus/usb 就是您要找的。我觉得下面这篇文章可以帮到你

http://www.linuxjournal.com/article/7466?page=0,0

很老了,但还是可以帮到你。 (在文章中他们谈到/proc/bus/usb,今天我们有/dev/bus/usb

Further more, could you explain to me the number 1-1:1.0? What does it mean?

通用形式是

X-Y.Z:A.B

每个字段标识您设备的连接点。前两个字段是必填字段:

  • X是你主板的USB总线,连接USB系统。
  • Y 是总线系统上正在使用的端口

所以用字符串3-3标识的USB设备就是连接在总线3的端口3上的设备。

如果您连接 USB 集线器,您将扩展单个 USB 端口的连接能力。 Linux 内核通过附加 Z 字段来识别这种情况。

  • Z 是集线器上使用的端口

因此,用字符串1-2.5标识的USB设备是连接在总线1的端口2上的集线器端口5上的设备。

USB 规范允许您级联连接多个 USB 集线器,因此 Linux 内核继续在不同的集线器上附加正在使用的端口。因此,用字符串 1-2.1.1 标识的 USB 设备是连接在集线器的端口 1 上的设备连接在连接到总线 1 的端口 2 的集线器的端口 1.

检索这些信息的一种快速方法是阅读内核消息(如果可以的话)。

$ dmesg | grep usb
[... snip ...]
[ 2.047950] usb 4-1: new full-speed USB device number 2 using ohci_hcd
[ 2.202628] usb 4-1: New USB device found, idVendor=046d, idProduct=c318
[ 2.202638] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 2.202643] usb 4-1: Product: Logitech Illuminated Keyboard
[ 2.202648] usb 4-1: Manufacturer: Logitech
[... snip ...]

然后,模式的最后两个字段(冒号后)标识 USB 设备的内部部分:

  • A为设备的配置编号
  • B是配置的接口号

因此,字符串 4-1:1.1 表示:接口 1,在配置 1 上连接到总线 4 的端口 1。

您可以使用命令 lsusb 检索这些信息。