驱动——设备树属性获取相关实验

news2025/1/12 8:45:24

 完成设备树属性获取相关实验

通过键名获取数值相关API获取设备树属性

1、要获取的属性如下所示:

/*mynode@0x12345678{

     compatible = "hqyj,mynode";//字符串

     astring="hello 22071";//字符串

     uint  =<0xaabbccdd 0x11223344>;//32位无符号整数

     binarry=[00 0c 29 7b f9 be];//二进制数据

     mixed ="hello",[11 22],<0x12345678>;//字符串,二进制数据。32位无符号整数

  };

*/

2、获取属性的相关API:

①字符串类型属性获取API:

int of_property_read_string(const struct device_node *np, const char *propname, const char **out_string)

功能:读取字符串类型的值

参数:

np:节点结构体指针

proname:键名

out_string:指获取到的字符串的首地址

返回值:成功返回0,失败返回错误码

 ②获取32位无符号整型的值:

int of_property_read_u32_index(const struct device_node *np, const char *propname, u32 index, u32 *out_value)

功能:获取32位无符号整型的值

参数:

np:节点结构体指针

propname:键名

index:索引号

out_value:获取到的值

返回值:成功返回0,失败返回错误码

 ③获取32位无符号整型数组

int of_property_read_variable_u32_array(const struct device_node *np, const char *propname, u32 *out_values, size_t sz_min, size_t sz_max)

功能:获取一个u32位数组

参数:

np:节点结构体指针

proname:键名

out_values:存放数据的数组名

sz_min:期待读取到的元素的最小个数

sz_max:期待读取到元素的最大个数

返回值:成功返回读取到的个数,失败返回错误码

④获取无符号8位类型的数组

int of_property_read_variable_u8_array(const struct device_node *np, const char *propname, u8 *out_values, size_t sz_min, size_t sz_max)

作用:读取u8类型的数组

参数:

np:节点结构体指针

proname:键名

out_values:存放数据的数组名

sz_min:期待读取到的元素的最小个数

sz_max:期待读取到元素的最大个数

返回值:成功返回读取到的个数,失败返回错误码

 int of_property_read_u8_array(const struct device_node *np, const char *propname, u8 *out_values, size_t sz)

作用:读取u8类型的数组

np:节点结构体指针

proname:键名

out_values:存放数据的数组名

sz:数组成员的个数

返回值:成功返回0,失败返回错误码

 3、设备树实现代码如下所示: 

#include<linux/init.h>
#include<linux/module.h>
#include<linux/of.h>
 /*mynode@0x12345678{
     compatible = "hqyj,mynode";//字符串
     astring="hello 22071";//字符串
     uint  =<0xaabbccdd 0x11223344>;//32位无符号整数
     binarry=[00 0c 29 7b f9 be];//二进制数据
     mixed ="hello",[11 22],<0x12345678>;//字符串,二进制数据。32位无符号整数
  };
*/
struct property *pr;
struct device_node *node;
int len,i,ret;
unsigned int val;
unsigned int array[2];
unsigned char brr[6];
const char *str;

static int __init mycdev_init(void)
{
    node = of_find_node_by_path("/mynode@0x12345678");
    if(NULL==node)
    {
        printk("of find node by path error\n");
        return -EFAULT;
    }
    printk("of find node by path success\n");
    //获取compatible属性信息--字符串
    ret = of_property_read_string(node,"compatible",&str);
    if(ret)
    {
        printk("of property read string error\n");
        return -EFAULT;
    }
    printk("value=%s\n",str);

    //获取astring属性信息--字符串
    ret = of_property_read_string(node,"astring",&str);
    if(ret)
    {
        printk("of property read string error\n");
        return -EFAULT;
    }
    printk("value=%s\n",str);

    //获取uintu信息--32位无符号整数
    ret = of_property_read_variable_u32_array(node,"uint",array,2,2);
    if(ret<0)
    {
        printk("of property read variable u32 index error\n");
        return -EFAULT;
    }
    printk("value:%#x %#x\n",array[0],array[1]);

    //获取binarry信息--二进制数据
    ret = of_property_read_u8_array(node,"binarry",brr,6);
    if(ret<0)
    {
        printk("of property read variable u32 index error\n");
        return -EFAULT;
    }
    printk("value:=%#x %#x %#x %#x %#x %#x\n",brr[0],brr[1],brr[2],brr[3],brr[4],brr[5]);
    //获取mixd信息--字符串,二进制数据,32位无符号整型
    ret = of_property_read_string(node,"mixed",&str);
    if(ret)
    {
        printk("of property read string error\n");
        return -EFAULT;
    }
    printk("value=%s ",str);
    ret = of_property_read_u8_array(node,"mixed",brr,8);
    if(ret<0)
    {
        printk("of property read variable u32 index error\n");
        return -EFAULT;
    }
    printk("%#x %#x ",brr[6],brr[7]);
    ret = of_property_read_u32_index(node,"mixed",2,&val);
    if(ret<0)
    {
        printk("of property read u32 index error\n");
        return -EFAULT;
    }
    printk("%#x\n",val);
    
    return 0;
}
static void __exit mycdev_exit(void)
{

}
module_init(mycdev_init);
module_exit(mycdev_exit);
MODULE_LICENSE("GPL");

 4、实验现象

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

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

