设备树下Led驱动实验-向设备树文件添加Led设备节点

一. 简介

前面简单学习了设备树文件的内容,语法,以及如何向设备树文件中添加设备节点信息。学习了驱动开发时,会使用到的设备树常用OF操作函数。本文我们就开始第一个基于设备树的 Linux 驱动实验-LED驱动实现。
本文具体学习在设备树文件添加设备节点信息,搭建 LED驱动代码框架。

二.  设备树下Led驱动代码框架搭建

1. 向设备树文件中添加LED设备节点

打开 移植的 Linux内核源码(NXP官方提供的),因为这里所使用的开发板是 正点原子提供的 nand-Flash版的 ALPHA开发板。所以,对应设备树源文件为 imx6ull-alientek-nand.dts。

为了创建的设备节点更方便的在开发板的目录下找到,所以,这里打算将 Led灯的设备节点创建在设备树的根目录下。

打开 设备树源文件 imx6ull-alientek-nand.dts,该文件调用了:

#include "imx6ull-14x14-evk-gpmi-weim.dts"

于是打开 imx6ull-14x14-evk-gpmi-weim.dts 文件,该文件中代码可以确定,依然没有到设备树的根目录。该文件调用了:

#include "imx6ull-14x14-evk.dts"

打开 imx6ull-14x14-evk.dts文件,该文件中可以看出,这里存在设备树的根目录。所以,可以在 imx6ull-14x14-evk.dts设备树文件下,添加 Led设备节点信息。

在 imx6ull-14x14-evk.dts文件的设备树根节点最后,位置如下:

/dts-v1/;

#include <dt-bindings/input/input.h>
#include "imx6ull.dtsi"

/ {
.........
};

imx6ull-14x14-evk.dts文件的设备树根节点最后。即在 "/ {};" 上面大括号的内部最下面。

添加如下设备节点:

/* LingXueWu/2024/01/16 */
    alpha_led{
        compatible = "alientek,alpha_led";
        #address-cells = <1>;
		#size-cells = <1>;
        status = "okay";
        reg = < 0X020C406C 0x04  /*CCM_CCGR1_BASE  */
                0X020E0068 0x04  /*SW_MUX_GPIO1_IO03_BASE */
                0X020E02F4 0x04  /*SW_PAD_GPIO1_IO03_BASE */
                0X0209C004 0x04  /*GPIO1_GDIR_BASE */
                0X0209C000 0x04>; /*GPIO1_DR_BASE */
    };

分析如下:

Led设备树节点需要写的是 所要操作的寄存器地址,即 设备节点的 "reg"参数值 。所以,就需要

"address-cells"参数与 "size-cells"参数 这两个参数,前者表示地址,后者表示地址所占用的字节长度。

"reg" 参数:前面表示 涉及 Led灯初始化需要操作的寄存器地址,后面 0x04表示地址所占用的字节长度为 4字节。

"compatible" 参数,表示设备树兼容的设备。

"status" 参数,表示设备节点的状态是:打开还是关闭。

编译设备树文件,即 dtb设备树文件,进入 以上 Linux内核源码的根目录下,输入如下命令:

make dtbs

确定重新生成 imx6ull-alientek-nand.dtb设备树文件后,拷贝 设备树文件到 tftp服务所设置的目录下:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga$ sudo cp ./arch/arm/boot/dts/imx6ull-alientek-nand.dtb /home/wangtian/linux/tftp_file/ -f
[sudo] wangtian 的密码: 
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga$ 

2.  开发板上电测试

开发板上电,进入系统下。进入 "/proc/device-tree" 目录,查看是否已经存在 Led设备节点:

可以看出,已经存在 led的设备节点 alpha_led。

进入 alpha_led目录下:

可以看出,led设备节点下的属性,寄存器灯信息已经创建成功。

接下来开始实现 Led驱动代码部分。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MES管理系统解决方案在汽配企业质量控制中的作用

在当今高度自动化的制造业环境中&#xff0c;质量控制已成为确保产品高品质的关键。特别是在汽配企业&#xff0c;产品通常由多个部件组装而成&#xff0c;且这些部件可能来自不同的供应商。这种复杂的生产模式带来了一个挑战&#xff1a;如何确保每一次生产操作都是正确的&…

使用WAF防御网络上的隐蔽威胁之命令注入攻击

命令注入攻击是网络安全领域的一种严重威胁&#xff0c;它允许攻击者在易受攻击的应用程序上执行恶意命令。 这种攻击通常发生在应用程序将用户输入错误地处理为操作系统命令的情况下。 什么是命令注入攻击 定义&#xff1a;命令注入攻击发生在攻击者能够在易受攻击的应用程…

Pytorch基础:数据读取与预处理——图像读取与存储

Pytorch基础&#xff1a;数据读取与预处理——图像读取与存储 1.读取图片2. 使用 matplotlib 库显示和保存图像 1.读取图片 图像库 opencv-python、imageio、PIL 等都具有图像读取的功能。 (base) PS C:\Users\阳> conda activate yang (yang) PS C:\Users\阳> python …

构建未来教育:在线培训系统开发的技术探讨

随着远程学习的崛起和数字化教育的普及&#xff0c;在线培训系统的开发成为了现代教育的核心。本文将深入讨论在线培训系统的关键技术要点&#xff0c;涵盖前后端开发、数据库管理、以及安全性和身份验证等关键方面。 前端开发&#xff1a;提供交互性与用户友好体验 在构建在…

3d模型为什么打光只显示黑色---模大狮模型网

3D建模是现代制作动画、电影、游戏等数字媒体内容的重要工具。在建模过程中&#xff0c;打光是一个重要的环节&#xff0c;它可以让3D模型更加真实、有趣和生动。然而&#xff0c;如果打光不当&#xff0c;3D模型可能会呈现出黑色的效果&#xff0c;这可能会让人感到困惑和沮丧…

