Linux之内核Platform LED

  • Post author:
  • Post category:linux



目录


一、内核图形化配置


二、设备树修改


在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以及驱动入口和出口函数。



版权声明:本文为qq_53144843原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。