确定USB设备文件路径

Tik*_*tac 10 linux usb libusb linux-kernel

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

/dev/bus/usb
/sys/bus/usb
/sys/bus/usb/drivers/usb
/sys/kernel/debug/usb
Run Code Online (Sandbox Code Playgroud)

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

001  002  003  004  005  006
Run Code Online (Sandbox Code Playgroud)

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

在/ 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
Run Code Online (Sandbox Code Playgroud)

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

2:0:0:0      host0        host2        target2:0:0
Run Code Online (Sandbox Code Playgroud)

当我删除USB时,我看到:

sh-3.2# ls
host0
Run Code Online (Sandbox Code Playgroud)

那么哪个设备文件用于USB?我怎么辨认呢?我需要用USB设备文件制作一个C程序...

还有,你能解释一下我的数字是1-1:1.0吗?这是什么意思?

谢谢.

Fed*_*ico 17

那么哪个设备文件用于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
Run Code Online (Sandbox Code Playgroud)

每个字段标识设备的连接点.前两个字段是强制性的:

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

因此,用字符串标识的USB设备3-3是连接在总线3的端口3上的设备.

如果连接USB集线器,则可以扩展单个USB端口的连接功能.Linux内核通过附加Z字段来识别这种情况.

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

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

USB规范允许您级联连接多个USB集线器,因此Linux内核继续在不同的集线器上附加使用的端口.因此,用字符串标识的USB设备1-2.1.1是连接在集线器的端口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 ...]
Run Code Online (Sandbox Code Playgroud)

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

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

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

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