RK3568笔记四十:设备树

若该文为原创文章,转载请注明原文出处。

一、介绍

       设备树 (Device Tree) 的作用就是描述一个硬件平台的硬件资源,一般描述那些不能动态探测到的设备,可以被动态探测到的设备是不需要描述。 设备树可以被 bootloader(uboot) 传递到内核,内 核可以从设备树中获取硬件信息。

设备树描述硬件资源时有两个特点。
• 第一,以“树状”结构描述硬件资源。例如本地总线为树的“主干”在设备树里面称为“根
节点”,挂载到本地总线的 IIC 总线、SPI 总线、UART 总线为树的“枝干”在设备树里称为
“根节点的子节点”,IIC 总线下的 IIC 设备不止一个,这些“枝干”又可以再分,除了根节
点没有父节点外,其他节点都只有一个父节点。
• 第二,设备树源文件可以像头文件 (.h 文件) 那样,一个设备树文件引用另外一个设备树文
件,这样可以实现“代码”的重用。例如多个硬件平台都使用 rk 系列处理器作为主控芯片,
那么我们可以将 rk 系列芯片的硬件资源写到一个单独的设备树文件里面一般使用“.dtsi”
后缀,其他板级设备树文件直接使用“# include xxx.dtsi”引用即可。

二、设备树框架

设备树 (Device Tree) 由一系列被命名的结点 (node) 和属性 (property) 组成

1、设备树节点

