of_property_read_string 剖析~

前言

今天在一个群里面看到的一个朋友提交,说of_property_read_string 这个函数有两个定义,到底是用了哪个呢?

所以这篇文章就说下这个函数。

函数引用的头文件

引用的头文件位置在

\kernel-4.4\include\linux\of.h

其中一个是

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

还有一个是

static inline int of_property_read_string(struct device_node *np,const char *propname,const char **out_string)
{return -ENOSYS;
}

但是并不是两个都用到,他们用了一个宏  CONFIG_OF 来选择

CONFIG_OF 宏有什么用?

这个宏的解释是

Open Firmware. This was invented long time ago when Apple was producing laptops based on PowerPC CPUs. Openfirmware provides a good description of the devices connected to the platform. In Linux kernel the part that works with device data is called Device Tree (DT). More details in theUsage model.

他的作用是

Openfirmware provides a good description of the devices connected to the platform

他提供了一种更好的方式来连接设备和驱动。

他是名字是

called Device Tree (DT)

DTS,那很明显了,开了这个宏,就表示使用了DTS设备树的方式来连接设备和驱动程序。

of_property_read_string 函数本体

函数位置

"./drivers/of/base.c"

函数原型

/*** of_property_read_string - Find and read a string from a property* @np:         device node from which the property value is to be read.* @propname:   name of the property to be searched.* @out_string: pointer to null terminated return string, modified only if*              return value is 0.** Search for a property in a device tree node and retrieve a null* terminated string value (pointer to data, not a copy). Returns 0 on* success, -EINVAL if the property does not exist, -ENODATA if property* does not have a value, and -EILSEQ if the string is not null-terminated* within the length of the property data.** The out_string pointer is modified only if a valid string can be decoded.*/
int of_property_read_string(struct device_node *np, const char *propname,const char **out_string)
{struct property *prop = of_find_property(np, propname, NULL);if (!prop)return -EINVAL;if (!prop->value)return -ENODATA;if (strnlen(prop->value, prop->length) >= prop->length)return -EILSEQ;*out_string = prop->value;return 0;
}
EXPORT_SYMBOL_GPL(of_property_read_string);

函数的作用:

返回propname对应dts节点对应的值。

使用方式:

传入np,就是设备树的节点,然后返回 "clock-output-names" 字符串对应的值,存入clk_name 里面。

of_property_read_string 函数剖析

int of_property_read_string(struct device_node *np, const char *propname,const char **out_string)
{struct property *prop = of_find_property(np, propname, NULL);if (!prop)return -EINVAL;if (!prop->value)return -ENODATA;if (strnlen(prop->value, prop->length) >= prop->length)return -EILSEQ;*out_string = prop->value;return 0;
}
EXPORT_SYMBOL_GPL(of_property_read_string);
  • of_find_property 这个是找到这个dts节点,怎么找,可以再去这个函数分析一下。

  • strnlen功能「获取字符串实际字符个数,不包括结尾的'\0';如果实际个数 <= 第二个参数,则返回字符串实际字符个数,否则返回第二个参数。」

  • prop->length 是之前预设的一个值,strnlen正常情况返回的就是字符串的长度 减1「去掉\n字符」。

  • *out_string = prop->value 这里就是二级指针起到作用了,没有重新分配内存,直接把指针指向字符串位置。

我们再看看prop 的结构体,就一目了然了。

struct property {char	*name;int	length;void	*value;struct property *next;unsigned long _flags;unsigned int unique_id;struct bin_attribute attr;
};

关于二级指针举个例子

#include "stdio.h"char *str = "helloworld";
char **p = NULL;
int main(void)
{p = &str;printf("%s\n",*p);return (0);
}
推荐阅读
我把我的所有文章都汇总了,在公众号菜单也有。
专辑|Linux文章汇总
专辑|程序人生

===========

  

PS想加入技术群的同学,加了我好友后,就给我发「篮球的大肚子」这句话,有可能机器人打瞌睡,可以多发几次,不要发与技术无关的消息或者推广。

如果想获取学习资料,就在公众号后台回复「1024」,足够多的学习资料可以让你学习。

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

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

