26. 5.25. Подключение RGB LED к LED class через DT
26.1. Описание
В этой части проекта мы реализуем подключение RGB светодиода к встроенному механизм управления светодиодами в ядре Linux — LED class. Мы воспользуемся стандартным драйвером gpio-leds, который работает на основе описания в Device Tree. Каждая компонента RGB-светодиода будет зарегистрирована как отдельное led_classdev-устройство.
26.1.1. Структура Device Tree
Ниже приведён фрагмент, который должен быть включён в leds {} внутри файла Device Tree:
leds {
compatible = "gpio-leds";
phandle = <0x87>;
ledred: ledred@0 {
label = "ledred";
gpios = <&gpio 16 0>;
default-state = "off";
linux,default-trigger = "none";
};
ledgreen: ledgreen@1 {
label = "ledgreen";
gpios = <&gpio 20 0>;
default-state = "off";
linux,default-trigger = "none";
};
ledblue: ledblue@2 {
label = "ledblue";
gpios = <&gpio 21 0>;
default-state = "off";
linux,default-trigger = "none";
};
};
26.1.2. Функциональные требования
[x] Регистрация каждого узла в LED class — автоматически создаётся /sys/class/leds/ledred, ledgreen, ledblue
[x] Имя устройства через DT — задаётся через label = «…», и отображается в sysfs
- [x] Поддержка атрибутов:
brightness — установка 0 (выкл) / 255 (вкл)
trigger — переключение между none, heartbeat, timer, cpu, и др.
[x] default-state = «on»/»off» из DT — влияет на стартовое поведение после загрузки
[x] GPIOD API — драйвер использует devm_gpiod_get(), а не legacy GPIO API
[x] Работа без user-приложений — управление полностью через /sys/class/leds/*
[x] Корректная выгрузка и освобождение ресурсов (если используется custom-драйвер)
[ ] heartbeat-rgb trigger — не реализован (пожелание, можно разработать отдельно)
26.1.3. Проверка
Проверить sysfs после загрузки DT:
ls /sys/class/leds/
# → ledred ledgreen ledblue
Проверить работу триггеров:
cat /sys/class/leds/ledred/trigger
echo timer | sudo tee /sys/class/leds/ledred/trigger
echo none | sudo tee /sys/class/leds/ledred/trigger
Проверить включение/выключение вручную:
echo 1 | sudo tee /sys/class/leds/ledred/brightness
echo 0 | sudo tee /sys/class/leds/ledred/brightness
Проверить статус:
cat /sys/class/leds/ledred/brightness
cat /sys/class/leds/ledred/trigger
Проверить, какие GPIO задействованы:
gpioinfo | grep led
raspi-gpio get 16
raspi-gpio get 20
raspi-gpio get 21
26.1.4. Заключение
Мы успешно выполнили включение RGB светодиода в LED class Linux только с помощью Device Tree, без написания кода драйвера. Это позволяет полностью пользоваться встроенными возможностями ядра: управление яркостью, триггерами и автоматическое создание интерфейса /sys/class/leds.
Следующим шагом может быть создание пользовательского триггера heartbeat-rgb через kernel module.