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 在设备树开发中的核心位置,以及编译/反编译两条数据流向:

dtc 工具工作流程 .dts / .dtsi 设备树源码 .dtb 设备树二进制 dtc 引擎 编译 / 反编译 检查 / 转储 .dtb 编译输出 .dts 反编译输出 实线箭头 = 编译流程(.dts → .dtb) 虚线箭头 = 反编译流程(.dtb → .dts)

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 可以快速了解当前环境的工具能力,是排查问题的第一步。