如何查找特定设备的 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.与通过 udev 规则明确识别设备的容易程度相比,这似乎是一项大量的工作。

我是否错过了一个简单的方法,或者我应该接受它?

答案1

通过编程,您可以首先stat("/dev/input/accelerometer0", &stat_struct)找出主设备号和次设备号。

然后使用libudevsudev_device_new_from_devnum()获取struct udev_device加速度计的 a ,然后udev_device_get_syspath()获取其 sysfs 目录的路径名。

相关内容