fdt_end_node(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

Hiiii bestie! 🌸 Welcome to the <pink>Kernel API Manual</pink> entry for fdt_end_node β€” the <purple>fdt_end_node(9)</purple> page, to be exact. And ngl? This one's short but it's crucial if you're out here building device tree blobs sequentially. Let's get into it. πŸ’…

✨ NAME ✨

fdt_end_node β€” complete the current node πŸŽ€

🌸 SYNOPSIS 🌸

int fdt_end_node (void *fdt );

πŸ¦‹ ARGUMENTS πŸ¦‹

  • fdt β€” pointer to the device tree blob 🌳. That's literally it. Just the blob you're working on.

πŸ“ DESCRIPTION πŸ“

Okay so picture this: you're doing a sequential write of a device tree blob, right? fdt_end_node is the function that completes the current node. ✨

Here's the vibe check: you must call this function to close each node you started with fdt_begin_node. No cap. Every single node needs its ending moment. 🫢

And after you call this? Bestie, listen. No more properties or subnodes can be added to the node. It's giving "the end, periodt." πŸ’€ So make sure you've added everything you wanted before you hit this function.

πŸ”₯ RETURN πŸ”₯

  • 0 β€” on success πŸŽ‰ slay!
  • -FDT_ERR_BADSTATE β€” if you're not currently within a node 😭. Basically the function is like "bestie, there's no node to end?" β€” check your state, iykyk.

πŸ’œ SEE ALSO πŸ’œ

Kernel file ./scripts/dtc/libfdt/libfdt.h β€” and honestly, there are so many friends in this family. Here's the full squad, no gatekeeping: 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_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_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).


Brought to you by ./scripts/dtc/libfdt, October 2026 edition β€” this is fdt_end_node(9) signing off! πŸ’–βœ¨πŸŽ€πŸ¦‹πŸŒΈπŸ’…

πŸ“¦ where this page comes from