【Linux】【驱动】设备树常用 of 函数

【Linux】【驱动】设备树常用 of 函数

  • 常用的of函数
    • 添加我们要查找的节点的代码 of_find_node_by_path
    • 获取 compatible 属性内容的代码 of_find_property
    • 获取 reg 属性内容的代码 of_property_read_u32_array
    • 获取 status 属性内容的代码 of_property_read_string
  • 演示代码
  • 操作相关的指令

应用层的app代码,通过 of函数来读取设备树中记录的信息
下面就展示一些of函数的使用方式

常用的of函数

添加我们要查找的节点的代码 of_find_node_by_path

test_device_node 这个就是读取到的设备节点

/**********添加我们要查找的节点的代码*******************************/// of_find_node_by_path 函数通过路径查找节点test_device_node = of_find_node_by_path("/test");

获取 compatible 属性内容的代码 of_find_property

test_node_property 这个就包含了设备中的:name,value等信息

    /**********获取 compatible 属性内容的代码****************************/// of_find_property 函数查找节点属性test_node_property = of_find_property(test_device_node, "compatible", &size);if (test_node_property == NULL){//判断是否查找到节点属性内容printk("test_node_property is error \n");return -1;}//打印属性 compatible 的名字printk("test_node_property name is %s\n", test_node_property->name);//打印属性 compatible 的值printk("test_node_property value is %s\n", (char *)test_node_property->value);

获取 reg 属性内容的代码 of_property_read_u32_array

