u-boot fdt_getprop函数


    const void *fdt_getprop(const void *fdt, int nodeoffset,             const char *name, int *lenp) {     return fdt_getprop_namelen(fdt, nodeoffset, name, strlen(name), lenp); }     const void *fdt_getprop_namelen(const void *fdt, int nodeoffset,                 const char *name, int namelen, int *lenp) {     int poffset;     const struct fdt_property *prop;
    prop = fdt_get_property_namelen_(fdt, nodeoffset, name, namelen, lenp,                      &poffset);     if (!prop)         return NULL;
    /* Handle realignment */     if (fdt_chk_version() && fdt_version(fdt) < 0x10 &&         (poffset + sizeof(*prop)) % 8 && fdt32_to_cpu(prop->len) >= 8)         return prop->data + 4;     return prop->data; }     static const struct fdt_property *fdt_get_property_namelen_(const void *fdt,                                     int offset,                                     const char *name,                                     int namelen,                                 int *lenp,                                 int *poffset) {     for (offset = fdt_first_property_offset(fdt, offset);          (offset >= 0);          (offset = fdt_next_property_offset(fdt, offset))) {         const struct fdt_property *prop;
        prop = fdt_get_property_by_offset_(fdt, offset, lenp);         if (fdt_chk_extra() && !prop) {             offset = -FDT_ERR_INTERNAL;             break;         }         if (fdt_string_eq_(fdt, fdt32_to_cpu(prop->nameoff),                    name, namelen)) {             if (poffset)                 *poffset = offset;             return prop;         }     }
    if (lenp)         *lenp = offset;     return NULL; }  

相关