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

相关推荐
4t4run1 天前
28、Linux 系统定时任务
linux·运维·服务器
~黄夫人~1 天前
Ansible 自动化运维:从 “手动输密码” 到 “一键免密管理”
linux·运维·自动化·ansible
cui__OaO1 天前
Linux驱动--基于驱动设备分离的按键中断驱动
linux·运维·服务器·嵌入式
星期五不见面1 天前
虚拟机使用外部WPN网络
linux
OnlyEasyCode1 天前
Linux下载Navicat、特定版本Mysql
linux·运维·服务器
宇宙帅猴1 天前
【Ubuntu踩坑及解决方案(一)】
linux·运维·ubuntu·go
济6171 天前
linux 系统移植(第七期)----U-Boot 图形化配置及其原理-- Ubuntu20.04
linux·运维·服务器
_Xiaosz1 天前
Photo-SLAM / ORB-SLAM3 编译报错解决:undefined reference to DUtils::Random
linux·ubuntu
kida_yuan1 天前
【Linux】文件系统与 fsck.ext4 修复 - 我踩过的坑与总结
linux·运维·网络
viqjeee1 天前
ALSA驱动开发流程
数据结构·驱动开发·b树