相关文章

CPU频率和核心

设置CPU的核心数在/sys/devices/system/cpu目录下可以看到你的CPU有几个核心&#xff0c;如果是四核&#xff0c;就是cpu0&#xff0c;cpu1&#xff0c;cpu2,cpu3 4个文件夹。cpu0 常开。进一个其他文件夹&#xff0c;比如cpu1&#xff0c;里面有个online文件用cat命令查看该文…

关于“进程”与“线程”的最通俗解析

来源&#xff1a;电子工程专辑进程&#xff08;process&#xff09;和线程&#xff08;thread&#xff09;是操作系统的基本概念&#xff0c;但是它们比较抽象&#xff0c;不容易掌握。最近&#xff0c;我读到一篇材料&#xff0c;发现有一个很好的类比&#xff0c;可以把它们解…

要想选到音质好的耳机,你应该需要知道这些~

最近在一个音频公司调试我们设备的音频&#xff0c;从这次调试中&#xff0c;有所收获&#xff0c;希望这次的吹牛大家看完后&#xff0c;以后去买音频产品&#xff0c;可以分辨什么是好的&#xff0c;什么是不好的。有些产品硬件没有问题&#xff0c;但是产品经理因为个人喜好…

Fantasia (Tarjan+树形DP)

Time Limit: 1000 ms Memory Limit: 256 MB Description 给定一张N个点、M条边的无向图 $G$ 。每个点有个权值Wi。 我们定义 $G_i$ 为图 $G$ 中删除第 $i$ 号顶点后的图。我们想计算 $G_1, G_2, ..., G_n$ 这N张图的权值。 对于任意一张图 $G$ &#xff0c;它的权值是这样定义…

买书这件事

知识这种东西&#xff0c;你只有不断的补充才不会觉得匮乏&#xff0c;我每年都会买点书&#xff0c;我喜欢买书&#xff0c;但是却不看书&#xff0c;很多书籍我都是当成工具书来用。我记得在2015年的时候&#xff0c;我需要自己写专利&#xff0c;但是我对写专利这个事情一窍…

Linus Torvalds的最新电脑配置

大家好&#xff0c;祝大家6.1节日快乐最近Linus Torvalds 公布了他的电脑配置&#xff0c;有了这个配置清单之后&#xff0c;每个人都可以拥有一台和Linux之父一样的电脑&#xff0c;当你拥有了一台之后&#xff0c;你可以发个朋友圈&#xff0c;「我今天用Linus 的电脑解了一个…

马上就校招了,是要去实习还是复习?

昨天晚上&#xff0c;遇到一个特别纠结的同学&#xff0c;他现在收到一份实习的通知&#xff0c;他犹豫是要去实习呢还是继续在学校复习学习技术。实习的话可以增加自己校招的筹码&#xff0c;比如在和面试官侃大山的时候&#xff0c;可以把实习这件事情拿出来说&#xff0c;这…

嵌入式杂谈之makefile补充

我看了下自己的文章库存&#xff0c;好像还没有一篇关于Makefile的文章&#xff0c;所以这篇刚好可以弥补自己的缺失。makefile预定义变量预定义变量即系统自带的变量预定义变量作用AR库文件维护程序的名称&#xff0c;默认为arAS汇编程序的名称&#xff0c;默认为asCCc编译器的…

安卓9.0马达框架分析

前言最近需要将之前的一些驱动接口转为安卓标准接口&#xff0c;方便上层应用或者第三方应用去适配。这篇文章先从简单的马达框架入手进行讲解。正文整个马达框架比较简单&#xff0c;安卓官方已经帮我们实现了framework到HAL层&#xff0c;我们需要实现的就只有驱动层。这篇文…

PYQT4 Python GUI 编写与 打包.exe程序

工作中需要开发一个小工具&#xff0c;简单的UI界面可以很好的提高工具的实用性&#xff0c;由此开启了我的第一次GUI开发之旅&#xff0c;下面将自己学习的心得记录一下&#xff0c;也做为学习笔记吧&#xff01;&#xff01;&#xff01; 参考&#xff1a;http://www.qaulau.…

