如何读取设备树中的子节点属性

时间:2015-01-05 12:42:21

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

我一直在尝试读取设备树中的子节点属性。 无法理解,任何人都可以帮忙。

我有一个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的特性?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

是的,你可以做到。只需编写如下的类似函数,并使用BB子节点的路径在AA中调用它。

例如,如果您需要访问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!
        }                                                                        
    }                                                                            
}