out_values,就是读取出的信息
ret ,是判断读取是否正常

   /**********获取 reg 属性内容的代码**********************************/ret = of_property_read_u32_array(test_device_node, "reg", out_values, 2);if (ret < 0){//打印获取失败printk("of_property_read_u32_array is error \n");return -1;}printk("out_values[0] is 0x%8x\n", out_values[0]);printk("out_values[1] is 0x%8x\n", out_values[1]);

获取 status 属性内容的代码 of_property_read_string

    /**********获取 status 属性内容的代码*********************************/// of_property_read_string 读取字符串属性ret = of_property_read_string(test_device_node, "status", &str);if (ret < 0){//打印获取失败printk("of_property_read_string is error \n");return -1;}//打印 status 属性printk("status is %s \n", str);

演示代码

/*
* @Author:topeet
* @Description: of 函数获取 status 属性
*/
#include <linux/init.h> //初始化头文件
#include <linux/module.h> //最基本的文件,支持动态添加和卸载模块。
#include <linux/of.h> //添加头文件
int size; //定义长度
u32 out_values[2] = {0};
const char *str;
struct device_node *test_device_node; //定义结构体表示我们的节点
struct property *test_node_property; //定义结构体表示我们的节点属性
static int hello_init(void)
{int ret;printk("hello world! \n");/**********添加我们要查找的节点的代码*******************************/// of_find_node_by_path 函数通过路径查找节点test_device_node = of_find_node_by_path("/test");if (test_device_node == NULL){//判断是否查找节点成功printk("of_find_node_by_path is error \n");return -1;}//打印节点的名字printk("test_device_node name is %s\n", test_device_node->name);/**********获取 compatible 属性内容的代码****************************/// of_find_property 函数查找节点属性test_node_property = of_find_property(test_device_node, "compatible", &size);if (test_node_property == NULL){//判断是否查找到节点属性内容printk("test_node_property is error \n");return -1;}//打印属性 compatible 的名字printk("test_node_property name is %s\n", test_node_property->name);//打印属性 compatible 的值printk("test_node_property value is %s\n", (char *)test_node_property->value);/**********获取 reg 属性内容的代码**********************************/ret = of_property_read_u32_array(test_device_node, "reg", out_values, 2);if (ret < 0){//打印获取失败printk("of_property_read_u32_array is error \n");return -1;}printk("out_values[0] is 0x%8x\n", out_values[0]);printk("out_values[1] is 0x%8x\n", out_values[1]);/**********获取 status 属性内容的代码*********************************/// of_property_read_string 读取字符串属性ret = of_property_read_string(test_device_node, "status", &str);if (ret < 0){//打印获取失败printk("of_property_read_string is error \n");return -1;}//打印 status 属性printk("status is %s \n", str);return 0;
}static void hello_exit(void)
{printk("gooodbye! \n");
}module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");

操作相关的指令

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

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

相关文章

docker+playwright

windows10 docker playwright 难点在于windows下docker的安装&#xff0c;以及官方hub被墙的困难。 wsl2 wsl2 ubuntu docker git clone https://gitee.com/lineuman/lcs_playwright.git npm install npx playwright test docker端口怎么映射到主机上面&#xff1f; 设置重…

图、深度优先(DFS)、广度优先(BFS)

图 基本介绍 表示方式 图的创建 from typing import Listclass Graph:vertex_list: List[str] [] # 存储顶点的数组edges: List[list] [] # 存储图中各条边的邻接矩阵num_edges: int 0 # 边的数总数def __init__(self, n: int):"""根据传入的顶点个数初始…

测开(性能测试---LoadRunner)

目录 一、LoadRunner的安装 二、Loadrunner的基本概念 三、开发测试脚本——VUG 3.1 脚本录制 3.2 脚本加强 四、设计场景——Controller LoadRunner是一款开源桌面应用软件&#xff0c;可用来模拟用户负载完成性能测试工作&#xff0c;LoadRunner的功能在版本不断升级的…

JWT详解解读读

&#x1f4d1;前言 本文主要是jwt解读文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日一句&#xff1a;努力一点&#…

WebDAV之π-Disk派盘 + 读出通知

手机各种推销通知太多,如何避免那些繁琐的通知内容,做出一键就能够阅读重要通知的最佳体验,帮助您更加快速和便捷的体验到那些应用内容?推荐大家使用读出通知。 读出通知APP可以设置接收通知的app,还可以用耳机操作,操作简单,你还可以指定播报设备,还有播报的声音的设置…

数据结构 | 顺序表专题

数据结构 | 顺序表专题 文章目录 数据结构 | 顺序表专题课前准备1. 目标2. 需要的储备知识3. 数据结构相关概念 开始顺序表1、顺序表的概念及结构2、顺序表分类3、动态顺序表的实现初始化顺序表顺序表的销毁顺序表的尾插顺序表的头插检查容量顺序表的尾删打印顺序表顺序表的头删…

静态网站免费部署平台介绍

静态网站免费部署平台 静态网站是指由 HTML、CSS 和 JavaScript 等静态文件构成的网站。静态网站部署平台是用于将静态网站文件托管到服务器上的平台。 静态网站部署平台有很多&#xff0c;其中也有一些提供免费服务。以下是一些比较流行的免费静态网站部署平台&#xff1a; …

VS的QT项目找不到qt环境-解决办法

用VS创建的QT项目分享给别人时&#xff0c;可能会出现项目识别不到QT环境的问题&#xff0c;这是因为对方的QT系统环境变量的路径不同&#xff0c;可以在 VS的属性 -> VC目录 -> 包含目录 添加如下内容&#xff1a; %USERPROFILE%\AppData\Local\Microsoft\WindowsApps…

异或运算的魔法

异或运算大家都知道指的是对于两个数转准成二进制之后&#xff0c;相同位置上的如果同时为或者&#xff0c;那么异或的结果就是0&#xff0c;不同就是1&#xff0c;比如01异或00结果是01&#xff0c;但是时间长了相信大家都很容易记混&#xff0c;那么有一种很好记的方式&#…

绕WAF手法总结

云锁 被拦截 http://www.test123.com/article.php?id1%20union%20select%201,2,3 绕过 http://www.test123.com/article.php?id-1/*!36000union*//*!36000distinct*//*!36000select*/1,2,user() 360websec 被拦截 http://www.xxx.com.cn/productshow.php?id79 绕过 http:/…

机器学习笔记 - 神经辐射场(NeRF)的简要概述

一、简述 神经辐射场十分重要。在表示和渲染 3D 场景领域,神经辐射场 (NeRF) 在准确性方面取得了巨大突破。 给定底层场景的多个图像,NeRF 可以从任意视点重建该场景的高分辨率、2D 渲染图。与局部光场融合 (LLFF) 和场景表示网络 (SRN) 等现有技术相比,NeRF 更能够捕获场景…

手撕排序之直接选择排序

前言&#xff1a; 直接选择排序是排序中比较简单的排序&#xff0c;同时也是时间复杂度不是很优的排序。 思想&#xff1a; 本文主要讲解直接选择排序的优化版本。 我们经过一次遍历直接将该数列中最大的和最小的值挑选出来&#xff0c;如果是升序&#xff0c;就将最小的和…

【递归、搜索与回溯算法】第五节.129. 求根节点到叶节点数字之和和814. 二叉树剪枝

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;递归、搜索与回溯算法 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&am…

.jnlp

首先配置电脑的java环境。 百度搜索jre下载&#xff0c;会有很多结果&#xff0c;一般选择官网进行下载。 下载正确的jre版本。 我的电脑是windows 64位&#xff0c;根据你自己电脑的情况选择版本进行下载。不懂自己电脑是多少位的可以看下一步。 查看电脑是64位还是32…

如何改善设备综合效率(OEE)并提高工厂的生产力

在现代制造业中&#xff0c;提高设备综合效率&#xff08;Overall Equipment Efficiency&#xff0c;OEE&#xff09;是企业追求高效生产和优化生产能力的重要目标之一。OEE是一个关键的绩效指标&#xff0c;可以帮助企业评估设备的利用效率、生产效率和质量水平。本文将从三个…

Spring源码-refresh(1)

1、Refresh方法简介 refresh 是Spring的核心流程&#xff0c;主要包含13个方法。这13个方法中主要又包含3个方法。 如图&#xff1a; 其中标记星号的代表主要的方法。从方法中后面的分支数据也可以看出&#xff0c;主要的方法中存在大量的逻辑处理&#xff0c;后面我们会慢慢分…

SQL-正则表达式和约束

文章目录 主要内容一.正则表达式1.操作1代码如下&#xff08;示例&#xff09;: 2.操作2代码如下&#xff08;示例&#xff09;: 3.操作3代码如下&#xff08;示例&#xff09;: 4.操作4代码如下&#xff08;示例&#xff09;: 二.约束1.主键约束 2.自增长约束3.非空约束4.唯一…

mysql 操作慢查询日志

1、mysql 批量插入300w数据 CREATE PROCEDURE test_insert_200w() BEGINDECLARE i INT;SET i1;WHILE i<3000000 DOINSERT INTO shop_user (password, telephone, username) VALUES (admin, 15510304125, concat(admin, i));SET ii1;END WHILE; END; //执行sql call test_in…

国产服务器安装onlyoffice详细教程

1.通过docker安装onlyoffice 找一台能访问互联网的服务器下载onlyoffice镜像 sudo docker pull onlyoffice/documentserver查看镜像 docker images 启动onlyoffice docker run -itd \ --name onlyoffice1 \ --restart always \ -p 8099:80 \ -v /data/docker/onlyoffice/lo…

微信小程序之投票管理

前言 对于会议管理模块&#xff0c;必不可少的当然就是我们的投票管理&#xff0c;实现真正意义上的无纸化办公&#xff0c;本期博客为大家介绍会议管理模块&#xff0c;包括发布投票及查看各类投票的状态 所用技术点 MyBatis、SpringMVC、VentUI MyBatis和SpringMVC在博客主…