Fork me on GitHub

Linux 设备树的解释 - DTB文件格式【转】

 

正文

https://blog.csdn.net/cc289123557/article/details/51782449

1、dtb文件格式

 dtb文件的格式如下图 :

NOTE:不同部分顺序可能不一样

 

2、文件头boot_param_header

复制代码
 1 struct boot_param_header {
 2         u32     magic;----------------用于标dtb文件头,等于OF_DT_HEADER=“0xd00dfeed 3         u32     totalsize;------------dtb文件大小
 4         u32     off_dt_struct;--------DT structure偏移
 5         u32     off_dt_strings;-------DT strings偏移
 6         u32     off_mem_rsvmap;-------memory reserve map偏移
 7         u32     version;--------------版本号
 8         u32     last_comp_version;----兼容最早版本号
 9 
10         /* version 2 fields below */
11         u32     boot_cpuid_phys;------physical CPU id
12 
13         /* version 3 fields below */
14         u32     size_dt_strings;------size of the strings block
15 
16         /* version 17 fields below */
17         u32 size_dt_struct;-----------size of the DT structure block
18 };
复制代码

 

 

3、保留内存memory reserve map

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

 

4、device-tree structure&strings

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

 

上面的宏定义如下

复制代码
 1 #define FDT_MAGIC   0xd00dfeed  /* 4: version, 4: total size */
 2 #define FDT_TAGSIZE sizeof(uint32_t)
 3 
 4 #define FDT_BEGIN_NODE  0x1     /* Start node: full name */
 5 #define FDT_END_NODE    0x2     /* End node */
 6 #define FDT_PROP    0x3     /* Property: name off,
 7                        size, content */
 8 #define FDT_NOP     0x4     /* nop */
 9 #define FDT_END     0x9
10 
11 #define FDT_V1_SIZE (7*sizeof(uint32_t))
12 #define FDT_V2_SIZE (FDT_V1_SIZE + sizeof(uint32_t))
13 #define FDT_V3_SIZE (FDT_V2_SIZE + sizeof(uint32_t))
14 #define FDT_V16_SIZE    FDT_V3_SIZE
15 #define FDT_V17_SIZE    (FDT_V16_SIZE + sizeof(uint32_t))
复制代码

 

 

总图 

 



如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!
posted @   yooooooo  阅读(3136)  评论(0)    收藏  举报
编辑推荐:
· 领域驱动设计实战:聚合根设计与领域模型实现
· 突破Excel百万数据导出瓶颈:全链路优化实战指南
· 如何把ASP.NET Core WebApi打造成Mcp Server
· Linux系列:如何用perf跟踪.NET程序的mmap泄露
· 日常问题排查-空闲一段时间再请求就超时
阅读排行:
· .NET周刊【5月第1期 2025-05-04】
· Python 3.14 新特性盘点,更新了些什么?
· 聊聊 ruoyi-vue ,ruoyi-vue-plus ,ruoyi-vue-pro 谁才是真正的
· 物联网之对接MQTT最佳实践
· Redis 连接池耗尽的一次异常定位
点击右上角即可分享
微信分享提示