dtb檔案由4部分組成:fdt_header、memory reserve map、device-tree structure、device-tree strings。
前三部分都是4位元組對齊,最後一部分——「device-tree strings」不要求4位元組對齊。
struct fdt_header定義
struct fdt_header ;
保留記憶體(memory reserve map)
struct fdt_reserve_entry ;
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(fdt32_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(fdt32_t))
#define fdt_v2_size (fdt_v1_size + sizeof(fdt32_t))
#define fdt_v3_size (fdt_v2_size + sizeof(fdt32_t))
#define fdt_v16_size fdt_v3_size
#define fdt_v17_size (fdt_v16_size + sizeof(fdt32_t))
可以看出,device-tree structure的組成單元為節點。節點又由node header和property組成,如下:
struct fdt_node_header ;
struct fdt_property ;
例項分析
下面以zcu102_phy.dtb及zcu102_phy.dts為例進行對照分析。
linux裝置樹檔案 dtb
linux 自核心3.x之後引入裝置樹的概念.而不像2.6時代在arch arm mach s2440.c新增修改裝置資訊。推薦一下宋寶華的 linux裝置驅動開發詳解 基於最新的linux 4.0核心 奉勸各位正學習嵌入式linux的在校學生也要與時俱進 我使用的裝置是beagleboard x1...
編譯核心沒有dtb檔案生成原因
今天在使用核心檔案編譯時,可以生成image檔案,但是無法生成dtb檔案。進行make dtbs時,出現下面資訊。linux 4.9.24 make arch arm64 cross compile aarch64 linux gnu dtbs chk include config kernel.r...
裝置樹規則 dtb
dtc工具的作用 將dts中的巨集定義展開,檢查dts中的語法錯誤等,最終編譯成唯一的乙個dtb檔案。dtb檔案布局 大端位元組序 大小端位元組序只對儲存數值有影響,對於字串的儲存是一樣的,比如 abc 永遠是低 a,中 b,高 c。struct ftd header free space memo...