【问题标题】:Determine USB device file Path确定 USB 设备文件路径
【发布时间】:2016-01-13 10:53:42
【问题描述】:

如何在 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 吗?什么意思?

谢谢。

【问题讨论】:

  • 你需要设备文件做什么?
  • 我需要检查与 USB 设备相关的信息。所以我想我会将 ioctl 发送到 USB 设备文件并读取反馈数据?这可能吗?
  • 什么样的信息?
  • 对USB设备进行读/写验证,获取USB设备的信息如:速度、名称、...
  • “读/写验证”是什么意思?这是针对某些特定设备的吗?或者你想复制lsusb

标签: linux linux-kernel usb libusb


【解决方案1】:

那么 USB 使用的是哪个设备文件?如何识别?

您在/sys/ 后面看到的主要是有关设备的配置/信息。 /dev/bus/usb 是您正在寻找的。我认为下面的文章可以帮助到你

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

已经很老了,但它仍然可以帮助你。 (在他们谈论/proc/bus/usb的文章中,今天我们有/dev/bus/usb

进一步,您能向我解释一下数字 1-1:1.0 吗?什么意思?

通用形式是

X-Y.Z:A.B

每个字段都标识了您设备的连接点。前两个字段是强制性的:

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

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

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

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

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

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

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

$ 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 检索这些信息。

【讨论】:

  • 这对我很有帮助。但我仍然不知道我可以向哪个文件发送 USB ioctl 以获取一些信息...
  • 也许你应该看看 libusb。它将为您抽象出大部分工作。
  • 正如我在答案中所写,/dev/bus/usb 是您必须查看的目录。 确切地是哪个文件?这取决于您连接 USB 设备的位置。文章和答案中对此进行了解释。然后正如 Alexandre 在文章中所说和建议的那样,使用libusb
猜你喜欢
  • 1970-01-01
  • 2017-02-21
  • 2013-10-07
  • 1970-01-01
  • 2023-04-01
  • 2018-04-03
  • 1970-01-01
  • 2013-12-22
  • 1970-01-01
相关资源
最近更新 更多