Udev
如何查找特定設備的 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 規則明確辨識設備的容易程度相比,這似乎是很多工作。我錯過了一個簡單的方法還是我應該把它吸起來?
以程式方式,您可以首先
stat("/dev/input/accelerometer0", &stat_struct)
找出主要和次要設備號。然後使用
libudev
‘s為您的加速度計udev_device_new_from_devnum()
獲取 astruct udev_device
,然後udev_device_get_syspath()
獲取其 sysfs 目錄的路徑名。