设备树中OF函数使用详解,可调用设备树中任意节点

本文详细介绍了在Linux设备树中如何使用OF函数进行节点查找和属性查询。通过`of_find_node_by_path`获取根节点下的子节点,利用`of_get_next_child`遍历子节点及其子节点,`of_get_parent`获取父节点,以及`of_find_property`查找指定属性。示例代码展示了如何操作设备树以获取所需信息。
摘要由CSDN通过智能技术生成

我们在使用linux设备树的时候,难免对一些接口函数感觉到困惑,甚至,好多接口函数不知道如何使用,只知道大概函数有哪些接口,但真正使用的时候漏洞百出,很容易出错。接下来我就以我开发imx6ull这块开发板的经验来说一说我对OF函数的理解,会对你的困惑有一定的帮助。

1.inline struct device_node *of_find_node_by_path(const char *path);

这个函数,我们经常通过设备树中根节点下的子节点名字路径来获取它的节点

一般这个函数只能查找根节点下的字节点,再往深一级的子节点查询不好使,比如下图,这是我自己创建的一个示例型设备树,这个设备树中,gpio_key1处于根节点(/gpio_key1)下,但是他的下边有很多分开的子节点,我们怎么查找呢,如下图,我们可以看到一个gpio_key1里边,有四个key子节点,我们如何分开得到这四个节点的节点信息呢?接着往下看:

2.struct device_node *of_get_next_child(const struct device_node *node struct

device_node *prev);

如果想查询下列四个按键的·节点中任意一个节点,我们就要使用of_get_next_child这个函数,他是用来查询节点的字节点,也可以查找子节点下的第N个子节点,这里比较绕,我们直接上代码这样比较好理解一些:

struct device_node *test_device_node;
struct device_node *test_device_node_child;

test_device_node = of_find_node_by_path("/gpio_key1");
test_device_node_child=of_get_next_child(test_device_node,NULL);
for(int i=0;i<4;i++)
{
   test_device_node_child=of_get_next_child(test_device_node,test_device_node_child);
 }
 test_device_node=test_device_node_child;
printk("test_device_node name is %s\n", test_device_node->name);

我们来看,首先我声明了两个设备节点结构体指针变量,首先我通过of_find_node_by_path,这个函数来找到根节点下的gpio_key这个子节点,但是我们没有办法继续往下得到key@1---key@4子节点中的一些信息,我们上网搜索基本也没有教我们怎么查找子节点中的一些节点,特别是一些技术类文档并没有很详细的说明这个子节点中的子节点的信息如何调用。

我们继续耐心往下看,我这里使用了of_get_next_child这个函数,第一个函数传参把gpio_key1的设备节点传入,第二个函数传参一个NULL,这里我们没有什么好奇的,就是得到了gpio_key1的设备节点下的

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值