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 分钟前
大模型的“文字障眼法“:FlipAttack 文本反转越狱技术全解析
linux·python·ai·大模型
艾莉丝努力练剑3 分钟前
【Linux网络】Linux 网络编程:HTTP(四)从手写服务器到生产级 Nginx 与 cpp-httplib 实战
linux·运维·服务器·网络·c++·nginx·http
Yunzenn6 分钟前
深度分析字节最新研究cola-DLM第 01 章:语言生成的三次范式之争 —— 从 RNN 到 AR 到扩散
linux·人工智能·rnn·深度学习·机器学习·架构·transformer
feng_you_ying_li7 分钟前
linux之进程间通信,核心是匿名管道的原理与用匿名管道实现进程池的代码
linux
Harm灬小海12 分钟前
【云计算学习之路】学习Centos7系统:Linux磁盘管理
linux·运维·服务器·学习·云计算
chushiyunen13 分钟前
python使用笔记(linux环境)
linux·笔记·python
沃普天科技17 分钟前
USB显示器驱动板触摸收款机显示器收银机点菜机广告机
驱动开发·游戏·计算机外设·电脑·ar·音视频·硬件工程
艾莉丝努力练剑17 分钟前
【Linux网络】Linux 网络编程:HTTP(三)HTTP 协议原理
linux·运维·服务器·网络·c++·http
小皮蛋儿子18 分钟前
mac 微信双开
linux·服务器·apache
minji...19 分钟前
Linux 网络基础之网络IP层(十一)私有IP地址和公网IP地址,运营商和全球网络,理解公网
linux·服务器·网络·nat·内网·公网·运营商