了解linux中的“of_property_read_u32()”

ops/2025/1/17 3:46:38/

of_property_read_u32(node, "post-pwm-on-delay-ms",&data->post_pwm_on_delay);

/*根据"post-pwm-on-delay-ms",从属性中查找并读取一个32位整数*/

/*读到一个32位整数,保存到data->post_pwm_on_delay*/

of_property_read_u32(node, "pwm-off-delay-ms", &data->pwm_off_delay);

/*根据"pwm-off-delay-ms",从属性中查找并读取一个32位整数*/

/*读到一个32位整数,保存到data->pwm_off_delay中*/

文件路径;

/home/zgq/linux/atk-mp1/linux/my_linux/linux-5.4.31/include/linux/of.h

static inline int of_property_read_u32(const struct device_node *np,

       const char *propname,

       u32 *out_value)

{

return of_property_read_u32_array(np, propname, out_value, 1);

}

static inline int of_property_read_u32_array(const struct device_node *np,

     const char *propname,

     u32 *out_values, size_t sz)

{

int ret = of_property_read_variable_u32_array(np, propname, out_values,

      sz, 0);

if (ret >= 0) return 0;

else return ret;//读取ret个32位整数

}

文件路径:

/home/zgq/linux/atk-mp1/linux/my_linux/linux-5.4.31/drivers/of/property.c

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)

{

size_t sz, count;

const __be32 *val = of_find_property_value_of_size(np, propname,

(sz_min * sizeof(*out_values)),

(sz_max * sizeof(*out_values)),

&sz);

if (IS_ERR(val)) return PTR_ERR(val);

if (!sz_max) sz = sz_min;

else sz /= sizeof(*out_values);

count = sz;//读取sz个32位整数

while (count--)

*out_values++ = be32_to_cpup(val++);

//相当于“*out_values=*val;out_values++;val++;

return sz;

}

static void *of_find_property_value_of_size(const struct device_node *np,

const char *propname, u32 min, u32 max, size_t *len)

{

struct property *prop = of_find_property(np, propname, NULL);

if (!prop) return ERR_PTR(-EINVAL);

if (!prop->value)return ERR_PTR(-ENODATA);

if (prop->length < min)return ERR_PTR(-EOVERFLOW);

if (max && prop->length > max)return ERR_PTR(-EOVERFLOW);

if (len) *len = prop->length;//读取一个32位整数

return prop->value;

}

文件路径:

/home/zgq/linux/atk-mp1/linux/my_linux/linux-5.4.31/drivers/of/base.c

struct property *of_find_property(const struct device_node *np,const char *name,int *lenp)

{

struct property *pp;

unsigned long flags;

raw_spin_lock_irqsave(&devtree_lock, flags);

pp = __of_find_property(np, name, lenp);

raw_spin_unlock_irqrestore(&devtree_lock, flags);

return pp;

}

static struct property *__of_find_property(const struct device_node *np,const char *name, int *lenp)

{

struct property *pp;

if (!np)

return NULL;

for (pp = np->properties; pp; pp = pp->next)

{

if (of_prop_cmp(pp->name, name) == 0)

{

if (lenp) *lenp = pp->length;

break;

}

}

return pp;

}

#define of_prop_cmp(s1, s2) strcmp((s1), (s2))

文件路径:

/home/zgq/linux/atk-mp1/linux/my_linux/linux-5.4.31/include/linux/byteorder/generic.h

#define be32_to_cpup  __be32_to_cpup

文件路径:

/home/zgq/linux/atk-mp1/linux/my_linux/linux-5.4.31/include/uapi/linux/byteorder/big_endian.h

static __always_inline __u32 __be32_to_cpup(const __be32 *p)

{

return (__force __u32)*p;

}

typedef uint32_t  __u32;


http://www.ppmy.cn/ops/150706.html

相关文章

测试人员面试需要掌握的内容

测试人员面试需要掌握的内容 1、在公司的测试流程是什么&#xff1f; 产品经理确认本次版本的需求&#xff0c;召开需求评审会&#xff0c;进行估时排期&#xff0c;需求和时间都确定之后&#xff0c;UI出设计图&#xff0c;开发人员进行开发&#xff0c;测试人员编写测试用例…

Node.js——http 模块(一)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

基于SSM实现的垃圾分类平台系统功能实现九

一、前言介绍&#xff1a; 1.1 项目摘要 随着城市化进程的加速和居民生活水平的提高&#xff0c;城市生活垃圾的产量急剧增加&#xff0c;给城市环境管理带来了巨大压力。传统的垃圾处理方式&#xff0c;如填埋和焚烧&#xff0c;不仅占用大量土地资源&#xff0c;还可能对环…

蓝桥杯刷题第一天——判断闰年

题目描述 输入一个年份&#xff0c;判断这一年是否是闰年&#xff0c;如果是输出 yes&#xff0c;否则输出 no。 1582 年以来&#xff0c;闰年的定义&#xff1a; 普通闰年&#xff1a;公历年份是 4 的倍数&#xff0c;且不是 100 的倍数的&#xff0c;为闰年&#xff08;如…

VUE3 组合式 API 中,ref 和 reactive 是两种核心的响应式数据处理方式

在 Vue 3 的组合式 API 中&#xff0c;ref 和 reactive 是两种核心的响应式数据处理方式&#xff0c;用于创建响应式对象。它们都使得数据变得响应式&#xff0c;当数据发生变化时&#xff0c;视图会自动更新。 1. ref ref 用于创建一个响应式的基本数据类型&#xff08;如字…

MacOS删除多余的Windows启动项

我的Macbook之前通过BootCamp安装了windows后又删除了&#xff0c;但是开机按住option键还是会出现Windows 启动盘选项&#xff0c;虽然没什么影响但还是觉得有问题&#xff0c;搜索一番找到删除方法&#xff0c;记录一下。主要问题是windows在Mac的EFI分区添加了相关内容&…

本地视频进度加入笔记+根据进度快速锁定视频位置

本地视频进度记录快速回溯 引言 在学习的过程中, 如果我们想快速记录当前看视频的位置, 后续回溯查找就会非常方便了。 实现效果 进度记录 通过按下快捷键ctrlaltu&#xff0c; 快速记录当前视频的进度信息,然后复制到typora软件内 快速回溯 在typora软件内, 选中视频索引…

Mysql--实战篇--数据库设计(范式和反范式,数据表设计原则)

一、范式和反范式 在数据库设计中&#xff0c;范式&#xff08;Normalization&#xff09;和反范式&#xff08;Denormalization&#xff09;是两种不同的设计理念&#xff0c;它们分别用于优化数据库的结构以满足不同的需求。范式主要用于减少数据冗余和提高数据完整性&#…