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设备树文件运行到开发板上,进行测试。

相关推荐
晚风吹北巷2 小时前
Linux复习篇(自用)
linux·运维·服务器·1024程序员节
by209992 小时前
Linux 压缩传输、进程查看与权限管理
linux·经验分享·1024程序员节
无足鸟ICT3 小时前
【RHCA+】reboot命令(重启)
linux·运维·服务器·1024程序员节
DYWorker0014 小时前
第1课:基于正点原子RK3568开发板读懂Linux内核
linux·运维·网络
Android系统攻城狮4 小时前
Linux FFmpeg深度解析之avformat_open_input调用流程与实战(一)
linux·运维·ffmpeg·车载音视频·ffmpeg音视频·音视频进阶手册
吹什么轩4 小时前
linux系统复习:Ext 文件系统(一个文件在磁盘上到底长什么样)
linux·运维·服务器
吹什么轩5 小时前
linux系统复习:全景串联
linux·运维·服务器
m0_547486665 小时前
《Ubuntu Linux操作系统与实验教程》全套PPT课件2026
linux·ubuntu·操作系统
John_Hui5 小时前
第 1 篇:VMware 安装 Ubuntu 24.04.3 Server
linux·运维·ubuntu