• Linux之内核Platform LED


    目录

    一、内核图形化配置

     二、设备树修改


    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灯为心跳指示灯

    1. dtsleds {
    2. compatible = "gpio-leds";
    3. led0 {
    4. label = "red";
    5. gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
    6. default-state = "on";
    7. linux,default-trigger = "heartbeat";
    8. };
    9. };

    修改完成以后保存并重新编译设备树,然后用新的设备树启动开发板。启动以后 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以及驱动入口和出口函数。
     

  • 相关阅读:
    [R] How to communicate with your data? - ggplot2
    202328读书笔记|《杨绛传:岁月流转,我心依然》——我和谁都不争,和谁争我都不屑。我爱大自然,其次就是艺术。
    静态时序分析-OCV和time derate
    clazzToJsonDefault java 实体 to json 字符串
    micropython实现mpy的ota(有用,推荐)
    UE4 中可全局获取的变量(例如游戏实例、玩家控制器等) 详解
    MFC 更改控件的大小和位置
    HelloServlet
    如何评价GPT-4o?【该回答来自GPT-4o】
    Java基础项目~用户管理系统
  • 原文地址:https://blog.csdn.net/qq_53144843/article/details/127041905