Как я могу получить доступ или перечислить доступные светодиоды из кода ядра (BeagleBone Black)? - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь написать собственный обработчик системных вызовов, который управляет светодиодами на плате BeagleBone Black. Я прошел через API светодиодов ядра (include / leds.h), но я не могу найти ничего, что дало бы мне доступ к доступным светодиодным устройствам или какой-либо другой механизм для управления ими (вкл / выкл / переключение). Кажется, что большинству функций требуется объект led_classdev, но я не могу найти способ его получить.

Я могу сделать это из пространства пользователя с помощью интерфейса / sys / class / leds / .... Но я хочу сделать что-то подобное из пространства ядра. Я открыт для жесткого кодирования любых имен устройств, специфичных для BeagleBone Black, поскольку переносимость не является проблемой.

1 Ответ

0 голосов
/ 07 ноября 2019

Я нашел способ доступа / управления светодиодами из пространства ядра - путем создания собственного триггера светодиодов. Он не дает возможности перечислять доступные устройства, и требует, чтобы пользовательский триггер был назначен для светодиода из пространства пользователя путем записи в / sys / class / leds / foo / trigger. Но это позволяет вам манипулировать светодиодами из кода ядра после назначения триггера.

struct led_trigger *trigger;
...
led_trigger_register_simple("myled", &trigger); //create and register the trigger
...
//assign the trigger "myled" to the desired LED(s) from user-space
//by writing to the corresponding trigger files in /sys/class/leds/foo/
...
led_trigger_event(trigger, LED_FULL); //turn-on the LED(s) connected to the trigger
led_trigger_event(trigger, LED_OFF);  //turn-off

Создание и регистрация триггера могут быть выполнены, например, в модуле init. Также, если нужно независимо управлять несколькими светодиодами, то, насколько я вижу, нужно создавать отдельные триггеры для каждого светодиода.

...