특정 장치에 대한 sysfs 디렉토리를 찾는 방법은 무엇입니까?

특정 장치에 대한 sysfs 디렉토리를 찾는 방법은 무엇입니까?

사용자 영역에서 액세스해야 하는 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)메이저 및 마이너 장치 번호를 찾을 수 있습니다.

그런 다음 libudevs를 사용하여 가속도계의 a를 udev_device_new_from_devnum()가져온 다음 해당 sysfs 디렉터리의 경로 이름을 가져옵니다.struct udev_deviceudev_device_get_syspath()

관련 정보