USB 장치를 찾을 수 없습니다

USB 장치를 찾을 수 없습니다

나는 현재 더 많은 것을 배우기 위해 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>

/proctry 에 대한 정보 $ 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

관련 정보