Como encontrar o diretório sysfs para um dispositivo específico?

1

Eu tenho um dispositivo de classe de entrada (acelerômetro) vinculado a um driver que expõe os atributos sysfs que eu preciso acessar do site do usuário. Usando uma regra do udev, forneci um alias que identifica inequivocamente o meu dispositivo, ou seja, ll /dev/input yields:

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

Até aqui, tudo bem: posso open("/dev/input/accelerometer0") no meu código da terra do usuário e começar a transmitir os dados. Mas para, por exemplo, alterar a taxa de dados, preciso gravar no atributo pollrate_ms no diretório sysfs relacionado. Um ls /sys/class/input/ produz:

event0  event1  event2  input0  input1  input2

Por acaso, sei que pollrate_ms reside em input0/device , mas preciso descobrir isso de forma programática, especialmente porque atualizações futuras podem alterar essa numeração.

Eu sei que posso usar libudev para enumerar /sys/class/input e, em seguida, usar um loop for para explorar cada um desses diretórios até encontrar o que contém pollrate_ms . Parece que há muito trabalho em comparação com a facilidade de identificar o dispositivo sem ambigüidade por meio de uma regra do udev.

Estou perdendo uma maneira fácil ou devo apenas sugá-lo?

    
por David H Olson 18.05.2018 / 19:05

1 resposta

0

Programaticamente, você pode primeiro stat("/dev/input/accelerometer0", &stat_struct) descobrir os números principais e secundários do dispositivo.

Em seguida, use libudev de udev_device_new_from_devnum() para obter um struct udev_device para seu acelerômetro e, em seguida, udev_device_get_syspath() para obter o nome do caminho de seu diretório sysfs.

    
por 18.05.2018 / 19:33

Tags