目录
在Linux内核中已经集成了LED驱动设备。 Linux 内核的 LED 灯驱动采用 platform 框架,因此只需要按照要求在设备树文件中添加相应的 LED 节点即可。
一、内核图形化配置
要使用 Linux 内核自带的 LED 灯驱动首先得先配置 Linux 内核,使能自带的 LED 灯驱动。
在内核目录下,输入以下指令
打开Linux图像配置界面
make menuconfig
按照如下路径打开 LED 驱动配置项:
-> Device Drivers
-> LED Support (NEW_LEDS [=y])
->LED Support for GPIO connected LEDs
选择“LED Support for GPIO connected LEDs”,将其编译进 Linux 内核,在此选项上按下“Y”键,使此选项前面变为“<*>”
然后保存,退出即可。
把 Linux 内 部 自 带 的 LED 灯 驱 动 编 译 进 内 核 以 后 ,CONFIG_LEDS_GPIO 就会等于‘y’, Linux 会根据 CONFIG_LEDS_GPIO 的值来选择如何编译LED 灯驱动,如果为‘y’就将其编译进 Linux 内核。
打开.config 文件,会找到“CONFIG_LEDS_GPIO=y”
(vi中 /表示搜索)
重新编译 Linux 内核,然后使用新编译出来的 zImage 镜像启动开发板。
二、设备树修改
打开文档 Documentation/devicetree/bindings/leds/leds-gpio.txt,此文档详细的讲解了 Linux 自带驱动对应的设备树节点该如何编写
①创建一个节点表示
LED灯设备
,如果板子上有多个 LED 灯的话每个 LED灯都作为
该节点的子节点
。②节点的 compatible 属性值一定要为“gpio-leds”,与驱动文件相匹配的
③(可选)设置 label 属性,此属性为可选,每个子节点都有一个 label 属性, label 属性一般表示LED 灯的名字
④每个子节点必须要
设置 gpios 属性值,表示此 LED 所使用的 GPIO 引脚
。⑤(可选)设置linux,default-trigger属性值,
设置 LED 灯的默认功能。
⑥(可选)设置default-state属性值,为on的时LED灯默认打开,为 off时LED 灯默认关闭,为 keep时 LED 灯保持当前模式。
对于⑤可以查阅Documentation/devicetree/bindings/leds/common.txt 这个文档来查看可选功能
backlight: LED 灯作为背光。
default-on: LED 灯打开
heartbeat
:
LED 灯作为心跳指示灯,可以作为系统运行提示灯
。
ide-disk: LED 灯作为硬盘活动指示灯。
timer: LED 灯周期性闪烁,由定时器驱动,闪烁频率可以修改
设置LED灯为心跳指示灯
dtsleds {
compatible = "gpio-leds";
led0 {
label = "red";
gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
default-state = "on";
linux,default-trigger = "heartbeat";
};
};
修改完成以后保存并重新编译设备树,然后用新的设备树启动开发板。启动以后 LED0 就会闪烁,作为系统心跳指示灯,表示系统正在运行。
内核leds-gpio驱动文件的函数:
module_platform_driver
(gpio_led_driver);//gpio_led_driver是platform_driver驱动结构体
展开后为:
static int __init gpio_led_driver_init(void)
{
return platform_driver_register (&(gpio_led_driver));
}
static void __exit gpio_led_driver_exit(void)
{
platform_driver_unregister (&(gpio_led_driver) );
}module_init(gpio_led_driver_init);
module_exit(gpio_led_driver_exit);
module_platform_driver 函数的功能就是完成 platform 驱动的注册和删除
。
完成module_init和module_exit以及驱动入口和出口函数。