相关文章

SpringBoot SpringBoot 开发实用篇 6 监控 6.5 health 端点指标控制

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.5 health 端点指标控制6.5.1 问题引入6.5.2 health 端点指标…

十二、虚拟 DOM 和 render() 函数(1)

本章概要 虚拟DOMrender()函数 Vue.js 之所以执行性能高&#xff0c;一个很重要的原因就是它的虚拟 DOM 机制。 12.1 虚拟 DOM 浏览器在解析 HTML 文档时&#xff0c;会将文档中的元素、注释、文本等标记按照它们的层级关系组织成一棵树&#xff0c;这就是熟知的 DOM 树。元…

MCE | LYTAC 与靶向蛋白降解技术

靶向蛋白降解 (TPD) 是一种有效性的&#xff0c;高度选择性的诱发蛋白降解方式。近年来&#xff0c;以 PROTAC 为代表的 TPD 技术的研究如火如荼。PROTAC 主要降解的是胞内蛋白&#xff0c;实际上&#xff0c;有 40% 的基因产物为胞外和膜相关蛋白&#xff0c;如生长因子、细胞…

一种新的数据聚类启发式优化方法——黑洞算法(基于Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

【学习QT必备的C++基础】C++类和对象

文章目录C类的定义和对象的创建详解类的定义创建对象访问类的成员使用对象[指针](http://c.biancheng.net/c/80/)总结C类的成员变量和成员函数详解在类体中和类体外定义成员函数的区别C类成员的访问权限以及类的封装简单地谈类的封装对private和public的更多说明C对象的内存模型…

异构网络小入

A Survey of Heterogeneous Information Network Analysis Heterogeneous Graph Attention Network 异构网络很火吗&#xff1f; 在一个网络中&#xff0c;不用节点的类型不同&#xff0c;这是肯定的。 所以&#xff0c;异构网络在表征比较复杂的情形时&#xff0c;是比较合适…

低代码引擎半岁啦,来跟大家唠唠嗑...

作者&#xff1a;刘菊萍(絮黎) 之前低代码引擎一直是在阿里集团内部进行孵化的&#xff0c;对外开源算是一次新生。从2022年3月23日开源至今&#xff0c;我们的低代码引擎已经半岁了&#xff0c;希望借这个机会来跟大家唠唠嗑。 开源地址&#xff1a;https://github.com/aliba…

WeOps上新|V3.12版本提升网络设备的自动化能力

本次WeOpsV3.12版本更新主题总结为&#xff1a; 持续补充自动发现能力&#xff0c;覆盖网络设备和数据库扩充自动化运维&#xff0c;支持网络设备脚本工具内置AD账号自动化流程&#xff0c;支持AD账号创建/密码重置/删除增加监控告警移动端&#xff0c;覆盖更多场景优化凭据管…

WebDAV之葫芦儿·派盘+人生Life

人生Life 支持webdav方式连接葫芦儿派盘。 自己经常容易忘记的情,后来便记录在便签中,以作提醒和备忘;但是到了时间还是会因时间安排不妥冲突而无法完成,拖拖拉拉、还是很乱,总是会忘记会议、想不起重要的行程,非常烦恼;直到体验了人生Life这几款日程、待办事情的APP后…

WordPress图片自动添加alt标签和title的两种方法(插件or代码)实例

使用WordPress家长朋友知道&#xff0c;上传图片的时候是不会自动添加alt标签的&#xff0c;从seo和用户体验来看&#xff0c;图片加alt标签还是非常非常重要的。 WordPress自动给图片添加alt标签和title的两种方法&#xff08;插件or代码&#xff09;实例Alt信息&#xff1a; …

MemArts :高效解决存算分离架构中数据访问的组件

摘要&#xff1a;计算侧需要一个高速的缓存层来消除计算集群和OBS之间的数据访问鸿沟。为了解决这个问题&#xff0c;提出MemArts CC分布式客户端缓存。本文分享自华为云社区《华为云全新缓存生态组件MemArts》&#xff0c;作者&#xff1a; MichaelYun。 公有云的基础设施都是…

piwigo搭建在线网络相册,并随时随地访问

作为一个打工人&#xff0c;我们所在的城市总与父母相隔甚远&#xff0c;而成家立业后&#xff0c;孩子又成所有人的羁绊&#xff0c;有的孩子在自己身边&#xff0c;引得远方父母思念挂牵&#xff0c;时时刻刻与父母视频通话很不现实&#xff0c;老人也没法和自己的老伙伴们分…

酒店管理系统

登录模块设计 &#xff08;1&#xff09;在登录界面&#xff0c;包含用户名&#xff0c;密码信息&#xff0c;输入之后点击登录进入酒店管理系统。 &#xff08;2&#xff09;用户名和密码都不能为空&#xff0c;否则会弹出对话框进行提醒。 &#xff08;3&#xff09;后端也会…

口碑最好的运动蓝牙耳机推荐,2022年最值得入手的六款运动耳机

说到耳机&#xff0c;绝大多数人都在使用&#xff0c;对于运动爱好者就更不用多说&#xff0c;运动耳机随身携带着&#xff0c;跑道哪&#xff0c;戴到哪。随着耳机越来越多样化&#xff0c;各种耳机层出不穷&#xff0c;大家都难挑选&#xff0c;不知道怎么找&#xff0c;一副…

Aspose.PDF for .NET 22.11.0 Crack

Aspose.PDF for .NET 是一个本地库&#xff0c;使开发人员能够将 PDF 处理功能添加到他们的应用程序中。API 可用于构建任何类型的 32 位和 64 位应用程序&#xff0c;以在不使用 Adob​​e Acrobat 的情况下生成或读取、转换和操作 PDF 文件。 Aspose.PDF for .NET API 允许执…

红队渗透靶场之W1R3S靶场(超详细!)

W1R3S考察知识 nmap的基本使用目录爆破工具的使用CMS漏洞的利用Linux用户的简单提权 W1R3S靶场搭建 W1R3S靶场下载地址: https://download.vulnhub.com/w1r3s/w1r3s.v1.0.1.zip 将下载的虚拟机文件放到VMware中打开运行即可 渗透步骤 信息收集 1.存活主机发现 扫描C段存活…

CDMP认证考试您最关心的事——考试通过率

当今&#xff0c;数据要素化已然成为数字时代最重要的基础资源和战略资源。培养专业的数据治理人才&#xff0c;建立企业数据治理体系&#xff0c;提升数字化转型能力已成为当今社会企业发展的必然趋势。专门的数据管理专业认证考试并不多&#xff0c;主要就是由DAMA&#xff0…

day01 Linux

day01 Linux 第一章 Linux的概述 第一节 Linux是什么 Linux 英文解释为 Linux is not Unix Linux是Linus Torvolds于1991年开发的一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。 (注&#xff…

MySQL排查篇:该如何定位并解决线上突发的Bug与疑难杂症?

前面两章中&#xff0c;聊到了关于数据库性能优化的话题&#xff0c;而本文则再来聊一聊关于MySQL线上排查方面的话题。线上排查、性能优化等内容是面试过程中的“常客”&#xff0c;而对于线上遇到的“疑难杂症”&#xff0c;需要通过理性的思维去分析问题、排查问题、定位问题…

【Flutter】shape 属性 ShapeBorder,形状

文章目录前言一、shape 是什么&#xff1f;二、不同的形状1.BeveledRectangleBorder2.Border3.CircleBorder圆形4.ContinuousRectangleBorder连续圆角5.StadiumBorder 体育场边界 &#xff0c;药丸形状6.OutlineInputBorder外边框可以定制圆角7.UnderlineInputBorder下划线总结…