笔记:linux中LED驱动设备树配置和用法

设备树中节点配置

设备树中的LED驱动一般是这样写,LED驱动可以控制GPIO的电平变化,生成文件节点很方便

cpp 复制代码
leds: leds {
		compatible = "gpio-leds";
		gpio_demo: gpio_demo {
			label = "gpio_demo";
			gpios = <&gpio0 RK_PC0 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "default-off";
			default-state = "on";
		};
}

字段解释

|----------------------------------------------|------------------------------------------------|
| compatible = "gpio-leds"; | 对应了驱动中 drivers/leds/leds-gpio.c这个驱动文件 |
| label = "gpio_demo"; | 这个名字会在文件系统中生成对应的设备节点 /sys/class/leds/gpio_demo |
| linux,default-trigger = "default-off"; | 指的是led的触发方式 default-off是默认none作为普通的功能来使用 |
| gpios = <&gpio0 RK_PC0 GPIO_ACTIVE_HIGH>; | 前面两个参数是设置哪个GPIO 后面一个参数是指的高低电平有效 |
| default-state = "on"; | 默认状态 on或者off |

设置方式和电平的关系

设置方式 默认电平 brightness=0 brightness>0
gpios = <&gpio0 RK_PC0 GPIO_ACTIVE_HIGH>; linux,default-trigger = "default-off"; default-state = "on"
gpios = <&gpio0 RK_PC0 GPIO_ACTIVE_HIGH>; linux,default-trigger = "default-off"; default-state = "off"
gpios = <&gpio0 RK_PC0 GPIO_ACTIVE_LOW>; linux,default-trigger = "default-off"; default-state = "on"
gpios = <&gpio0 RK_PC0 GPIO_ACTIVE_LOW>; linux,default-trigger = "default-off"; default-state = "off"

触发方式

触发方式linux,default-trigger = "default-off";

触发方式类型可以参考使用内核里面的支持项,源码在drivers\leds\trigger下面

drivers/leds/trigger/ledtrig-activity.c

drivers/leds/trigger/ledtrig-audio.c

drivers/leds/trigger/ledtrig-backlight.c

drivers/leds/trigger/ledtrig-camera.c

drivers/leds/trigger/ledtrig-cpu.c

drivers/leds/trigger/ledtrig-default-on.c

drivers/leds/trigger/ledtrig-disk.c

drivers/leds/trigger/ledtrig-gpio.c

drivers/leds/trigger/ledtrig-heartbeat.c

drivers/leds/trigger/ledtrig-mtd.c

drivers/leds/trigger/ledtrig-multi-control.c

drivers/leds/trigger/ledtrig-netdev.c

drivers/leds/trigger/ledtrig-oneshot.c

drivers/leds/trigger/ledtrig-panic.c

drivers/leds/trigger/ledtrig-pattern.c

drivers/leds/trigger/ledtrig-timer.c

drivers/leds/trigger/ledtrig-transient.c

常用的有timer heartbeat oneshot

使用的时候需要检测内核config中是否有开启,使用哪个就开启哪个

CONFIG_LEDS_TRIGGER_TIMER=y

CONFIG_LEDS_TRIGGER_HEARTBEAT=y

CONFIG_LEDS_TRIGGER_BACKLIGHT=y

CONFIG_LEDS_TRIGGER_DEFAULT_ON=y

CONFIG_LEDS_TRIGGER_ONESHOT=y

以timer和oneshot举例

timer

leds: leds {

compatible = "gpio-leds";

gpio_demo: gpio_demo {

label = "gpio_demo";

gpios = <&gpio0 RK_PC0 GPIO_ACTIVE_HIGH>;

linux,default-trigger = "timer";

default-state = "on";

};

}

echo 500 > /sys/class/leds/gpio_demo/delay_on

echo 500 > /sys/class/leds/gpio_demo/delay_off

这样操作后GPIO电平就会高500ms低500ms

oneshot

leds: leds {

compatible = "gpio-leds";

gpio_demo: gpio_demo {

label = "gpio_demo";

gpios = <&gpio0 RK_PC0 GPIO_ACTIVE_HIGH>;

linux,default-trigger = "oneshot";

default-state = "on";

};

}

echo 1000 > /sys/class/leds/gpio_demo/delay_on

echo 1 > /sys/class/leds/gpio_demo/short

这样就会让电平变高1秒后变低

如果invert设置1后那么就是变低1秒后变高

相关推荐
Better Bench2 小时前
WSL2 Ubuntu 中 Claude CLI “command not found” 故障排查与修复
linux·ubuntu·claude·wsl·claudecode
实心儿儿2 小时前
Linux —— 进程间关系和守护进程
linux·运维·服务器
FII工业富联科技服务3 小时前
工业设备运维如何Agentic化?拆解Factory Brain的设备运维架构
大数据·运维·人工智能·架构·制造
Dawn-bit4 小时前
Linux磁盘管理详解
linux·运维·服务器·计算机网络·云计算
RisunJan4 小时前
Linux命令-sftp(SSH 文件传输协议客户端)
linux·运维
极客先躯6 小时前
高级java每日一道面试题-2026年05月03日-实战篇[Docker]-如何实现容器化环境的数据加密?
java·运维·docker·容器·金融·加解密·高级面试
FellAveal6 小时前
【Go语言入门学习笔记】Part18.工作池与WaitGroup(也即协程池)
笔记·学习·golang
xqqxqxxq6 小时前
Java Socket 多人聊天室(私聊+群聊)技术笔记(V4版本)
java·网络·笔记
龙仔7256 小时前
人大金仓OS_Core数据库自动备份实施笔记(银河麒麟Linux)
linux·数据库·笔记·备份·人大金仓
老杨聊技术7 小时前
CentOS 7 安装 MySQL 8 保姆级教程
linux·mysql·centos