![]() |
RT-Thread RTOS
An open source embedded real-time operating system
|
Optional in-place libfdt helpers for firmware, loaders, or tools that modify the blob before **rt_fdt_unflatten**. Runtime drivers normally use OFW nodes and properties after unflatten.
Header: **drivers/ofw_raw.h**. Source: **components/drivers/ofw/raw.c**.
| Use raw API | Use rt_ofw_* |
|---|---|
| Patch DTB in RAM pre-boot | Driver **probe** on live tree |
Add **/chosen** properties from bootloader | Read **reg / interrupts** |
| Install initrd nodes | Platform enumeration |
| API / macro | Role |
|---|---|
**fdt_add_subnode_possible** | Add child if space in blob |
**fdt_add_mem_rsv_possible** | Add memory reserve entry |
**fdt_setprop_cstring** | Set string property |
**fdt_setprop_cells**, **fdt_appendprop_cells** | U32 cell arrays (endian-safe) |
**fdt_setprop_uxx** | 8/16/32/64-bit property |
**fdt_getprop_u8 … fdt_getprop_s32** | Typed read on blob offset |
**fdt_io_addr_cells**, **fdt_io_size_cells** | Cells on raw node offset |
**fdt_install_initrd** | Add **linux,initrd-*** under **chosen** |
**FDT_SIZE_MAX**, **FDT_PADDING_SIZE** — growth limits when expanding tree.
| Issue | Mitigation |
|---|---|
| Blob too small | Reserve padding at build time; check return codes |
| Edit after unflatten | Tree and blob may diverge — rebuild or only edit pre-unflatten |
| Endianness | Use **fdt_setprop_cells**, not raw **fdt_setprop** for integers |
components/drivers/ofw/libfdt/**