Linux头文件of.h的使用详解 (include linux of.h)

在Linux系统中,of.h头文件是包含了许多与设备树相关的函数、宏和常量的头文件。设备树可以看作是一种描述硬件板级组件的数据结构。这些信息可以作系统、设备驱动程序和应用程序使用,以便了解硬件配置和操作。

在本文中,我们将对of.h头文件进行详细探讨,包括of_node相关的函数、of_property相关的函数和宏等。

一、of_node相关的函数

1. of_find_node_by_name

of_find_node_by_name函数用于在设备树中查找具有特定名称的节点。该函数返回一个of_node结构体指针,该结构体表示找到的节点。

函数声明如下:

struct device_node *of_find_node_by_name(struct device_node *from, const char *name);

其中,from参数是一个指向设备树的节点结构体指针,表示从这个节点开始查找;name参数是一个字符串,表示要查找的节点名称。

如果找到了具有该特定名称的节点,则函数返回该节点的of_node指针;否则,返回NULL。

2. of_find_compatible_node

of_find_compatible_node函数用于在设备树中查找具有特定compatible属性的节点。compatible属性指定了设备树节点的类型,以便驱动程序识别并与设备通信。

函数声明如下:

struct device_node *of_find_compatible_node(struct device_node *from, const char *type, const char *compatible);

其中,from参数是一个指向设备树的节点结构体指针,表示从这个节点开始查找;type参数是一个字符串,表示节点的设备类型;compatible参数是一个字符串,表示要查找的节点compatible属性的值。

如果找到符合条件的节点,则函数返回该节点的of_node指针;否则,返回NULL。

3. of_get_parent

of_get_parent函数用于获取一个节点的父节点。该函数返回一个of_node结构体指针,这个结构体表示该节点的父节点。

函数声明如下:

struct of_node *of_get_parent(const struct of_node *node);

其中,node参数是一个指向节点的of_node结构体指针。

如果成功获取了父节点,则函数返回该节点的of_node指针;否则,返回NULL。

二、of_property相关的函数和宏

1. of_property_read_u32

of_property_read_u32函数用于读取一个设备树节点的属性,并将其解析为32位无符号整数。该函数的参数包括节点的of_node指针、属性的名称和一个指向接收值的变量的指针。

函数声明如下:

int of_property_read_u32(const struct device_node *np, const char *propname, u32 *out_value);

其中,np参数是一个指向节点的of_node结构体指针;propname参数是一个字符串,表示要读取的属性名称;out_value参数是一个指向接收解析值的指针。

如果成功读取属性并解析值,则函数返回0;否则,返回一个负值错误代码。

2. of_property_read_string

of_property_read_string函数用于读取一个设备树节点的属性,并将其解析为字符串。该函数的参数包括节点的of_node指针、属性的名称和一个指向接收字符串指针的变量的指针。

函数声明如下:

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

其中,np参数是一个指向节点的of_node结构体指针;propname参数是一个字符串,表示要读取的属性名称;out_string参数是一个指向接收字符串指针的指针。

如果成功读取属性并解析字符串,则函数返回0;否则,返回一个负值错误代码。

3. of_property_read_bool

of_property_read_bool函数用于读取一个设备树节点的布尔属性。如果属性存在且为true,则该函数返回1;否则,返回0或一个负值错误代码。

函数声明如下:

int of_property_read_bool(const struct device_node *np, const char *propname);

其中,np参数是一个指向节点的of_node结构体指针;propname参数是一个字符串,表示要读取的布尔属性名称。

如果成功读取布尔属性并解析为true,则函数返回1;如果属性存在但为false,则函数返回0;否则,返回一个负值错误代码。

4. of_property_match_string

of_property_match_string函数用于比较一个字符串属性的值与一组可能值中的任何一个值是否匹配。如果匹配,则函数返回与匹配字符串相对应的索引值;否则,返回一个负值。

函数声明如下:

int of_property_match_string(const struct device_node *np, const char *propname, const char * const*string_list);

其中,np参数是一个指向节点的of_node结构体指针;propname参数是一个字符串,表示要比较的属性名称;string_list参数是一个指向指向字符串数组的指针,这个数组包含了一组可能的字符串值。

如果找到一个字符串属性的值与这组字符串中的任何一个值相匹配,则函数返回与匹配字符串相对应的索引值;否则,返回一个负值。

5. of_node_put

of_node_put函数用于释放一个of_node结构体占用的资源。对于每个通过of_find_*函数获取的节点,当不再需要该节点时,应使用该函数释放它。

函数声明如下:

void of_node_put(struct device_node *node);

其中,node参数是要释放的节点的of_node指针。

本文仅介绍了of.h头文件中一些常用的函数和宏,仍有许多其他函数和宏可供使用。熟练掌握这些函数和宏,可以让开发人员更好地利用设备树来管理和控制硬件。


数据运维技术 » Linux头文件of.h的使用详解 (include linux of.h)