Udev

如何查找特定設備的 sysfs 目錄?

  • May 18, 2018

我有一個綁定到驅動程序的輸入類設備(加速度計),該驅動程序公開了我需要從使用者區訪問的 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()獲取 a struct udev_device,然後udev_device_get_syspath()獲取其 sysfs 目錄的路徑名。

引用自:https://unix.stackexchange.com/questions/444657