fdt_for_each...perty_offset(9)
π fdt_for_each_property_offset β a Kernel API Manual moment
okay so bestie, we're in the Kernel API Manual and today's main character is fdt_for_each_property_offset(9). yes that's really the name, yes it's a mouthful, no we're not changing it. π
β¨ NAME β¨
fdt_for_each_property_offset β literally just iterate over all the properties of a node. that's it. that's the whole vibe. π¦
πΈ SYNOPSIS πΈ
fdt_for_each_property_offset (property , fdt , node );
π ARGUMENTS π
propertyβ the property offset. it's anint, and it's an lvalue (meaning it gets written to, so pls give it a real home bestie, not a vibe). π«Άfdtβ the FDT blob, typedconst void *. this is the tree itself, the whole thing.nodeβ the node offset, anint. which node we're snooping around in. π
π₯ DESCRIPTION π₯
okay so here's the tea: this is not a real function, it's actually a wrapper around a for loop. and you'd use it like this:
fdt_for_each_property_offset(property, fdt, node) { Use property ... }
and then, because things can go sideways (they always can π), you check for errors like:
if ((property < 0) && (property != -FDT_ERR_NOTFOUND)) { Error handling }
ngl the important detail here is that this is implemented as a macro, and property is used as the iterator in the loop. that's the whole reason it has to be an lvalue. no cap. π
also slay: the node variable can be constant, or even a literal. so you can absolutely just hardcode it and the compiler will not be weird about it. iconic behaviour honestly. β
π SEE ALSO π
this list is long long, so buckle up bestie β we're going through the whole friend group. also shoutout to the kernel file ./scripts/dtc/libfdt/libfdt.h where all this lives π§
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_get_property_by_offset(9)fdt_get_property_namelen(9)fdt_get_property(9)fdt_getprop_by_offset(9)fdt_getprop_namelen(9)fdt_getprop(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)
ok that's the whole page bestie, go forth and iterate responsibly π β¨
and finally, the lil sign-off: this iconic piece of documentation comes from ./scripts/dtc/libfdt and it's dated October 2026. periodt. ππ¦π
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms