当前位置: 首页 > news >正文

了解linux中的“of_property_read_u32()”

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.lryc.cn/news/521373.html

相关文章:

  • iOS - Objective-C 底层中的内存屏障
  • 阿里云服务器扩容系统盘后宝塔面板不显示扩容后的大小
  • c语言——【linux】多进程编程 【进程的创建,相关shell指令,进程状态切换,回收资源,守护进程等】
  • macos 搭建 ragflow 开发环境
  • 信创改造-龙蜥操作系统搭载MySql、Tomcat等服务
  • Java 数据结构 队列之双端队列 常用方法 示例代码 及其实现
  • 【原创】大数据治理入门(2)《提升数据质量:质量评估与改进策略》入门必看 高赞实用
  • arcgis中生成格网矢量带高度
  • 使用gtsam添加OrientedPlane3Factor平面约束因子
  • 换了城市ip属地会变吗?为什么换了城市IP属地不变
  • 移远通信多模卫星通信模组BG95-S5获得Skylo网络认证,进一步拓展全球卫星物联网市场
  • IntelliJ IDEA Type Hierarchy Scope Pattern 学习指南
  • 简聊MySQL并发事务中幻读、虚读问题的解决方案
  • 【搭建JavaEE】(2)Tomcat安装配置和第一个JavaEE程序
  • 【Qt】01-了解QT
  • websocket股票行情接口
  • 朴素贝叶斯分类器
  • 智能化植物病害检测:使用深度学习与图像识别技术的应用
  • vim基本命令(vi、工作模式、普通模式、插入模式、可视模式、命令行模式、复制、粘贴、插入、删除、查找、替换)
  • Qt 自动根据编译的dll或exe 将相关dll文件复制到目标文件夹
  • 探索新能源汽车“芯”动力:AUTO TECH China 2025广州国际新能源汽车功率半导体技术展盛况空前
  • Kafka权威指南(第2版)读书笔记
  • WORD转PDF脚本文件
  • electron 打包后的 exe 文件,运行后是空白窗口
  • 数据库重连 - 方案
  • 从 PostgreSQL 中挽救损坏的表
  • 【Vue3 入门到实战】1. 创建Vue3工程
  • rtthread学习笔记系列(10/11) -- 系统定时器
  • mock服务-通过json定义接口自动实现mock服务
  • 像JSONDecodeError: Extra data: line 2 column 1 (char 134)这样的问题怎么解决