06.DTB的组成 - 图1
dtb文件由下列部分组成:

  • Header
  • device-tree structure
  • device-tree strings
  • memory reserve map

    Header部分

    06.DTB的组成 - 图2

    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的数据,分别是lengthname offsetlength表示该property value datasizename offset表示该属性字符串在device tree strings block的偏移值。lengthname offset之后就是长度为length具体的属性值数据。
  • FDT_NOP (0x00000004)
  • FDT_END (0x00000009)。该token标识了一个DTB的结束位置。

    device-tree strings部分

    字符串块,通过节点的定义知道节点都有若干属性,而不同的节点的属性又有大量相同的属性名称,因此将这些属性名称提取出一张表,当节点需要应用某个属性名称时,直接在属性名字段保存该属性名称在字符串块中的偏移量。

    memory reserve map部分

    这个区域包括了若干的reserve memory描述符。每个reserve memory描述符是由addresssize组成。其中addresssize都是用U64来描述。
    有些系统,我们也许会保留一些memory有特殊用途(例如DTB或者initrd image),或者在有些DSP+ARMSOC platform上,有些memory被保留用于ARMDSP进行信息交互。这些保留内存不会进入内存管理系统。