[X]关闭

linux下devicetree中常用的of函数

文档创建者:ぉ沙皮狗的忧伤
浏览次数:9357
最后更新:2020-02-27
参考网址https://blog.csdn.net/EmSoftEn/article/details/45565401?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

从device_node中获取信息:
1、int of_property_read_u8_array(const struct device_node *np, const char *propname,u8 *out_values, size_t sz);
从设备结点np中读取属性名为propname,类型为8、16、32、位整型数组的属性值,并放入out_values,sz指明了要读取的个数

* of_property_read_u8_array -从属性中查找和读取u8数组。

*

* @np:要读取属性值的设备节点。

* @propname:要搜索的属性名。

* @out_values:指向返回值的指针,仅当返回值为0时才修改。

* @sz:要读取的数组元素数量

*

*在设备节点中搜索属性并从中读取8位值

* 成功返回0,如果属性不存在-EINVAL,





2、int of_property_read_string(struct device_node *np, const char *propname,const char**out_string)
从设备结点np中读取属性名为propname的字符串型属性值

* of_property_read_string—从属性查找并读取字符串

* @np:要读取属性值的设备节点。

* @propname:要搜索的属性名。

* @out_string:指向空终止返回字符串的指针,只有在

*返回值为0。

*

*在设备树节点中搜索属性并检索空值

*终止的字符串值(指向数据的指针,而不是副本)。返回0

*成功,-EINVAL如果属性不存在,-ENODATA如果属性

*没有值,如果字符串不是空终止的,则为-EILSEQ

*在属性数据的长度内。

*

* out_string指针只有在一个有效的字符串可以被解码时才会被修改



3、int of_property_read_string_index(struct device_node *np, const char *propname,intindex, const char **output)
从设备结点np中读取属性名为propname的字符串型属性值数组中的第index个字符串

* of_property_read_string_index()——从多个字符串中查找和读取一个字符串

*字符串属性。

* @np:要读取属性值的设备节点。

* @propname:要搜索的属性名。

* @index:字符串列表中字符串的索引

* @out_string:指向空终止返回字符串的指针,只有在

*返回值为0。

*

*在设备树节点中搜索属性并检索空值

*字符串列表中终止的字符串值(指向数据的指针,而不是副本)

*包含在该属性中。

*如果成功,返回0;如果不存在,返回-EINVAL;如果不存在,返回-ENODATA

属性没有值,如果字符串没有-EILSEQ

*在属性数据长度内以null结尾。

*

* out_string指针只有在一个有效的字符串可以被解码时才会被修改。



4、int of_property_count_strings(struct device_node *np, const char *propname)
从设备结点np中读取属性名为propname的字符串型属性值的个数

* of_property_count_strings()——查找并返回来自a的字符串数量

*多个字符串属性。

* @np:要读取属性值的设备节点。

* @propname:要搜索的属性名。

*

*在设备树节点中搜索属性并检索空值

*终止字符串包含在它。返回字符串的数目

*成功,-EINVAL如果属性不存在,-ENODATA如果属性

*没有值,如果字符串不是空终止的,则为-EILSEQ

*在属性数据的长度内。



5、unsigned int irq_of_parse_and_map(struct device_node *dev, int index)
从设备节点dev中读取第index个irq号

* irq_of_parse_and_map -解析并映射一个中断到linux virq空间

* @dev:要映射其中断的设备的设备节点

* @index:要映射的中断的索引

*

*这个函数是一个包装器,它链接了of_irq_parse_one()和

* irq_create_of_mapping()来简化调用




6、int of_irq_to_resource(struct device_node *dev, int index, struct resource *r)
从设备节点dev中读取第index个irq号,并填充一个irq资源结构体

* of_irq_to_resource -解码一个节点的IRQ并将其作为资源返回

* @dev:指向设备树节点的指针

* @index: irq的从零开始的索引

* @r:指向要返回结果的资源结构的指针。



7、int of_irq_count(struct device_node *dev)
获取设备节点dev的irq个数

* of_irq_count—计算一个节点使用的irq数量

* @dev:指向设备树节点的指针



8、static inline bool of_property_read_bool(const struct device_node *np,const char *propname);
如果设备结点np含有propname属性,则返回true,否则返回false。一般用于检查空属性是否存在。

* of_property_read_bool - Findfrom属性

* @np:要读取属性值的设备节点。

* @propname:要搜索的属性名。

*

*在设备节点中搜索属性。

*如果属性存在false,则返回true。



9、struct property* of_find_property(const struct device_node *np,const char *name,int *lenp)
根据name参数,在指定的设备结点np中查找匹配的property,并返回这个property

10、const void * of_get_property(const struct device_node *np, const char *name,int *lenp)
根据name参数,在指定的设备结点np中查找匹配的property,并返回这个property的属性值

*为给定节点查找具有给定名称的属性

*并返回值。



11、struct device_node* of_get_parent(const struct device_node *node)
获得node节点的父节点的device node

* of_get_parent -获取节点的父节点

* @node:节点获取父节点

*

*返回一个refcount递增的节点指针use

