2. dtc 工具简介:dtc 编译器功能、版本查看、基本用法与帮助信息
dtc(Device Tree Compiler)是 Linux 内核社区官方维护的设备树编译与反编译工具。它将人类可读的 .dts(Device Tree Source)文本文件编译为二进制 .dtb(Device Tree Blob)文件,也能将 .dtb 反编译回 .dts 文本,是嵌入式开发中操作设备树的核心工具。
2.1 dtc 的核心功能
dtc 工具围绕设备树的编译、反编译与检查提供三大核心能力:
| 功能类别 | 输入 → 输出 | 典型场景 |
|---|---|---|
| 编译 | .dts / .dtsi → .dtb |
将设备树源码转换为内核可加载的二进制格式 |
| 反编译 | .dtb → .dts |
从现有二进制文件还原可读源码,用于逆向分析或调试 |
| 检查/转储 | .dtb → 控制台输出 |
验证设备树结构、打印节点树、输出属性值 |
提示: dtc 还支持将设备树输出为
.dtbo(设备树覆盖层)格式,用于运行时动态修改设备树,这在 FPGA 动态加载或外设热插拔场景中非常有用。
2.2 版本查看与帮助信息
在终端中执行以下命令可快速获取 dtc 的版本号和详细帮助:
# 查看版本号
dtc --version
# 输出详细帮助信息
dtc --help
# 输出简短的用法摘要
dtc -h
典型的版本输出示例:
Version: DTC 1.6.1
帮助信息会列出所有支持的选项、输入输出格式以及编译/反编译的默认行为。下表整理了最常用的命令行选项:
| 选项 | 功能说明 | 示例 |
|---|---|---|
-I <格式> |
指定输入文件格式(dts、dtb、fs) |
-I dts |
-O <格式> |
指定输出文件格式(dts、dtb、dtbo、asm) |
-O dtb |
-o <文件> |
指定输出文件名 | -o output.dtb |
-@ |
生成设备树覆盖层(.dtbo)时启用符号节点 |
-@ |
-H <模式> |
设置 phandle 生成模式(legacy、epapr、both) |
-H epapr |
-V <版本> |
设置输出的设备树 Blob 版本(如 17) |
-V 17 |
-S <字节> |
设置输出文件的最小大小(填充空白) | -S 0x8000 |
-p <字节> |
在输出文件末尾填充指定大小的空白空间 | -p 0x1000 |
2.3 基本用法速览
以下四个命令覆盖了 dtc 最常用的工作流:
# 1. 编译:将 .dts 编译为 .dtb
dtc -I dts -O dtb -o board.dtb board.dts
# 2. 反编译:将 .dtb 反编译为 .dts
dtc -I dtb -O dts -o board.dts board.dtb
# 3. 编译并输出到标准输出(查看编译结果)
dtc -I dts -O dtb board.dts
# 4. 反编译并输出到标准输出(快速查看设备树内容)
dtc -I dtb -O dts board.dtb
注意: 如果
.dts 文件中使用了 #include 预处理指令(如 #include "skeleton.dtsi"),必须先通过 C 预处理器展开,再传给 dtc。正确的做法是使用 cpp -x assembler-with-cpp board.dts | dtc -I dts -O dtb -o board.dtb,或直接使用内核构建系统(make dtbs)自动处理。
2.4 dtc 工作流程示意图
下图展示了 dtc 在设备树开发中的核心位置,以及编译/反编译两条数据流向:
2.5 常用选项速查表
下表按使用频率整理了 dtc 的常用选项,方便开发时快速查阅:
| 选项 | 完整形式 | 说明 |
|---|---|---|
-I |
--in-format |
指定输入格式:dts、dtb、fs(文件系统) |
-O |
--out-format |
指定输出格式:dts、dtb、dtbo、asm |
-o |
--out |
指定输出文件名 |
-V |
--out-version |
设置 Blob 版本(默认 17) |
-@ |
--symbols |
生成符号节点(用于覆盖层) |
-H |
--phandle |
设置 phandle 生成模式 |
-s |
--sort |
按字母顺序排序属性和节点 |
-R |
--reserve |
在内存保留区域中预留空间 |
2.6 获取帮助的实用技巧
- 快速查看所有选项:
dtc --help会列出所有选项及其简短说明,适合在终端中直接查阅。 - 查看 dtc 版本与编译特性:
dtc --version不仅显示版本号,还会显示编译时启用的特性(如yaml、tests等)。 - 查看 man 手册: 如果系统安装了 dtc 的 man 页,执行
man dtc可获得更详细的文档。 - 在线资源: dtc 的源码和文档位于 Linux 内核源码的
scripts/dtc/目录下,其中dtc.rst文件包含了完整的工具说明。
要点总结: dtc 是设备树开发中不可或缺的编译/反编译工具。掌握
-I、-O、-o 三个核心选项即可完成 90% 的日常操作。通过 --help 和 --version 可以快速了解当前环境的工具能力,是排查问题的第一步。