RK3568笔记四十:设备树

news2024/9/20 8:06:07

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

一、介绍

       设备树 (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.coloradmin.cn/o/1936141.html

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

相关文章

论文复现:Predictive Control of Networked Multiagent Systems via Cloud Computing

Predictive Control of Networked Multiagent Systems via Cloud Computing论文复现 文章目录 Predictive Control of Networked Multiagent Systems via Cloud Computing论文复现论文摘要系统参数初始化系统模型观测器预测过程控制器设计系统的整体框图仿真结果 论文摘要 翻译…

巧用Vue3 composition api的计算属性实现扁平化tree连线

本示例节选自vue3最新开源组件实战教程大纲&#xff08;持续更新中&#xff09;的tree组件开发部分。将进一步把基于Vue3 composition api的computed计算属性特性应用到组件开发实战中&#xff0c;继续以最佳实践的方式呈现给大家。 下面我们要实现的是扁平化的dom结构所呈现的…

大模型面经

大模型知识 基础算法 机器学习 常见经典公式推导 LR手推、求导、梯度更新 SVM原形式、对偶形式 FM公式推导 GBDT手推 XGB推导 AUC计算 神经网络的反向传播 常见通用问题 评价指标 分类 结合混淆矩阵 准确率&#xff08;Accuracy&#xff09; 识别对了的正例&am…

Qt Style Sheets-入门

Qt 样式表是一种强大的机制&#xff0c;允许您自定义小部件的外观&#xff0c;这是在通过子类化QStyle已经可行的基础上的补充。Qt 样式表的概念、术语和语法在很大程度上受到 HTML级联样式表 (CSS)的启发&#xff0c;但适用于小部件的世界。 概述 样式表是文本规范&#xff0…

SpringBoot增加网关服务

一、新建gateway项目 二、添加依赖 dependencies {implementation org.springframework.cloud:spring-cloud-starter-gateway:4.0.0 } 三、增加路由规则配置 一个web服务、一个service服务 bootstrap.yaml&#xff1a; server:port: 80 spring:application:name: gatewayc…

Java核心(六)多线程

线程并行的逻辑 一个线程问题 起手先来看一个线程问题&#xff1a; public class NumberExample {private int cnt 0;public void add() {cnt;}public int get() {return cnt;} }public static void main(String[] args) throws InterruptedException {final int threadSiz…

循环算法--整数反转

目录 一.前言 二.算法的核心原理 三.算法的核心代码及注释详解 一.前言 算法要求&#xff1a;给定一个整数n,要求对其中的数字进行反转。例如&#xff0c;当给定一个整数123的时候&#xff0c;反转的结果就为321。 二.算法的核心原理 通过仔细观察&#xff0c;我们不难发现&a…

扫描某个网段下存活的IP:fping

前言&#xff1a; 之前用arp统计过某网段下的ip&#xff0c;但是有可能统计不全。网络管理平台又不允许登录。想要知道当前的ip占用情况&#xff0c;可以使用fping fping命令类似于ping&#xff0c;但比ping更强大。与ping需要等待某一主机连接超时或发回反馈信息不同&#x…

非线性规划例题

求解非线性问题的函数&#xff1a; 操作步骤&#xff08;最优&#xff09;&#xff1a; 1、先试用蒙特卡洛模拟优先求出最优的初始值X0 2、使用函数&#xff1a;fincon求解最优解 clc,clear % 设置蒙特卡洛模拟的次数&#xff1a; n 10000000; fmin inf; x1 unifrnd(-10…

昇思MindSpore 应用学习-FCN图像语义分割-CSDN

日期 心得 昇思MindSpore 应用学习-FCN图像语义分割 (AI 代码解析) 全卷积网络&#xff08;Fully Convolutional Networks&#xff0c;FCN&#xff09;是UC Berkeley的Jonathan Long等人于2015年在Fully Convolutional Networks for Semantic Segmentation[1]一文中提出的用…

链表(4) ----跳表

跳表&#xff08;Skip List&#xff09;是一种随机化的数据结构&#xff0c;用于替代平衡树&#xff08;如 AVL 树或红黑树&#xff09;。它是基于多层链表的&#xff0c;每一层都是上一层的子集。跳表可以提供与平衡树相似的搜索性能&#xff0c;即在最坏情况下&#xff0c;搜…

JMX 反序列化漏洞

前言 前段时间看到普元 EOS Platform 爆了这个洞&#xff0c;Apache James&#xff0c;Kafka-UI 都爆了这几个洞&#xff0c;所以决定系统来学习一下这个漏洞点。 JMX 基础 JMX 前置知识 JMX&#xff08;Java Management Extensions&#xff0c;即 Java 管理扩展&#xff0…

verilog基础语法入门

文章目录 前言一、模块定义1. 模块声明2. 端口定义3. 信号类型声明4. 逻辑功能定义 二、运算符与表达式1. 算术运算符2. 逻辑运算符3. 位运算符4. 关系运算符5. 等式运算符6. 缩减运算符7. 移位运算符8. 条件运算符9. 位拼接运算符 三、语句1. 赋值语句2. 块语句3. 条件语句4. …

第1关 -- Linux 基础知识

闯关任务 完成SSH连接与端口映射并运行hello_world.py ​​​​ 可选任务 1 将Linux基础命令在开发机上完成一遍 可选任务 2 使用 VSCODE 远程连接开发机并创建一个conda环境 创建新的虚拟环境lm3 可选任务 3 创建并运行test.sh文件 参考文档 文档&#xff1a;https://g…

tcp协议下的socket函数

目录 1.socket函数 2.地址转换函数 1.字符串转in_addr的函数:​编辑 2.in_addr转字符串的函数&#xff1a;​编辑 1.关于inet_ntoa函数 3.listen函数 4.简单的Server模型 1.初步模型 1.sock函数和accept函数返回值的sockfd的区别 2.运行结果和127.0.0.1的意义 2.单进…

如何设计数据中心100G网络光纤布线

随着全球企业对带宽的需求呈指数级增长&#xff0c;数据中心需要升级以增强其计算、存储和网络能力。数据中心从10G/25G向100G迁移成为必然趋势。随着网络升级&#xff0c;数据中心的光纤布线系统也需要随之优化。本文将指导您如何设计数据中心100G网络光纤布线。 100G以太网的…

【LSTM和GRU极简,和最新的TT也就是状态】机器学习模型来学习状态

LSTM&#xff08;长短期记忆网络&#xff09;中的关键参数包括输入门、遗忘门、输出门、细胞状态和隐藏状态。以下是如何进行推理计算的示例&#xff1a; LSTM参数和公式 输入门&#xff08;i_t&#xff09;&#xff1a;决定输入的信息量。 遗忘门&#xff08;f_t&#xff0…

路网双线合并单线——ArcGIS 解决方法

路网双线合并成单线是一个在地图制作、交通规划以及GIS分析中常见的需求。双线路网定义&#xff1a;具有不同流向、不同平面结构的道路。此外&#xff0c;车道数较多的道路&#xff08;例如&#xff0c;双黄实线车道数大于4的道路&#xff09;也可以视为双线路网&#xff0c;本…

appium自动化测试报错。

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

sip-URI的基本结构

sip-URI&#xff08;sip Uniform Resource Identifier&#xff1a;会话初始协议统一资源标识符&#xff09;的一般格式&#xff1a; sip:[userinfo]host[:port][;transporttcp|udp|tls|sctp][?parameters] sip: 协议标识符&#xff0c;表示这是一个SIP URI。userinfo&#x…