사용자 영역에서 액세스해야 하는 sysfs 속성을 노출하는 드라이버에 바인딩된 입력 클래스 장치(가속도계)가 있습니다. udev 규칙을 사용하여 내 장치를 명확하게 식별하는 별칭을 제공합니다 ll /dev/input
.
lrwxrwxrwx 1 root root 6 May 18 13:47 accelerometer0 -> event0
drwxr-xr-x 2 root root 60 May 18 13:47 by-path
crw-rw---- 1 root input 13, 64 May 18 13:47 event0
crw-rw---- 1 root input 13, 65 May 18 13:47 event1
crw-rw---- 1 root input 13, 66 May 18 13:47 event2
지금까지는 매우 훌륭했습니다. open("/dev/input/accelerometer0")
사용자 영역 코드에서 데이터 전송을 시작할 수 있습니다. 그러나 예를 들어 데이터 속도를 변경하려면 pollrate_ms
관련 sysfs 디렉터리의 속성 에 써야 합니다 . 생산하다 ls /sys/class/input/
:
event0 event1 event2 input0 input1 input2
pollrate_ms
에 있다는 것을 알고 있지만 input0/device
특히 향후 업데이트로 인해 번호 매기기가 변경될 수 있으므로 프로그래밍 방식으로 이 문제를 수정해야 합니다.
libudev
열거형을 사용한 /sys/class/input
다음 for 루프를 사용하여 가 포함된 디렉토리를 찾을 때까지 각 디렉토리를 탐색할 수 있다는 것을 알고 있습니다 pollrate_ms
.
제가 간단한 방법을 놓치고 있는 건가요, 아니면 그냥 받아들여야 할까요?
답변1
프로그래밍을 하면 먼저 stat("/dev/input/accelerometer0", &stat_struct)
메이저 및 마이너 장치 번호를 찾을 수 있습니다.
그런 다음 libudev
s를 사용하여 가속도계의 a를 udev_device_new_from_devnum()
가져온 다음 해당 sysfs 디렉터리의 경로 이름을 가져옵니다.struct udev_device
udev_device_get_syspath()