DTB TOOL SPRD
📌 1. 工具简介
dtbtool 是展锐(Spreadtrum / Unisoc)平台专用的设备树打包工具,它扫描指定目录下的所有 .dtb 文件,提取每个 DTB 中的 sprd,sc-id 参数(芯片型号、平台、版本),然后生成一个合并的、按页对齐的镜像文件。
人话就是,直接生成一个带 0x200 偏移的头部,不再需要手动 hex。
虽然很不愿意承认,但他确实是直接从高通改过来的。
里面还留着高通的 qcom 字样,依旧招笑紫光。
📦 2. 编译 dtbtool
源码文件
dtbtool.c
编译命令(Linux 环境)
gcc -o dtbtool dtbtool.c
依赖
系统需安装 dtc(Device Tree Compiler),因为工具在运行时需要调用 dtc 临时反编译 .dtb 文件以提取 sprd,sc-id。
# Ubuntu/Debian
sudo apt install device-tree-compiler
🚀 3. 使用方法
基本语法
./dtbtool [选项] -o <输出文件> <输入目录>
常用选项
| 选项 | 说明 |
|---|---|
| -o file | 指定输出的合并镜像文件名(必须) |
| -p path | 指定 dtc 所在目录(如果 dtc 不在 PATH 中) |
| -s size | 设置页面大小(单位:字节),默认为 2048,应与 bootloader 的页面大小一致 |
| -v | 显示详细信息(verbose) |
| -h | 显示帮助信息 |
示例
# 基本用法:将 ./dtbs/ 目录下的所有 .dtb 文件合并为 dtb.img
./dtbtool -o dtb.img ./dtbs/
# 指定页面大小为 4096 字节,并显示详细输出
./dtbtool -s 4096 -v -o dtb.img ./dtbs/
# 如果 dtc 不在 PATH 中,指定其路径
./dtbtool -p /usr/local/bin/ -o dtb.img ./dtbs/
📂 4. 输入文件要求
-
输入目录中应包含一个或多个
.dtb文件(扩展名必须为.dtb)。 -
每个
.dtb对应的设备树源码中必须包含以下格式的属性:sprd,sc-id = ;
例如:
sprd,sc-id = <0x1808 0x01 0x20000>; -
工具会解析每个
.dtb文件,提取sprd,sc-id中的三元组,并以此作为去重和排序的依据(按chipset → platform → rev升序)。如果多个 DTB 具有相同的三元组,只会保留第一个(后续的会报告duplicate并跳过)。这个头部在紫光被用于校验芯片。
📄 5. 输出文件结构
生成的镜像文件包含以下部分(以页面大小对齐):
-
文件头(12 字节)
- Magic:
"SPRD"(4 字节) - Version:
1(4 字节) - DTB 数量:
n(4 字节)
- Magic:
-
索引表(每个 DTB 条目 20 字节)
每个条目包含:chipset(4 字节)platform(4 字节)rev(4 字节)offset(4 字节) — DTB 数据在文件中的起始偏移size(4 字节) — DTB 数据的大小(按页对齐后)
-
结束标志(4 字节) — 值为
-
填充到页面边界 — 以便第一个 DTB 从页边界开始
-
每个 DTB 数据块(按页对齐)
⚠️ 6. 注意事项
- dtc 依赖:工具必须能够调用
dtc来反编译.dtb。如果dtc安装路径不在$PATH中,请使用-p指定。 - 页面大小:务必与目标设备的 bootloader 期望的页面大小一致(通常为
2048或4096)。如果不确定,可以查看原厂dtb.img的信息或查阅设备文档。 - 去重规则:仅当两个 DTB 的
sprd,sc-id三元组完全相同时才会去重。如果同一芯片有不同版本,保留全部。 - 输出文件:如果生成过程中发生错误,工具会自动删除不完整的输出文件。其实很烦人。
🔄 7. 典型工作流(生成并刷入)
-
准备包含所有 DTB 的目录,例如
my_dtbs/。 -
运行
dtbtool生成合并镜像:./dtbtool -o dtb.img my_dtbs/ -
将生成的
dtb.img刷入设备的dtb分区(通常使用 fastboot):fastboot flash dtb dtb.img注意:部分设备可能会将
dtb合并在boot.img中,处理方法不同。

Comments NOTHING