MySQL/Oracle 的 字符串拼接

目录 MySQL、Oracle 的 字符串拼接1、MySQL 的字符串拼接1.1 CONCAT(str1,str2,...) : 可以拼接多个字符串1.2 CONCAT_WS(separator,str1,str2,...) : 指定分隔符拼接多个字符串1.3 GROUP_CONCAT(expr) : 聚合函数&#xff0c;用于将多行的值连接成一个字符串。 2、Oracle 的字…

计算机网络(超详解!) 第二节 数据链路层(上)

1.数据链路层使用的信道 数据链路层使用的信道主要有以下两种类型&#xff1a; 1.点对点信道&#xff1a;这种信道使用一对一的点对点通信方式。 2.广播信道&#xff1a;这种信道使用一对多的广播通信方式&#xff0c;因此过程比较复杂。广播信道上连接的主机很多&#xff0…

服务器使用中容易遇见的问题和处理方法

服务器支撑着整个企业的信息数据&#xff0c;对公司的信息储存、业务开展、正常运作等等环节都具有着至关重要的意义。然而&#xff0c;服务器在日常运行过程中&#xff0c;由于其复杂的硬件结构、繁琐的运行原理&#xff0c;经常会出现一些大大小小的问题困扰着各位。下面精心…

java基础:使用冒泡排序求数组的最大值

什么是冒泡排序 冒泡排序是一种简单的排序算法&#xff0c;其基本思想是多次遍历待排序的元素&#xff0c;比较相邻的两个元素&#xff0c;如果顺序不对则交换它们的位置&#xff0c;直到整个序列按照从小到大&#xff08;或从大到小&#xff09;的顺序排列。 具体的步骤如下&…

gsap timeline示例-实现滚动切换手机颜色

前言 最近使用gsap有点上瘾。看过一个手机官网滚动切换手机颜色的效果&#xff0c;初次见还是很炫。所以呢&#xff0c;就去研究了下&#xff0c;发现也不过如此。我们现在使用gsap来实现它。 首先来看最终效果&#xff1a; gsap timeline示例-实现滚动切换手机颜色 实现原理…

Linux用户提权

新建用户 用root账户修改文件&#xff0c;添加信任用户 使用sudo提权&#xff0c;可以使用 **root删除新建账户**

微服务接口工具Swagger2

##1、什么是Swagger? # 官网 https://swagger.io/核心功能 生成接口说明文档生成接口测试工具 2、SpringBoot集成Swagger2 1&#xff09;、添加依赖 <!-- swagger2 --><!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --><depen…

【昕宝爸爸小模块】深入浅出之JDK21 中的虚拟线程到底是怎么回事(一)

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你&#x1f44d;点赞、&#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发&#xff0c;欢迎转载&#xff0c;要注明出处哦&#xff01; 先感谢优秀的你能认真的看完本文&…

开发设计和迭代管理效率提升:PDManer元数建模

一、引言 在复杂多变的软件开发全生命周期中&#xff0c;数据库设计与建模扮演着举足轻重的角色。这一环节不仅关乎数据存储效率和应用性能优化&#xff0c;而且对于系统架构稳健性及业务逻辑清晰化具有深远影响。因此&#xff0c;选择一款功能强大且高效的数据库建模工具至关…

01背包问题dp数组理解dp[i][j-w]

文章目录 一、01背包是什么&#xff1f;二、例子三、解决思路dp(动态规划) 一、01背包是什么&#xff1f; 有 n 件物品和一个最多能背重量为 w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。 每件物品只能用一次&#xff0c;求解将哪些物品装入背包…

Angular系列教程之MVC模式和MVVM模式

文章目录 MVC模式MVVM模式MVC与MVVM的区别Angular如何实现MVVM模式总结 在讨论Angular的时候&#xff0c;我们经常会听到MVC和MVVM这两种设计模式。这两种模式都是为了将用户界面(UI)和业务逻辑分离&#xff0c;使得代码更易于维护和扩展。在这篇文章中&#xff0c;我们将详细介…

【光波电子学】基于MATLAB的多模光纤模场分布的仿真分析

基于MATLAB的多模光纤模场分布的仿真分析 一、引言 &#xff08;1&#xff09;多模光纤的概念 多模光纤&#xff08;MMF&#xff09;是一种具有较大纤芯直径的光纤结构&#xff0c;其核心直径通常在10-50微米范围内。与单模光纤&#xff08;SMF&#xff09;相比&#xff0c;…

nginx基础面试题以及配置文件解析和命令控制

目录 1、nginx是什么 2、nginx的特点 3、为什么中国大陆有&#xff1a;百度、京东、新浪、网易、腾讯、淘宝等这么多用户使用nginx 4、nginx 的内部技术架构 上一期我们配置安装了nginx接着讲一下nginx配置文件的解析和nginx 命令控制 感谢观看&#xff01;希望能够帮助到…

用原型实现Class的各项语法

本人之前对Class一直不够重视。平时对原型的使用&#xff0c;也仅限于在构造函数的prototype上挂属性。原型尚且用不着&#xff0c;更何况你Class只是原型的一颗语法糖&#xff1f; 直到公司开始了一个webgis项目&#xff0c;使用openlayers。看了下openlayers的代码&#xff0…

Sectigo有几种入门https证书买一年送一月

https证书是由CA认证机构颁发的数字证书&#xff0c;对网站传输数据进行加密&#xff0c;维护互联网环境安全&#xff0c;消除浏览器“不安全”提示。Digicert、Thawte、Sectigo等都是知名的CA认证机构&#xff0c;颁发的https证书中有很多都是入门级的https证书&#xff0c;其…