特定のデバイスの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()

おすすめ記事