나는 현재 더 많은 것을 배우기 위해 USB를 연구하고 있습니다.
lsusb
나는 내 시스템의 USB 버스와 장치에 대한 정보를 표시 하곤 했습니다 . Linux에서는 기본적으로 모든 것이 디렉터리 파일이라는 것을 알고 lsusb가 읽는 디렉터리를 찾으려고 했습니다. . usbdevfs
라는 의사 파일 시스템을 발견했습니다 /proc/bus/usb
.
그러나 디렉터리가 없어 해당 디렉터리로 이동할 수 없습니다. 결과에서 디렉토리를 greping하려고 시도했지만 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