一、内核led简介
linux 内核集成了 LED 的驱动(采用 platform框架),因此只要在设备树文件中添加相应的 LED 节点即可。
1、使能内核led驱动(配置图形化界面)
打开图形化配置界面,按照以下路径配置内核:
make menuconfig
-> Device Drivers
-> LED Support (NEW_LEDS [=y])
->LED Support for GPIO connected LEDs
保存退出后,在 .config 文件查看 “CONFIG_LEDS_GPIO=y" 这一配置项。
2、内核led驱动
led 驱动文件为 /drivers/leds/leds-gpio.c,在 /drivers/leds/Makefile 这个文件可以定义是否编译 led 的驱动文件。当 .config 文件中的 “CONFIG_LEDS_GPIO=y" 成立时,Makefile 中的编译目标被激活。
内核驱动的 name 字段为:“leds-gpio”,因此设备树中的 compatible 属性要为 “leds-gpio”。
3、编写设备树节点
文档 Documentation/devicetree/bindings/leds/leds-gpio.txt 介绍了 led 驱动设备树节点的编写。
-
创建一个节点表示 LED 灯设备,比如 dtsleds,如果板子上有多个 LED 灯的话每个 LED 灯都作为 dtsleds 的子节点。
-
dtsleds 节点的 compatible 属性值一定要为 “gpio-leds”。
-
设置 label 属性,此属性为可选,每个子节点都有一个 label 属性, label 属性一般表示 LED 灯的名字,比如以颜色区分的话就是 red、 green 等等。
-
每个子节点必须要设置 gpios 属性值,表示此 LED 所使用的 GPIO 引脚。
-
可以设置 “linux,default-trigger” 属性值,也就是设置 LED 灯的默认功能,介绍文档 Documentation/devicetree/bindings/leds/common.txt 详细介绍了可选功能,例如:
backlight:LED灯作为背光。
default-on:LED灯打开。
heartbeat:LED灯作为心跳指示灯,可以作为系统运行提示灯。
ide-disk:LED灯作为硬盘活动指示灯。
timer:LED灯周期性闪烁,由定时器驱动,闪烁频率可以修改。
-
可以设置 “default-state” 属性值,可以设置为 on、 off 或 keep,为 on 的时候 LED 灯默认打开,为 off 的话 LED 灯默认关闭,为 keep 的话 LED 灯保持当前模式。
设备树节点示例:
dtsled {
compatible = "gpio-leds";
led0 {
label = "red";
gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
linux,default-trigger = "heartbeat"; //led心跳灯
default-state = "on"; //默认打开led
};
};
4、运行测试
启动后 led 会心跳闪烁。
启动后查看 /sys/bus/platform/devices/dtsleds 这个目录是否存在,如果存在,进入 leds 目录下会找到一个 red 的子目录。
查看 sys/class/leds/red/brightness 这个文件是否存在,如果没有设置 led 默认打开,可以使用如下命令打开:
echo 1 > sys/class/leds/red/brightness //打开 LED0
echo 0 > sys/class/leds/red/brightness //关闭 LED0