24. LED Class в Linux
Подсистема LED Class (/sys/class/leds/) — часть ядра Linux, предназначенная для абстрагированной работы с аппаратными светодиодами. Она позволяет управлять ими через userspace без обращения к конкретным регистрам или GPIO напрямую.
24.1. Общие сведения
Каждое LED-устройство отображается в виде каталога:
/sys/class/leds/<имя_led>/
Примеры возможных имён:
led0— индикатор активности/питанияmmc0— активность SD-картыledred— пользовательский RGB-светодиод
24.1.1. Основные файлы в каталоге:
brightness— текущая яркость (0 = выкл, 1 или 255 = вкл)max_brightness— максимальное значение (обычно 1 или 255)trigger— список доступных триггеров (поведение: таймер, heartbeat и др.)uevent— информация о регистрации устройстваdevice/— ссылка на физическое устройство
24.2. Примеры использования
Включить светодиод:
echo 1 | sudo tee /sys/class/leds/led0/brightness
Выключить светодиод:
echo 0 | sudo tee /sys/class/leds/led0/brightness
Проверить доступные триггеры:
cat /sys/class/leds/led0/trigger
Назначить светодиоду триггер:
echo timer | sudo tee /sys/class/leds/led0/trigger
Управление частотой мигания при триггере
timer:
echo 100 | sudo tee /sys/class/leds/led0/delay_on
echo 100 | sudo tee /sys/class/leds/led0/delay_off
24.3. Пример: Управление встроенным светодиодом Raspberry Pi
На Raspberry Pi led0 обычно отвечает за активность SD-карты (мигает при чтении/записи). Однако вы можете взять над ним полный контроль:
Сброс автоматического управления (trigger):
echo none | sudo tee /sys/class/leds/led0/trigger
Ручное управление включением/выключением:
echo 0 | sudo tee /sys/class/leds/led0/brightness
echo 255 | sudo tee /sys/class/leds/led0/brightness
Проверка текущего состояния:
cat /sys/class/leds/led0/trigger
cat /sys/class/leds/led0/brightness
Возврат поведения по умолчанию (триггер mmc0):
echo mmc0 | sudo tee /sys/class/leds/led0/trigger
24.4. Программная регистрация LED из драйвера
Минимальный пример регистрации светодиода из драйвера:
#include <linux/leds.h>
static struct led_classdev my_led = {
.name = "myled",
.brightness_set = my_set_brightness,
};
static void my_set_brightness(struct led_classdev *led_cdev,
enum led_brightness brightness)
{
// Ваша логика включения/выключения светодиода
}
// Регистрация
led_classdev_register(dev, &my_led);
// Отмена регистрации
led_classdev_unregister(&my_led);
24.5. Работа с LED class в Device Tree
Если светодиод описан в Device Tree, используется драйвер gpio-leds:
leds {
compatible = "gpio-leds";
ledred {
label = "ledred";
gpios = <&gpio 16 GPIO_ACTIVE_HIGH>;
default-state = "off";
};
};
Дополнительно можно указать свойства:
linux,default-trigger = "heartbeat";default-state = "on"/"off"/"keep"retain-state-suspended;
24.6. Вывод информации о LED
udevadm info -a -p /sys/class/leds/led0
cat /sys/class/leds/led0/uevent
24.7. Полезные утилиты
ls /sys/class/leds/— список светодиодовgpioinfo— покажет, какие GPIO привязаны к светодиодам (если через gpio-leds)udevadm info— подробности о регистрации устройстваdmesg | grep led— сообщения ядра о подсистеме LED
24.8. Советы
Значения в
brightnessиtriggerможно управлять из скриптов и systemd-юнитов.Можно использовать LED class в комбинации с input-подсистемой (например, для индикации Caps Lock).
Поддержка LED class определяется опцией ядра
CONFIG_LEDS_CLASS.