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

Linux kernel 如何读取设备树中的子节点属性,linux-kernel,linux-device-driver,device-tree,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: {

我一直在尝试读取设备树中的子节点属性。。 我想不出来,有人能帮忙吗

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

如果我理解正确,您必须为节点()的每个子节点使用类似于
的内容。

检查例如drivers/input/keyboard/gpio\u keys.c和。

如果我理解正确,您必须为节点()的每个子节点使用类似于
的内容。

检查例如drivers/input/keyboard/gpio_keys.c和。

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

例如,如果需要访问BB/child_2属性,请从AA通过_path()函数将绝对路径传递给of_find_node_

另外,检查内核中可能有用的函数族

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!
        }                                                                        
    }                                                                            
}

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

例如,如果需要访问BB/child_2属性,请从AA通过_path()函数将绝对路径传递给of_find_node_

另外,检查内核中可能有用的函数族

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!
        }                                                                        
    }                                                                            
}

若路径已经改变,该怎么办?若路径已经改变,该怎么办?