led_gpio:led-gpio {compatible = "fsl,gpio-led-test";#address-cells = <1>;#size-cells = <1>;pinctrl-names = "default";status = "okay";led1-gpio:led1 {compatible = "fsl,led1-test";pinctrl-0 = <&pinctrl_led>;gpios-led = <&gpio0 RK_PC0 GPIO_ACTIVE_LOW>;status = "okay";};beep-gpio:beep {compatible = "fsl,beep-test";pinctrl-0 = <&pinctrl_beep>;gpios-beep = <&gpio3 RK_PC4 GPIO_ACTIVE_HIGH>;status = "okay";};};

1、节点

led_gpio:led-gpio 前面是节点标签(label),“:”后面的才是节点名字

即节点是led-gpio

里面的led1:led1-gpio是led-gpio子节点,节点为led1

2、compatible 属性

用于将设备和驱动绑定起来,字符串列表用于选择设备所要使用的驱动程序。

一般驱动程序文件都会有一个 OF 匹配表,此 OF 匹配表保存着一些 compatible 值,如果设

备节点的 compatible 属性值和 OF 匹配表中的任何一个值相等,那么就表示设备可以使用这个

驱动

struct of_device_id led_tbl[]={{.c = "led-gpio",},    // led-gpio 对应compatible 名称
};

3、gpios-led

指定了与该设备相关联的 GPIO。&gpiol 表示 GPIO 控制器的句柄(handle),

RK_PC0 是与该 GPIO 相关的资源描述符(resource specifier)

GPIO_ACTIVE_HIGH 表示 GPIO 的

默认电平为高电平。

4、pinctrl-names 和 pinctrl-0

用于指定引脚控制器(pinctrl)的配置。

pinctrl-names 表示引脚控制器配置的名称,这里为 "default"。

pinctrl-0 指定了与该配置相关联的引脚控制器句柄,这里为 &led_gpio_ctrl。

2、pinctrl 节点

led-gpios {/omit-if-no-ref/pinctrl_led: led-pin {rockchip,pins =<0 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none>;};pinctrl_beep: beep-pin {rockchip,pins =<0 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none>;};}; 

在设备树中,pinctrl节点用于定义引脚控制配置

1、led-gpios

led-gpios的设备节点

2、pinctrl_led

这是子节点的名称,表示引脚控制配置的具体实现, led-pin为标签

3、rockchip,pins

这是一个特定于Rockchip平台的引脚配置属性。它指定了引脚编号、引脚名称和引脚功能。在这个例子中,<0 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none>表示:

  • 0: 引脚编号,通常是一个整数,表示引脚在芯片上的位置。

  • RK_PC0: 引脚名称,表示引脚的标识符。

  • RK_FUNC_GPIO: 引脚功能,表示引脚将被用作通用输入输出(GPIO)功能。

  • &pcfg_pull_none: 可选的引脚配置选项,表示没有上拉/下拉电阻。

三、常用的函数

1、of_find_node_by_name 函数

of_find_node_by_name 函数通过节点名字查找指定的节点

2、of_find_node_by_type 函数

of_find_node_by_type 函数通过 device_type 属性查找指定的节点

3、of_find_compatible_node 函数

of_find_compatible_node 函数根据 device_type 和 compatible 这两个属性查找指定的节点,

4、of_find_matching_node_and_match 函数

of_find_matching_node_and_match 函数通过 of_device_id 匹配表来查找指定的节点

5、of_find_node_by_path 函数

of_find_node_by_path 函数通过路径来查找指定的节点

比如:

/* 1、获取设备节点:gpioled */

 gpioled.nd[0] = of_find_node_by_path("/leds/led1");

/* 2、 获取设备树中的 gpio 属性,得到 LED 所使用的 LED 编号 */

gpioled.gpios[0] = of_get_named_gpio(gpioled.nd[0], "gpios-led", 0);

如有侵权,或需要完整代码,请及时联系博主。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

反爬虫策略中的IP地址轮换如何实现?挑战与对策

当今互联网时代&#xff0c;各类网站、网络平台背后隐藏着大量数据&#xff0c;广告数据收集、市场数据收集都需要依托爬虫技术&#xff0c;但很多网站通过反爬虫技术限制或屏蔽爬虫的访问&#xff0c;这给数据收集带来不小的挑战。 为了规避这些反爬虫策略&#xff0c;开发人…

FastAPI 学习之路(六十)打造系统的日志输出

我们要搭建日志系统&#xff0c;可以使用loguru&#xff0c;很不错的一个开源日志系统 pip install loguru 我们在common创建log.py&#xff0c;使用方式也很简单 import os import timefrom loguru import logger# 日志的路径 log_path os.path.join(os.getcwd(), "log…

数据的力量:Facebook如何通过数据分析驱动创新

在当今数字化和信息化的时代&#xff0c;数据被认为是推动企业创新和发展的关键因素之一。作为全球最大的社交媒体平台&#xff0c;Facebook不仅积累了庞大的用户数据&#xff0c;还利用先进的数据分析技术&#xff0c;不断探索和实现新的创新。本文将深入探讨Facebook如何通过…

[iOS]内存分区

[iOS]内存分区 文章目录 [iOS]内存分区五大分区栈区堆区全局区常量区代码区验证内存使用注意事项总结 函数栈堆栈溢出栈的作用 参考博客 在iOS中&#xff0c;内存主要分为栈区、堆区、全局区、常量区、代码区五大区域 还记得OC是C的超类 所以C的内存分区也是一样的 iOS系统中&a…

引领小模型潮流!OpenAI发布功能强大且成本低的GPT-4o mini

GPT-4o mini的成本比GPT-3.5 Turbo低了超过60%&#xff0c;其聊天表现优于Google的Gemini Flash和Anthropic的Claude Haiku。该模型从周四开始对ChatGPT的免费用户、ChatGPT Plus用户和团队订阅用户开放&#xff0c;并将在下周向企业用户开放。OpenAI计划未来将图像、视频和音频…

学懂C#编程:精通C#、.NET开发之核心编程知识学习指南

无论你是编程新手&#xff0c;还是想要深化.NET技能的开发者&#xff0c;本文都将为你提供一条清晰的学习路径&#xff0c;从C#基础到高级特性&#xff0c;每一站都配有详尽解析和实用示例&#xff0c;旨在帮助你建立坚实的知识体系&#xff0c;并激发你对C#及.NET生态的热情。…

【CMU博士论文】结构化推理增强大语言模型(Part 0)

问题 &#xff1a;语言生成和推理领域的快速发展得益于围绕大型语言模型的用户友好库的普及。这些解决方案通常依赖于Seq2Seq范式&#xff0c;将所有问题视为文本到文本的转换。尽管这种方法方便&#xff0c;但在实际部署中存在局限性&#xff1a;处理复杂问题时的脆弱性、缺乏…

成为CMake砖家(5): VSCode CMake Tools 插件基本使用

大家好&#xff0c;我是白鱼。 之前提到过&#xff0c;白鱼的主力 编辑器/IDE 是 VSCode&#xff0c; 也提到过使用 CMake Language Support 搭配 dotnet 执行 CMakeLists.txt 语法高亮。 对于阅读 CMakeLists.txt 脚本&#xff0c; 这足够了。 而在 C/C 开发过程中&#xff…

【Django】网上蛋糕项目商城-注册,登录,修改用户信息,退出功能

概念 通过以上多篇文章的讲解&#xff0c;对该项目的功能已经实现了很多&#xff0c;本文将对该项目的用户注册&#xff0c;登录&#xff0c;修改用户信息&#xff0c;以及退出等功能的实现。 注册功能实现 点击head.html头部页面的注册按钮&#xff0c;触发超链接跳转至use…

开源模型应用落地-FastAPI-助力模型交互-进阶篇(三)

一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理&#xff0c;使应用程序能够处理各种不同的请求场景&#xff0c;提高应用程序的灵活性和可扩展性。 在数据验证和转换方面&#xff0c;高级用法提供了更精细和准确的控制&#…

离散数学,汉密尔顿图判定的实际问题,平面图,平面图的判定,欧拉公式,对偶图,五色定理的证明

目录 1.汉密尔顿图判定的实际问题 判断是否是汉密尔顿图 思考&#xff1a;下图中哪些是汉密尔顿图 例子 2.平面图 平面图的基本概念 并非所有的图都能嵌入平面 平面图的面与次数 欧拉公式 欧拉公式的证明 3.平面图的判定 同胚 kuratowski定理 ​4.对偶图 四…

从0到1搭建数据中台(4):neo4j初识及安装使用

在数据中台中&#xff0c;neo4j作为图数据库&#xff0c;可以用于数据血缘关系的存储 图数据库的其他用于主要用于知识图谱&#xff0c;人物关系的搭建&#xff0c;描述实体&#xff0c;关系&#xff0c;以及实体属性 安装 在官网 https://neo4j.com/ 下载安装包 neo4j-co…

TikTok内嵌跨境商城全开源_搭建教程/前端uniapp+后端源码

多语言跨境电商外贸商城 TikTok内嵌商城&#xff0c;商家入驻一键铺货一键提货 全开源完美运营&#xff0c;接在tiktok里面的商城内嵌&#xff0c;也可单独分开出来当独立站运营 二十一种语言&#xff0c;可以做很多国家的市场&#xff0c;支持商家入驻&#xff0c;多店铺等等…

基于Python+Django+MySQL的心理咨询预约系统

心理咨询预约系统 DjangoMySQL 基于PythonDjangoMySQL的心理咨询预约系统 项目主要依赖Django3.2&#xff0c;MySQL 支持随机验证码生成与登录验证 简介 基于PythonDjangoMySQL的心理咨询预约系统通过连接数据库获取数据&#xff0c;登录新增随机数字验证码验证。具体可以看…

[Python库](4) time库

1.time库简介 time库可以进行时间相关的处理&#xff0c;如访问当前日期和时间&#xff0c;输出不同格式的时间以及等待指定的时间等。time不需要下载&#xff0c;直接导入就可以用( 因为它是Python自带的 )。更多功能可以看另一篇文章[Python库](3) Arrow库。 2.使用 2.1.返…

大数据之数据抽取架构演变过程

架构演变之Flink架构的演变过程 一、 起初搭建整个大数据平台是基于CDH这一套资源管理和整合的CM资源管理器搭建的 整个平台包括了&#xff1a; HDFS&#xff0c;YARN&#xff0c;HIVE&#xff0c;zoozie,FLINK,Spark,Zookeeper等组件搭建而成&#xff0c; 刚开始搭建的时候&am…

如何通过企业微信会话存档保护企业利益?

赵总: 张经理&#xff0c;最近行业内频发数据泄露事件&#xff0c;我们的客户资料和内部沟通记录安全吗&#xff1f; 张经理: 赵总&#xff0c;我们已经采取了一系列措施来加强数据安全。特别是针对企业微信的沟通记录&#xff0c;我们最近引入了安企神软件&#xff0c;它能很…

实践致知第16享:设置Word中某一页横着的效果及操作

一、背景需求 小姑电话说&#xff1a;现在有个word文档,里面有个表格太长&#xff08;如下图所示&#xff09;&#xff0c;希望这一个设置成横的&#xff0c;其余页还是保持竖的&#xff01; 二、解决方案 1、将鼠标放置在该页的最前面闪烁&#xff0c;然后选择“页面”》“↘…

记录些MySQL题集(16)

MySQL 存储过程与触发器 一、初识MySQL的存储过程 Stored Procedure存储过程是数据库系统中一个十分重要的功能&#xff0c;使用存储过程可以大幅度缩短大SQL的响应时间&#xff0c;同时也可以提高数据库编程的灵活性。 存储过程是一组为了完成特定功能的SQL语句集合&#x…

C语言 ——— 实用调试技巧(Visual Studio)

目录 Debug 和 Release 的区别 F10 --- 逐过程调试 & F11 --- 逐语句调试 F9 --- 新建/切换断点 & F5 --- 开始调试 shift F5 & ctrl F5 Debug 和 Release 的区别 Debug&#xff1a;通常为调试版本&#xff0c;它包含调试信息&#xff0c;并且不作任何优化…