你知道嵌入式,那你看过这个吗?

大家好&#xff0c;因为最近各种原因&#xff0c;我身边的很多同事都转行摆地摊了&#xff0c;可能因为那是一份自由的职业&#xff0c;摆地摊可以从事的范围很广&#xff0c;也不用起早贪黑了&#xff0c;而且收入并不低。也是因为这样&#xff0c;很多嵌入式方面的岗位越来越…

mvc一对多模型表单的快速构建

功能需求描述 Q:在实际的开发中&#xff0c;经常会遇到一个模型中包含有多个条目的表单。如何将数据提交到后台&#xff1f; A: 以数组的形式提交到后台就Ok了(真的那么简单么&#xff0c;如果再嵌套一层呢&#xff1f;) A2&#xff1a;拆分多个模型&#xff0c;映射就没啥问题…

c语言中 if(x) 、if(0) 、if(1)

解释if 语句里面包含真和非真&#xff0c;但是如果我们没有写清楚真和非真的话&#xff0c;会如何呢&#xff1f;if(x)相当于if(x ! 0)如果是指针的话&#xff0c;相当于if(x ! NULL)而if(1)相当于if(1 ! 0)还有if(0)相当于if(0 ! 0)举个例子#include<stdio.h> int main(…

看Linus骂人,真解气

感受下Linus骂人的感觉吧&#xff0c; 这样你会觉得工作中遇到的那些不愉快就算个鸟事背景一个Linux主线的内核维护者提交了一份patch&#xff0c;并说明问题产生的原因是因为应用传的音频有问题。Linus回复如下你他娘的给老子闭嘴&#xff01;这是一个内核bug好不好&#xff0…

不就是要个30K的薪资,他还问我Nginx调优

我是一个运维“老鸟”&#xff0c;目前在到处找工作阶段。周三刚面试完一家公司&#xff0c;还是非常中意的公司。结果是我中意公司&#xff0c;公司不中意我&#xff0c;妥妥的黄了。面试完我才知道&#xff0c;Linux云计算工程师必须能精通20多个企业级服务器优化。我之前不是…

android导出apk文件_Android测试工具入门介绍(三)

介绍一款牛逼的测试框架Drozer&#xff0c;一款可以检测Android一些公共漏洞的工具&#xff08;可能远不止这些、还可以继续挖掘&#xff09;&#xff0c;还可以生成shellcode&#xff0c;进行安卓设备的远程exploit。附下载地址&#xff1a;https://github.com/mwrlabs/drozer…

bomb炸弹

今天看到的一个Linux shell命令&#xff0c;但是我先说下&#xff0c;这个命令是危险的&#xff0c;所以没事的时候不要随便执行&#xff0c;出现了各种危险不要怪我没有提前告诉你哈。DANGER!命令代码:(){ :|: & };:命令解析1:() 意思是定义了一个函数&#xff0c;这个函数…

kindle的xray怎么用_Xray简单使用教程

Xray简单使用教程0X00下载xray 为单文件二进制文件&#xff0c;无依赖&#xff0c;也无需安装&#xff0c;下载后直接使用。下载地址为&#xff1a;注意&#xff1a; 不要直接 clone 仓库&#xff0c;xray 并不开源&#xff0c;仓库内不含源代码&#xff0c;直接下载构建的二进…

文件方式实现完整的英文词频统计实例(9.27)

1.读入待分析的字符串 2.分解提取单词 3.计数字典 4.排除语法型词汇 5.排序 6.输出TOP(20) 文本代码如下&#xff1a; girlRemembering me, Discover and see All over the world, Shes known as a girl To those who a free, The mind shall be key Forgotten as the past Ca…

UNUSED参数,这个宏,很秀

前言你们有没有在写代码的时候&#xff0c;遇到有的参数&#xff0c;从函数体里面传进来&#xff0c;但是又用不上&#xff0c;所以就不引用&#xff0c;但是不引用&#xff0c;在编译的时候&#xff0c;就会提示错误。是不是很尴尬&#xff0c;我们不使用&#xff0c;并不是错…