Linux内核自带的 LED 灯驱动实验:创建Led设备节点

一. 简介

前面几篇文章学习了Linux内核自带的 LED 灯驱动,一篇文章分析了驱动与LED设备匹配的关键,一篇文章通过内核配置界面使能了Linux内核自带的 LED 灯驱动。文章如下:

Linux内核自带的LED灯驱动框架:驱动与设备匹配分析-CSDN博客

Linux内核自带的 LED 灯驱动实验:Linux内核自带 Led驱动使能-CSDN博客

本文继续Linux内核自带Led驱动实验,具体学习如何在设备树下创建Led设备的规则,以及如何创建Led设备节点。

二. Linux内核自带的 LED 灯驱动实验:设备树下的Led设备节点规则

打开文档 Documentation/devicetree/bindings/leds/leds-gpio.txt,此文档详细的讲解了 Linux 自带驱动对应的设备树节点该如何编写,我们在编写设备节点的时候要注意以下几点:

**(1)**创建一个节点表示 LED 灯设备,比如 dtsleds,如果板子上有多个 LED 灯的话每个 LED 灯都作为 dtsleds 的子节点。

(2) dtsleds 节点的compatible 属性值一定要为 "gpio-leds" 。

(3) 设置label **属性,此属性为可选,**每个子节点都有一个 label 属性,label 属性一般表示 LED 灯的名字,比如以颜色区分的话就是 red、green 等等。

(4) 每个子节点必须要设置 gpios **属性值,**表示此 LED 所使用的 GPIO 引脚!

(5) 可以设置 " linux,default-trigger " 属性值,也就是设置 LED **灯的默认功能,**可以查阅 Documentation/devicetree/bindings/leds/common.txt 这个文档来查看可选功能,比如:

backlight **:**LED 灯作为背光。

default-on:LED 灯打开

heartbeat **:**LED 灯作为心跳指示灯,可以作为系统运行提示灯。

ide-disk **:**LED 灯作为硬盘活动指示灯。

timer **:**LED 灯周期性闪烁,由定时器驱动,闪烁频率可以修改

**(6) 可以设置 "default-state" 属性值,**可以设置为 on、off 或 keep,为 on 的时候 LED 灯默认打开,为 off 的话 LED 灯默认关闭,为 keep 的话 LED 灯保持当前模式。

三. Linux内核自带的 LED 灯驱动实验:创建Led设备节点

1. 查找设备树文件中设备树的根节点

注意:这里开发板使用的是 Nand-Flash版APLHA开发板,所以,对应的设备树文件(设备树源文件)为imx6ull-alientek-nand.dts。而 imx6ull-alientek-nand.dts设备树文件中没有找到设备树根节点,所以,要在其所调用的其他设备树文件中找。

imx6ull-alientek-nand.dts 调用了 imx6ull-14x14-evk-gpmi-weim.dts设备树, imx6ull-14x14-evk-gpmi-weim.dts文件中依然没有设备树根节点,继续查找。

imx6ull-14x14-evk-gpmi-weim.dts文件又调用了 imx6ull-14x14-evk.dts,这个文件中找到了设备树根节点。

根据上述几条要求,可以在 imx6ull-14x14-evk.dts设备树文件中添加 LED 灯设备节点 。

打开ubuntu系统,vscode打开 内核源码(NXP官方提供),打开 imx6ull-14x14-evk.dts文件,在 设备树根节点下添加 Led设备节点 kernel_led(自己定义的名字):

复制代码
/ {
	model = "Freescale i.MX6 ULL 14x14 EVK Board";
	compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull";
............................
/*WeiWuXian 2024/04/09*/
    kernel_led{
        compatible = "gpio-leds";
        led0 {
            label = "red";
            gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
            default-state = "on";
        };
    };
};

因为 I.MX6U-ALPHA 开发板只有一个 LED0,因此,在 kernel_led 这个节点下只有一个子节点 led0,LED0 名字为 red,默认将 led0灯打开。

修改完成以后,ubuntu终端进入 内核源码根目录下,输入如下命令重新编译设备树文件:

复制代码
make dtbs

编译后,会重新生成 新的设备树文件 imx6ull-alientek-nand.dtb。

接下来对新编译生成的 zImage与 imx6ull-alientek-nand.dtb设备树文件运行到开发板上,进行测试。

相关推荐
fb_123451 小时前
Linux三剑客超全精讲(grep+sed+awk)零基础入门|正则+实战面试题
linux·运维·服务器
火车叼位2 小时前
Bash 实现 IDE 式补全的组件与配置
linux·运维
潘正翔2 小时前
k8s高级_调度器Deployment
linux·运维·云原生·容器·kubernetes·jenkins·devops
H_oRIZoN_2 小时前
Linux入门DAY27(文件IO(系统调用)详解|open/read/write/lseek)
java·linux·服务器
海兰3 小时前
【插件】Logbook 插件完全指南(适配 Ubuntu 24.04)
linux·运维·人工智能·ubuntu·agent·openclaw
好评1243 小时前
【Linux】Socket编程TCP
linux·网络·tcp/ip
前进吧-程序员3 小时前
从零入门:eBPF 是什么、解决什么问题以及它的历史
linux
RisunJan3 小时前
Linux命令-whoami(显示当前有效用户名)
linux·运维·chrome
DevHub5 小时前
probe-rs 教程:一行命令替代 OpenOCD 烧写调试 Cortex-M
arm开发·嵌入式硬件·mcu·rust
yunwei375 小时前
eBPF 教程:用 BPF Qdisc 实现出口限速
linux·云原生·开源