【问题标题】:How to read child node property in a device tree如何读取设备树中的子节点属性
【发布时间】:2022-01-14 01:51:16
【问题描述】:

我一直在尝试读取设备树中的子节点属性。想不通,有大神帮忙看看吗?

我有一个 dts 文件

AA {
    child 1: {
            property 1 : XXX
            property 2 : XXX
    }
    child 2: {
            property 1 : XXX
            property 2 : XXX
    }
BB {
    child 1: {
            property 1 : XXX
            property 2 : XXX
    }
    child 2: {
            property 1 : XXX
            property 2 : XXX
    }

有没有什么方法可以读取给定 dts 的 AA 节点中子 2 的属性?

【问题讨论】:

    标签: linux-kernel linux-device-driver device-tree


    【解决方案1】:

    是的,你可以做到。写一个类似下面的函数,在AA中用BB的子节点的路径调用即可。

    例如,如果您需要访问 BB/child_2 属性,则从 AA 将绝对路径传递给 of_find_node_by_path() 函数。

    另外,检查内核中可能有用的_*系列函数。

    static void access_dt(void)                                                      
    {                                                                                
        /* device node path - check it from /proc/device-tree/ */                    
        char *path = "/path/to/BB/child_2";                                            
        struct device_node *dt_node;                                                 
        const u8 *prop = NULL;                                                       
        int ret;                                                                     
    
        dt_node = of_find_node_by_path(path);                                        
        if (!dt_node) {                                                              
            printk(KERN_ERR "Failed to find node by path: %s.\n");                   
        } else {                                                                     
            printk(KERN_INFO "Found the node for %s.\n", path);                      
            prop = of_get_property(dt_node, "property 2", &ret);                      
            if(!prop) {
                 //You are still in trouble!
            } else {
                //You have got property 2 of BB!
            }                                                                        
        }                                                                            
    }
    

    【讨论】:

    • 如果路径已更改,该怎么办?
    【解决方案2】:

    如果我理解正确,您必须使用 for_each_child_of_node(). 之类的东西 检查例如 drivers/input/keyboard/gpio_keys.cDocumentation/devicetree/bindings/input/gpio-keys.txt

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-18
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      相关资源
      最近更新 更多