扁平设备树结构块是线性化的树形结构,和字符串块一起组成了设备树的主体,以节点形式保存目标板的设备信息。在结构块中,节点起始标志为32位常值宏OF_DT_BEGIN_NODE,节点结束标志为宏OF_DT_END_NODE;子节点定义在节点结束标志前。一个节点的基本结构如下所示: 节点起始标志OF_DT_BEGIN_NODE(即0x0000_0001); 节点...
bootmodule_kind kind;paddr_tstart, size;constchar*cmdline;intlen;if(fdt_node_check_compatible(fdt, node,"xen,linux-zimage") ==0||fdt_node_check_compatible(fdt, node,"multiboot,kernel") ==0) kind = BOOTMOD_KERNEL;elseif(fdt_node_check_compatible(fdt, node,"xen,linux-initrd") ==0|...
1. 节点起始标志OF_DT_BEGIN_NODE(即0x0000_0001); 2. 节点路径或者节点单元名(version < 3以及节点路径表示,version > 16时以节点单元名表示); 3. 填充字节保证四字节对齐; 4. 节点属性。每个属性以常值宏OF_DT_PROP 开始,后面依次为属性值的字节长度、属性名在在字符串块中的偏移值、属性值及字节对齐...
ret = fdt_begin_node(fdt,"");if(ret <0) {gotofail; } ret = fdt_end_node(fdt);if(ret <0) {gotofail; } ret = fdt_finish(fdt);if(ret <0) {gotofail; } ret = fdt_open_into(fdt, fdt, *sizep);if(ret) { error_report("Unable to copy device tree in memory");exit(1);...
case FDT_BEGIN_NODE: depth++; if (depth > INT_MAX) return -FDT_ERR_BADSTRUCTURE; break; case FDT_END_NODE: if (depth == 0) return -FDT_ERR_BADSTRUCTURE; depth--; break; case FDT_PROP: prop = fdt_getprop_by_offset(fdt, offset, &propname, &err); if (!prop) return err; brea...
returns: depth of the node at nodeoffset (>=0), on success -FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag -FDT_ERR_BADMAGIC, -FDT_ERR_BADVERSION, -FDT_ERR_BADSTATE, -FDT_ERR_BADSTRUCTURE, standard meanings Definition at line 445 of file fdt_ro.c. int fdt_nod...
if (token == FDTToken::FDT_BEGIN_NODE) { FDTToken tok[[hidden]]; char name[]; AlignTo<4>; std::core::set_display_name(this, name[0] ? name : "/"); token = std::mem::read_unsigned($, 4, std::mem::Endian::Big); if(token == FDTToken::FDT_PROP) { FDTProp props[while...
dtb会位于uboot的.dtb.init.rodata段中,并且在代码中可以通过__dtb_dt_begin符号获取其符号。 因为这种方式不够灵活,文档上也不推荐,所以后续也不具体研究,简单了解一下即可。 另外,也可以通过fdtcontroladdr环境变量来指定dtb的地址 可以通过直接把dtb加载到内存的某个位置,并在环境变量中设置fdtcontroladdr为这个...
intfdtdec_setup(void){#ifCONFIG_IS_ENABLED(OF_CONTROL)// 确保CONFIG_OF_CONTROL宏是打开的#ifdefCONFIG_OF_EMBED/* Get a pointer to the FDT */gd->fdt_blob = __dtb_dt_begin;// 当使用CONFIG_OF_EMBED的方式时,也就是dtb集成到uboot的bin文件中时,通过__dtb_dt_begin符号来获取dtb地址。#elif...
2.1 root Node 3 2.2 chosen 3 2.3 cpus Node 3 2.4 System Memory 5 2.5 Devices 5 2.5.1 Compatible属性 6 2.5.2 Addressing 6 2.6 Interrupts and Interrupt Controllers 7 3 如何制作设备树映像 8 3.1 输入 8 3.2 输出 9 3.3 命令格式 9