* of_node_put()。



12、int of_device_is_compatible(const struct device_node *device,const char *compat);
判断设备结点device的compatible属性是否包含compat指定的字符串

*检查给定的“compat”字符串是否与其中一个字符串匹配

设备的“兼容”属性



从of_allnodes中查找信息:

13、struct device_node* of_find_node_by_path(const char *path)
根据路径参数,在全局链表of_allnodes中,查找匹配的device_node

14、struct device_node* of_find_node_by_name(struct device_node *from,const char *name)
则根据name在全局链表of_allnodes中查找匹配的device_node,若from=NULL表示从头开始查找

* of_find_node_by_name—根据节点的“name”属性查找节点

* @from:从或NULL开始搜索的节点;的节点

*你通过的不会被搜索,只有下一个

*。通常,传递前面的调用

*返回。of_node_put()将在@from上调用。

* @name:要匹配的名称字符串

*

*返回一个refcount递增的节点指针use

* of_node_put()。



15、struct device_node* of_find_node_by_type(struct device_node *from,const char *type)
根据设备类型在全局链表of_allnodes中查找匹配的device_node

* of_find_node_by_type -根据“device_type”属性查找节点

* @from:开始搜索的节点,或开始搜索的空值

*整个设备树。您传递的节点将不是

*搜索,只有下一个才会;通常,您通过

前面的调用返回了什么。of_node_put ()

我打电话来找你。

* @type:要匹配的类型字符串

*

*返回一个refcount递增的节点指针use

* of_node_put()。



16、struct device_node * of_find_compatible_node(struct device_node *from, const char*type, const char,*compatible);
根据compatible的属性值在全局链表of_allnodes中查找匹配的device_node,大多数情况下,from、type为NULL。

* of_find_compatible_node -查找基于类型和其中一个的节点

*“兼容”属性中的标记

* @from:开始搜索的节点,或者空节点

*你通过的不会被搜索,只有下一个

*将;通常,传递前面的调用

*返回。of_node_put()将被调用

* @type:匹配“device_type”或忽略NULL的类型字符串

* @compatible:与设备中的一个令牌匹配的字符串

*“兼容”列表。

*

*返回一个refcount递增的节点指针use

* of_node_put()。



17、struct device_node* of_find_node_with_property(struct device_node *from,const char *prop_name)
根据节点属性的name在全局链表of_allnodes中查找匹配的device_node

* of_find_node_with_property -查找具有属性的节点

*名字。

* @from:开始搜索的节点,或者空节点

*你通过的不会被搜索,只有下一个

*将;通常,传递前面的调用

*返回。of_node_put()将被调用

* @prop_name:要查找的属性名。

*

*返回一个refcount递增的节点指针use

* of_node_put()。



18、struct device_node* of_find_node_by_phandle(phandle handle)
根据phandle在全局链表of_allnodes中查找匹配的device_node

* of_find_node_by_phandle—查找给定phandle的节点

* @handle:查找节点的phandle

*

*返回一个refcount递增的节点指针use

* of_node_put()。



杂:
19、void __iomem* of_iomap(struct device_node *node, int index);
通过设备结点直接进行设备内存区间的 ioremap(),index是内存段的索引。若设备结点的reg属性有多段,可通过index标示要ioremap的是哪一段,只有1段的情况,index为0

* of_iomap -映射给定设备节点的内存映射IO

* @device:将映射其io范围的设备

* @index: io范围的索引

*

*返回映射内存的指针



20、unsigned long __init of_get_flat_dt_root(void)
用来查找在dtb中的根节点,好像返回的都是0

21、int of_alias_get_id(struct device_node *np, const char *stem)
获取节点np对应的aliasid号


22、struct device_node* of_node_get(struct device_node *node)
void of_node_put(struct device_node *node)
device node计数增加/减少

const struct of_device_id* of_match_node(const struct of_device_id *matches,const struct device_node*node)
将matches数组中of_device_id结构的name和type与device node的compatible和type匹配,返回匹配度最高的of_device_id结构

platform_device和resource相关:
int of_address_to_resource(struct device_node *dev, int index,struct resource *r)
根据设备节点dev的reg属性值,填充资源结构体r。Index参数指明了使用reg属性中第几个属性值,一般设置为0,表示第一个。

struct platform_device* of_device_alloc(struct device_node *np,const char *bus_id,struct device *parent)
根据device node,bus_id以及父节点创建该设备的platform_device结构,同时会初始化它的resource成员

int of_platform_bus_probe(struct device_node *root,const struct of_device_id *matches,struct device *parent)
遍历of_allnodes中的节点挂接到of_platform_bus_type总线上,由于此时of_platform_bus_type总线上还没有驱动,所以此时不进行匹配

int of_platform_populate(struct device_node *root,const struct of_device_id *matches,const struct of_dev_auxdata *lookup,struct device *parent)
遍历of_allnodes中的所有节点,生成并初始化所以节点的platform_device结构

struct platform_device* of_find_device_by_node(struct device_node *np)
根据device_node查找返回该设备对应的platform_device结构




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则