linux设备树的解释 - DTB文件格式

dtb文件格式

dtb文件的格式如下图
这里写图片描述
NOTE:不同部分顺序可能不一样

文件头boot_param_header

struct boot_param_header {
        u32     magic;----------------用于标dtb文件头,等于OF_DT_HEADER=“0xd00dfeed”
        u32     totalsize;------------dtb文件大小
        u32     off_dt_struct;--------DT structure偏移
        u32     off_dt_strings;-------DT strings偏移
        u32     off_mem_rsvmap;-------memory reserve map偏移
        u32     version;--------------版本号
        u32     last_comp_version;----兼容最早版本号

        /* version 2 fields below */
        u32     boot_cpuid_phys;------physical CPU id

        /* version 3 fields below */
        u32     size_dt_strings;------size of the strings block

        /* version 17 fields below */
        u32 size_dt_struct;-----------size of the DT structure block
};

保留内存memory reserve map

这段保存的是一个保留内存映射列表,每个表由一对64位的物理地址和大小组成

device-tree structure&strings

由于某些属性(比如compatible)在大多数节点下都会存在,为了减少dtb文件大小,就需要把这些属性字符串只指定一个存储位置即可,这样每个节点的属性只需要按照位置找到属性字符串的位置就可以得到是哪个属性,所以dtb把device-tree strings单独列出来存储,下图是device-tree structure的格式,节点嵌套节点
这里写图片描述
上面的宏定义如下

#define FDT_MAGIC   0xd00dfeed  /* 4: version, 4: total size */
#define FDT_TAGSIZE sizeof(uint32_t)

#define FDT_BEGIN_NODE  0x1     /* Start node: full name */
#define FDT_END_NODE    0x2     /* End node */
#define FDT_PROP    0x3     /* Property: name off,
                       size, content */
#define FDT_NOP     0x4     /* nop */
#define FDT_END     0x9

#define FDT_V1_SIZE (7*sizeof(uint32_t))
#define FDT_V2_SIZE (FDT_V1_SIZE + sizeof(uint32_t))
#define FDT_V3_SIZE (FDT_V2_SIZE + sizeof(uint32_t))
#define FDT_V16_SIZE    FDT_V3_SIZE
#define FDT_V17_SIZE    (FDT_V16_SIZE + sizeof(uint32_t))

总图
这里写图片描述

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值