Linux 自带的 LED 灯驱动实验

news2024/12/29 1:06:59

目录

一、配置内核

二、设备树节点编写

1、确定compatible 属性值

 2、编写节点

三、验证

 测试


         其实 Linux 内核已经自带了 LED 灯驱动,要使用 Linux 内核自带的 LED 灯驱动首先得先配置 Linux 内核,使能自带的 LED 灯驱动。

一、配置内核

在Linux内核目录下输入如下命令打开 Linux 配置菜单

make menuconfig

 按照如下路径打开 LED 驱动配置项:

-> Device Drivers
        -> LED Support (NEW_LEDS [=y])
                ->LED Support for GPIO connected LEDs

 选择“LED Support for GPIO connected LEDs”,将其编译进 Linux 内核,也即是在此选项上按下“Y”键,使此选项前面变为“<*>”

 这个在移植nxp官方Linux的时候已经默认选中的了,按下“?”可以查看这个选项详细信息

选中之后保存退出,也是在linux源码根目录下输入下面命令

vi .config

 然后在打开的文件里面,找到下面这个,就说明是开启了 LED 灯驱动

 重新编译 Linux 内核,然后使用新编译出来的 zImage 镜像启动开发板

二、设备树节点编写

        打开文档 Documentation/devicetree/bindings/leds/目录下的leds-gpio.txt和common.txt,文档详细的讲解了 Linux 自带驱动对应的设备树节点该如何编写。

1、确定compatible 属性值

        这个属性用于将设备和驱动绑定起来,其值为字符串列表,用于选择设备所要使用的驱动程序,下面就要找到自带的LED驱动的compatible ,才能写设备树节点

打开Linux源码目录下面路径的文件

/drivers/leds/leds-gpio.c

直接搜 compatible 就能看到自带的LED驱动的compatible

 2、编写节点

 和之前的设备树节点编写一样,编写如下

 187行,节点名字

188行,compatible,一定要和内核自带的LED驱动里面的compatible一样,也就是上一步查找的

189行,这里定义一个子节点名(不重名即可),相当于定义一个物理led灯,如果有多个物理led灯就另外添加子节点,不能在led0里添加

190行,led0的label 属性,此属性为可选,每个子节点都有一个 label 属性, label 属性一般表示LED 灯的名字,比如以颜色区分的话就是 red

191-192行,pinctrl-names 属性,此属性描述 pinctrl 名字一般为“default” ;pinctrl-0 节点,此节点引用自己创建的 pinctrl_gpioled 节点,表示 gpioled 设备的所使用的 PIN 信息保存在pinctrl_gpioled 节点中,在“iomuxc”下定义的,如下

 这两行内容和pinctrl_gpioled 节点在之前“pinctrl 和 gpio 子系统点灯”实验中已定义,可以直接使用。要注意的是,检查有别的设备使用GPIO1_IO03__GPIO1_IO03,有就先屏蔽

193行,gpios是添加 GPIO 属性信息,表明gpioled 所使用的 GPIO 是哪个引脚 ,低电平有效。这个要注意的是,有别的设备使用用到”&gpio1 3“,搜索看是否有别的设备使用,有就先屏蔽,比如我们自己写的gpio-led,先屏蔽

 194行,default-state”属性值,可以设置为 on、 off 或 keep,为 on 的时候 LED 灯默认打开,为 off 的话 LED 灯默认关闭,为 keep 的话 LED 灯保持当前模式

195行,“linux,default-trigger”属性值,也就是设置 LED 灯的默认功能,可以查阅
Documentation/devicetree/bindings/leds/common.txt 这个文档来查看可选功能,比如:
backlight: LED 灯作为背光;
default-on: LED 灯打开;
heartbeat: LED 灯作为心跳指示灯,可以作为系统运行提示灯;
ide-disk: LED 灯作为硬盘活动指示灯;
timer: LED 灯周期性闪烁,由定时器驱动,闪烁频率可以修改;

这里使用心跳指示灯

三、验证

使用编译好的dtb和zImage启动开发板,加载内核之后灯就会自动“双闪”的亮

可以查看一下设备,进入下面路径

/sys/bus/platform/devices

 目录下使用ls,可以找到我们创建的设备树节点"dtsleds"

进入“dtsleds”目录 

 进入“leds”目录

 在这就可以看到我们设备树上面定义的一个red灯

进入“red”目录

 测试

 先测试关闭led灯,现在是心跳灯的亮法,在"red"目录下输入下面命令

echo 0 > brightness

 可以看到执行就会关闭led

测试开灯,在"red"目录下输入下面命令

echo 1 > brightness

可以看到执行就会打开led

重新开启心跳灯,在"red"目录下输入下面命令

echo heartbeat > trigger

好了,测试基本是正常,说明使用自带的led驱动成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/374415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode】剑指 Offer(10)

目录 题目&#xff1a;剑指 Offer 27. 二叉树的镜像 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;剑指 Offer 28. 对称的二叉树 - 力扣&#xff0…

【人脸识别】FROM:提升遮挡状态下的人脸识别效果

论文题目&#xff1a;《End2End Occluded Face Recognition by Masking Corrupted Features》 论文地址&#xff1a;https://arxiv.org/pdf/2108.09468v3.pdf 代码地址&#xff1a;https://github.com/haibo-qiu/from 1.前言 人脸识别技术已经取得了显著的进展&#xff0c;主要…

几个开源 RUST 安全算法库

这段时间把 RUST 语法过了一遍&#xff0c;写一些简单的 Demo 程序没啥问题了&#xff0c;但离掌握这门语言还差的远&#xff0c;需要项目实战才行。我决定从之前研究过的国密算法入手&#xff0c;使用 RUST 实现国密算法。从头编写算法不太现实&#xff0c;上网搜了一下&#…

