我目前正在研究 USB 以了解更多信息。
我曾经lsusb
显示有关我的系统的 USB 总线和设备的信息。知道基本上所有东西都是 Linux 上的目录文件,因此我尝试找到 lsusb 读取的目录。我发现名为的伪文件系统usbdevfs
应该安装在/proc/bus/usb
。
但是,我无法导航到该目录,因为它丢失了。尝试 grep 结果中的目录mount
也没有成功。快速cd / && find -name usb
引导我到目录/sys/bus/usb
和/dev/bus/usb
,但/proc
.调查/sys/bus/usb/devices
只给了我符号链接/sys/devices/pci00[...]
。
请注意:
- 我使用 Debian Buster,
- 我的 USB 设备没有任何问题(它们工作正常),
那么,我的 USB 设备在哪里?
答案1
要快速找到读取的目录和文件lsusb
,只需跟踪命令并搜索open()
系统调用:
strace lsusb 2>&1 | grep ^open
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libusb-1.0.so.0", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libudev.so.1", O_RDONLY|O_CLOEXEC) = 3
...
openat(AT_FDCWD, "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-6/uevent", O_RDONLY|O_CLOEXEC) = 7
openat(AT_FDCWD, "/sys/bus/usb/devices/1-6/busnum", O_RDONLY|O_CLOEXEC) = 7
openat(AT_FDCWD, "/sys/bus/usb/devices/1-6/devnum", O_RDONLY|O_CLOEXEC) = 7
openat(AT_FDCWD, "/sys/bus/usb/devices/1-6/speed", O_RDONLY|O_CLOEXEC) = 7
openat(AT_FDCWD, "/sys/bus/usb/devices/1-6/descriptors", O_RDONLY|O_CLOEXEC) = 7
...
忽略以 结尾的行,ENOENT
因为这意味着尝试打开的文件不存在。您还会注意到有一些变化。
如果您想了解参数是什么openat()
,请阅读手册页,请使用第 2 节进行系统调用:
$ man 2 open
OPEN(2) Linux Programmer's Manual OPEN(2)
NAME
open, openat, creat - open and possibly create a file
SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
有关/proc
try的信息$ man 5 proc
,但我敢打赌您现在更感兴趣的是/sys
:
$ mount | grep '/sys '
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
^^^^^
$ apropos sysfs
sysfs (2) - get filesystem type information
sysfs (5) - a filesystem for exporting kernel objects <== you want this one
$ man 5 sysfs
SYSFS(5) Linux Programmer's Manual SYSFS(5)
NAME
sysfs - a filesystem for exporting kernel objects
DESCRIPTION
The sysfs filesystem is a pseudo-filesystem which provides an interface to kernel data struc‐
tures. (More precisely, the files and directories in sysfs provide a view of the kobject
structures defined internally within the kernel.) The files under sysfs provide information
about devices, kernel modules, filesystems, and other kernel components.
如果您只是查找设备文件以访问 USB 设备,请尝试以下命令:
$ find /dev -ls | grep usb
find: ‘/dev/vboxusb’: Permission denied
2421522 0 drwxr-xr-x 2 root root 60 Oct 21 17:47 /dev/usb
2421523 0 crw------- 1 root root 180, 0 Oct 21 17:47 /dev/usb/hiddev0
29281 0 lrwxrwxrwx 1 root root 12 Oct 20 14:33 /dev/v4l/by-path/pci-0000:00:14.0-usb-0:5:1.0-video-index0 -> ../../video0
25532 0 lrwxrwxrwx 1 root root 12 Oct 20 14:33 /dev/v4l/by-path/pci-0000:00:14.0-usb-0:5:1.0-video-index1 -> ../../video1