dtb文件由下列部分组成:
Header
device-tree structure
device-tree strings
-
Header部分
device-tree structure部分
设备树结构块是一个线性化的结构体,是设备树的主体,以节点的形式保存了主板上的设备信息。
在结构块中,以宏OF_DT_BEGIN_NODE
标志一个节点的开始,以宏OF_DT_END_NODE
标识一个节点的结束,整个结构块以宏OF_DT_END
结束。 FDT_BEGIN_NODE (0x00000001)
。该token
描述了一个node
的开始位置,紧挨着该token
的就是node name(包括unit address)
FDT_END_NODE (0x00000002)
。该token
描述了一个node
的结束位置。FDT_PROP (0x00000003)
。该token
描述了一个property
的开始位置,该token
之后是两个u32
的数据,分别是length
和name offset
。length
表示该property value data
的size
。name offset
表示该属性字符串在device tree strings block
的偏移值。length
和name offset
之后就是长度为length
具体的属性值数据。FDT_NOP (0x00000004)
。FDT_END (0x00000009)
。该token
标识了一个DTB
的结束位置。device-tree strings部分
字符串块,通过节点的定义知道节点都有若干属性,而不同的节点的属性又有大量相同的属性名称,因此将这些属性名称提取出一张表,当节点需要应用某个属性名称时,直接在属性名字段保存该属性名称在字符串块中的偏移量。memory reserve map部分
这个区域包括了若干的reserve memory
描述符。每个reserve memory
描述符是由address
和size
组成。其中address
和size
都是用U64
来描述。
有些系统,我们也许会保留一些memory
有特殊用途(例如DTB
或者initrd image
),或者在有些DSP+ARM
的SOC platform
上,有些memory
被保留用于ARM
和DSP
进行信息交互。这些保留内存不会进入内存管理系统。