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

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言