pandas数据分析36——快速独热和反独热处理

做数据预处理的时候&#xff0c;很多文本分类变量需要变为数值型。 下面提供一些方法&#xff0c;就以最经典的泰但尼克号数据集作为例子。 先导包读取数据 import numpy as np import pandas as pd datapd.read_csv(train.csv) datadata.drop(columns[Name,Ticket,Cabin],…

jmeter报错: java.io.EOFException: Unexpected end of ZLIB input stream

一、背景&#xff1a; 1.1 报错信息 java.io.EOFException: Unexpected end of ZLIB input stream at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:240) at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158) at java.util.zip…

分割线-----

各位好&#xff0c;之前的文章就不再回复和更新了&#xff0c;都是大学的时候随便玩玩的。真的不能算学术研究。致敬过去的自己。努力真的可以幸福&#xff01;虽然还是一样在搬砖&#xff01;

Allegro如何快速锁定整板测试点操作指导

Allegro如何快速锁定整板测试点操作指导 在做PCB设计的时候,会需要给整板添加测试点,用于飞针测试,如下图 在测试点添加好之后,文件输出之前需要把测试点全部锁定,避免因为测试点模具开好,测试点被移动的情况出现 如果逐个锁定Via,容易遗漏 Allegro支持快速锁定整板测…

计算机网络高频知识点(一)

目录 一、http状态码 二、浏览器怎么数据缓存 三、强缓存与协商缓存 1、强缓存 2、协商缓存 四、简单请求与复杂请求 五、PUT 请求类型 六、GET请求类型 七、GET 和 POST 的区别 八、跨域 1、什么时候会跨域 2、解决方式 九、计算机网络的七层协议与五层协议分别指…

华纬科技冲刺A股上市:毛利率下降幅度较大,金雷为实控人

近日&#xff0c;华纬科技股份有限公司&#xff08;下称“华纬科技”&#xff09;递交招股书&#xff0c;准备在深圳证券交易所主板上市。本次冲刺上市&#xff0c;华纬科技计划募资4.34亿元&#xff0c;将用于新增年产8000万只各类高性能弹簧及表面处理技改项目、高精度新能源…

经验之谈——指标异常了怎么办?

本文参考了数据万花筒的文章&#xff0c;结合我自己工作经验。希望给大家一些帮助。 指标异常排查&#xff0c;是数据分析师的工作重点之一&#xff0c;是各行各业数据分析师都绕不开的话题。 本文试图回答&#xff1a; 1、指标波动的影响因素有哪些&#xff1f; 2、如何快速…

Verilog 数据类型和数组简介

在这篇文章将讨论 verilog 中最常用的数据类型&#xff0c;包括对数据表示&#xff0c;线网类型、变量类型&#xff0c;向量类型和数组的讨论。尽管 verilog 被认为是一种弱类型语言&#xff08;loosely typed&#xff09;&#xff0c;但设计者仍必须在 Verilog 设计中为每个端…

处理器管理

处理器状态处理器管理是操作系统中重要组成部分&#xff0c;负责管理、调度和分配计算机系统的重要资源——处理器&#xff0c;并控制程序执行由于处理器管理是操作系统最核心的部分&#xff0c;无论是应用程序还是系统程序&#xff0c;最终都要在处理器上执行以实现其功能&…

5.OCR文本识别CRNN算法

文章目录1.基础介绍2.CRNN模型结构2.1 特征提取2.2 双向循环神经网络层2.3 转录层(Transcription Layers)参考资料欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; title: 2.OCR文本识别Convolution Recurrent Neural Network toc: true ca…

记一次冲突的产生与解决

冲突的概念 git在使用中&#xff0c;如果遵循了它的使用的步骤&#xff0c;比如&#xff0c;在上班之前先去拉取&#xff0c;下班的时候&#xff0c;先提交&#xff0c;如果遵循这个步骤&#xff0c;一般在用的时候没有错误会产生的&#xff0c;但是&#xff0c;因为在开发的时…

Unity 之 实现读取代码写进Word文档功能实现 -- 软著脚本生成工具

Unity 之 实现读取代码写进Word文档功能前言一&#xff0c;实现步骤1.1 逻辑梳理1.2 用到工具二&#xff0c;实现读写文件2.1 读取目录相关2.2 读写文件三&#xff0c;编辑器拓展3.1 编辑器拓展介绍3.2 实现界面可视化四&#xff0c;源码分享4.1 工具目录4.2 完整代码前言 之所…

【SPSS】两独立样本T检验分析详细操作教程(附案例实战)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

消除“马路黑洞”,计讯物联智能井盖综合管理系统平台有绝招

窨井盖作为市政公用设施的重要组成部分&#xff0c;一旦出现松动、损坏等问题时,不仅会影响市容市貌&#xff0c;还会给道路上的车辆、行人带来安全隐患&#xff0c;对社会安定与安全造成极大负面影响。 痛点分析 01 由于地下管线错综复杂、窨井盖分布广泛&#xff0c;加之信…

Linux 进程:父子进程

目录一、了解子进程二、创建子进程1.创建子进程2.区分父子进程三、理解子进程四、创建子进程的意义进程就是运行中的应用程序&#xff0c;如果一个程序较为庞大&#xff0c;我们可以给这个程序创建多个进程&#xff0c;每个进程负责一部分代码的运行。 A进程如果创建了B进程&am…

【华为OD机试模拟题】用 C++ 实现 - GPU 调度(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明GPU 调度题目输入输出示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。

动态规划:完全背包基础、518.零钱兑换II、377.组合总和IV

leetcode 518.零钱兑换IIleetcode 377.组合总和IV完全背包基础有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里…