fdt_getprop(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– fdt_getprop(9) β€” the kernel API manual, but make it make sense πŸ’–

okay bestie, welcome to fdt_getprop(9), straight out of the Kernel API Manual. this one's actually so useful β€” it's your little grabby-hands for device tree properties, and i'm gonna walk you through it like we're texting at 2am 🫢


✨ NAME ✨

fdt_getprop β€” retrieve the value of a given property. that's it, that's the whole job. it fetches. it props. slay. πŸ’…


🌸 SYNOPSIS 🌸

const void * fdt_getprop (const void *fdt , int nodeoffset , const char
*name , int *lenp );

yes the line break in the middle of const char *name is canon, don't come for me, that's how it's printed in the manual 😭


πŸŽ€ ARGUMENTS πŸŽ€

  • fdt β€” pointer to the device tree blob. the whole tree, the big vibe, the source of truth. 🌳
  • nodeoffset β€” offset of the node whose property to find. you're saying "go to this spot in the blob, that's where the good stuff lives." πŸ“
  • name β€” name of the property to find. the label on the drawer you're opening. 🏷️
  • lenp β€” pointer to an integer variable (will be overwritten, heads up bestie, it does not care about your feelings) or NULL. πŸ“

πŸ¦‹ DESCRIPTION πŸ¦‹

so fdt_getprop retrieves a pointer to the value of the property named name of the node at offset nodeoffset. and here's the important bit, the part you cannot miss: this is a pointer to within the device blob itself, not a copy of the value. like, you're getting a window into the blob, not a souvenir. no cap. πŸ”₯

and if lenp is non-NULL, the length of the property value is also returned, in the integer pointed to by lenp. so you get the goods and the receipt. iconic. 🧾

fr fr though β€” because it's a pointer into the blob and not a copy, treat it like borrowed stuff. the original doesn't say anything else about lifetime here, so i'm not gonna invent lore for you πŸ’€

πŸ‘‘ RETURN πŸ‘‘

here's where it gets a little spicy, so read carefully:

  • pointer to the property's value. and if lenp is non-NULL, *lenp contains the length of the property value (>=0). happy path, everything's cute ✨
  • NULL, on error. and if lenp is non-NULL, *lenp contains an error code (<0):
    • -FDT_ERR_NOTFOUND β€” node does not have named property. the drawer is empty. πŸ™ˆ
    • -FDT_ERR_BADOFFSET β€” nodeoffset did not point to FDT_BEGIN_NODE tag. you knocked on the wrong door bestie πŸšͺ
    • -FDT_ERR_BADMAGIC, -FDT_ERR_BADVERSION, -FDT_ERR_BADSTATE, -FDT_ERR_BADSTRUCTURE, -FDT_ERR_TRUNCATED β€” standard meanings πŸ’€

🌈 SEE ALSO 🌈

Kernel file ./scripts/dtc/libfdt/libfdt.h

and the whole extended friend group, all of them, in order, no one left out because i would never:

fdt_offset_ptr(9), fdt_next_tag(9), fdt_first_subnode(9), fdt_next_subnode(9), fdt_for_each_subnode(9), fdt_header_size(9), fdt_header_size_(9), fdt_check_header(9), fdt_move(9), fdt_check_full(9), fdt_get_string(9), fdt_string(9), fdt_find_max_phandle(9), fdt_get_max_phandle(9), fdt_generate_phandle(9), fdt_num_mem_rsv(9), fdt_get_mem_rsv(9), fdt_subnode_offset_namelen(9), fdt_subnode_offset(9), fdt_path_offset_namelen(9), fdt_path_offset(9), fdt_get_name(9), fdt_first_property_offset(9), fdt_next_property_offset(9), fdt_for_each_property_offset(9), fdt_get_property_by_offset(9), fdt_get_property_namelen(9), fdt_get_property(9), fdt_getprop_by_offset(9), fdt_getprop_namelen(9), fdt_get_phandle(9), fdt_get_alias_namelen(9), fdt_get_alias(9), fdt_get_symbol_namelen(9), fdt_get_symbol(9), fdt_get_path(9), fdt_supernode_atdepth_offset(9), fdt_node_depth(9), fdt_parent_offset(9), fdt_node_offset_by_prop_value(9), fdt_node_offset_by_phandle(9), fdt_node_check_compatible(9), fdt_node_offset_by_compatible(9), fdt_stringlist_contains(9), fdt_stringlist_count(9), fdt_stringlist_search(9), fdt_stringlist_get(9), FDT_MAX_NCELLS(9), fdt_address_cells(9), fdt_size_cells(9), fdt_setprop_inplace_namelen_partial(9), fdt_setprop_inplace(9), fdt_setprop_inplace_u32(9), fdt_setprop_inplace_u64(9), fdt_setprop_inplace_cell(9), fdt_nop_property(9), fdt_nop_node(9), fdt_create_with_flags(9), fdt_create(9), fdt_resize(9), fdt_add_reservemap_entry(9), fdt_finish_reservemap(9), fdt_begin_node(9), fdt_property(9), fdt_property_placeholder(9), fdt_end_node(9), fdt_finish(9), fdt_create_empty_tree(9), fdt_open_into(9), fdt_pack(9), fdt_add_mem_rsv(9), fdt_del_mem_rsv(9), fdt_set_name(9), fdt_setprop_namelen(9), fdt_setprop(9), fdt_setprop_placeholder_namelen(9), fdt_setprop_placeholder(9), fdt_setprop_u32(9), fdt_setprop_u64(9), fdt_setprop_cell(9), fdt_setprop_string(9), fdt_setprop_namelen_string(9), fdt_setprop_empty(9), fdt_appendprop(9), fdt_appendprop_u32(9), fdt_appendprop_u64(9), fdt_appendprop_cell(9), fdt_appendprop_string(9), fdt_appendprop_addrrange(9), fdt_delprop(9), fdt_add_subnode_namelen(9), fdt_add_subnode(9), fdt_del_node(9), fdt_overlay_apply(9), fdt_overlay_target_offset(9), fdt_strerror(9)


that's the whole page, bestie. go forth and fdt_getprop responsibly πŸ’œ

this one came from ./scripts/dtc/libfdt, dated October 2026. mwah, sign-off complete πŸŽ€βœ¨
πŸ“¦ where this page comes from