/dev/input/by-path에 장치당 두 개의 항목이 있는 이유는 무엇입니까?

/dev/input/by-path에 장치당 두 개의 항목이 있는 이유는 무엇입니까?

나가면 /dev/input/by-path입력 주변 장치를 볼 수 있습니다.

키보드와 마우스가 있고 내 플랫폼에서 출력은 다음과 같습니다.

pci-0000:05:00.0-usb-0:1.2:1.0-event-kbd
pci-0000:05:00.0-usb-0:1.1:1.0-event-mouse
pci-0000:05:00.0-usb-0:1.1:1.0-mouse
pci-0000:05:00.0-usb-0:1.1:1.1-event-kbd
  1. 장치당 두 개의 항목이 있는 이유는 무엇입니까?
  2. 각 항목의 목적은 무엇입니까?

그런데 open(<path_to_device>, O_RDONLY)입력을 수신하는 사람은 단 한 명뿐입니다(키보드의 경우 이 사람입니다 usb-0:1.2:1.0).

(저는 우분투를 실행하고 있습니다. 혹시 모르니!)

답변1

장치당 두 개의 항목이 있는 이유는 무엇입니까?

. 장치당 두 개의 항목이 없습니다. 예, 페어링 *-event-mouse되면 *-mouse동일한 pci-0000:05:00.0-usb-0:1.1:1.0식별자를 공유하므로 동일한 장치임을 나타냅니다. 반면에 장치 *-event-kbd는 다릅니다.

각 항목의 목적은 무엇입니까?

run 경우 ls -l /dev/input/by-path출력은 다음과 같습니다(예).

pci-0000:05:00.0-usb-0:1.2:1.0-event-kbd -> ../event5
pci-0000:05:00.0-usb-0:1.1:1.0-event-mouse -> ../event6
pci-0000:05:00.0-usb-0:1.1:1.0-mouse -> ../mouse0
pci-0000:05:00.0-usb-0:1.1:1.1-event-kbd -> ../event13

보시다시피 event*장치 가 있습니다 mouse*.이 파일차이점을 설명하세요.

  • event*

    evdev범용 입력 이벤트 인터페이스입니다. 커널에서 생성된 이벤트를 타임스탬프와 함께 프로그램에 직접 전달합니다. 이벤트 코드는 모든 아키텍처에서 동일하며 하드웨어 독립적입니다.

    이는 사용자 공간이 사용자 입력과 함께 작동하는 데 선호되는 인터페이스이며 모든 클라이언트가 이를 사용하도록 권장됩니다.

  • mouse*

    mousedev마우스 입력을 사용하는 레거시 프로그램이 제대로 작동하도록 만드는 기술입니다. 이는 마우스 또는 디지타이저/태블릿에서 이벤트를 가져오고 /dev/psaux사용자가 PS/2 스타일(ala ) 마우스 장치를 사용할 수 있도록 만듭니다.

sudo cat pci-0000:05:00.0-usb-0:1.1:1.0-event-mouse별도의 콘솔에서 실행하면 sudo cat pci-0000:05:00.0-usb-0:1.1:1.0-mouse둘 다 마우스에서 읽지만 바이트 스트림이 다른 것을 볼 수 있습니다.

pci-0000:05:00.0-usb-0:1.2:1.0-event-kbd귀하는 키보드가 귀하의 것임을 확인했습니다 . 남은 장치 ( pci-0000:05:00.0-usb-0:1.1:1.1-event-kbd)는 다른 것 같아요 . ls -l위와 같이 어떤 이벤트에 해당하는지 알아내야 합니다 .

$ # Example from my laptop
$ cat /sys/class/input/event13/device/name
Laptop_Integrated_Webcam_FHD: I

내 웹캠에는 물리적 버튼이 없지만 동일한 드라이버가 일부 물리적 버튼(예: 스냅 버튼)이 있는 웹캠을 지원하는 것 같습니다. 귀하의 경우 나머지 장치도 일반 키보드가 아닐 수도 있습니다.

관련 정보