fdt_subnode_offset(9)
π
fdt_subnode_offset β bestie's guide to the fdt_subnode_offset(9) page π
okay so this is a page from the Kernel API Manual bestie, and it's literally about finding one specific subnode inside a device tree blob. no cap, that's the whole plot. let's get into it π¦
β¨ NAME β¨
fdt_subnode_offset β find a subnode of a given node π
like, you have a node, you want its child. that's it. that's the function. main character energy fr fr.
πΈ SYNOPSIS πΈ
int fdt_subnode_offset (const void *fdt , int parentoffset , const char *name );
she's giving very straightforward signature, ngl. three things in, one int out π
π«Ά ARGUMENTS π«Ά
fdtβ pointer to the device tree blob π³ like, the whole tree, the vibe, the entire situation.parentoffsetβ structure block offset of a node π this is where you're starting from, your home base.nameβ name of the subnode to locate π·οΈ the one you're looking for. the specific child. the one your heart wants.
π DESCRIPTION π
so fdt_subnode_offset finds a subnode of the node at structure block offset parentoffset with the given name. literally that. she looks at the node you pointed at, and she goes and finds the child with that name β¨
and here's the cute part β name may include a unit address, in which case fdt_subnode_offset will find the subnode with that unit address π― OR the unit address may be omitted, in which case fdt_subnode_offset will find an arbitrary subnode whose name excluding unit address matches the given name π²
lowkey important: if you skip the unit address, you get an arbitrary matching subnode. not "the first one", not "the best one". arbitrary. so don't go assuming an order, bestie π
β RETURN β
here's the vibe check on what comes back:
- structure block offset of the requested subnode (
>=0), on success π slay, you found it. -FDT_ERR_NOTFOUND, if the requested subnode does not exist π it's not there. she looked. nothing.-FDT_ERR_BADOFFSET, ifparentoffsetdid not point to anFDT_BEGIN_NODEtag π you pointed at the wrong spot, that's on you.-FDT_ERR_BADMAGIC,-FDT_ERR_BADVERSION,-FDT_ERR_BADSTATE,-FDT_ERR_BADSTRUCTURE,-FDT_ERR_TRUNCATED, standard meanings π these are the classics, they mean what they always mean.
π¦ SEE ALSO π¦
Kernel file ./scripts/dtc/libfdt/libfdt.h β and honestly the whole friend group is here, so let's do the roll call π«Ά
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_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_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)
and that's the page, bestie π courtesy of ./scripts/dtc/libfdt, dated October 2026 β go forth and find your subnodes, you've got this π§β¨
π¦ 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