3、DTC编译器安装:从源码编译dtc、apt-get安装、验证安装是否成功
设备树编译器(DTC),说白了就是把 .dts 文本文件变成 .dtb 二进制文件的工具。没有它,你的设备树写得再漂亮也跑不起来。我刚开始接触设备树时,就吃过这个亏——写了一大堆节点,结果编译不过,折腾半天才发现是 DTC 版本太老。
这一节,咱们就把 DTC 的安装彻底搞定。我会介绍两种方式:apt-get 快速安装和源码编译安装。你根据自己情况选一种就行。
3.1 方式一:apt-get 快速安装(推荐新手)
如果你用的是 Ubuntu 或 Debian 系系统,最简单的方式就是直接装。我个人习惯先用这个方式,省时间。
sudo apt-get update
sudo apt-get install device-tree-compiler
装完之后,验证一下:
dtc --version
正常会输出类似:
Version: DTC 1.6.1
3.2 方式二:从源码编译安装(推荐进阶用户)
为什么要自己编译?原因很简单:你要用最新特性。比如某些新内核引入了新的 binding,老版本 DTC 可能不认识。我记得有一次,内核 5.10 新增了 interrupt-map 的语法糖,我用的 1.5.0 直接报错。嗯,从那以后我就养成了源码编译的习惯。
3.2.1 下载源码
DTC 的官方仓库在 git://git.kernel.org/pub/scm/utils/dtc/dtc.git。你也可以从 GitHub 镜像拉:
git clone https://git.kernel.org/pub/scm/utils/dtc/dtc.git
cd dtc
或者直接下载 release 包:
wget https://www.kernel.org/pub/software/utils/dtc/dtc-1.6.1.tar.gz
tar -xzf dtc-1.6.1.tar.gz
cd dtc-1.6.1
3.2.2 编译与安装
DTC 的编译很简单,没有复杂的 configure 步骤。直接 make 就行:
make
sudo make install
这里有个坑——默认安装路径是 /usr/local/bin。如果你的系统 PATH 没包含这个目录,记得加一下:
export PATH=$PATH:/usr/local/bin
或者你像我一样,直接指定安装路径:
make PREFIX=/usr install
sudo apt-get remove device-tree-compiler。我曾经没卸载,结果两个版本冲突,编译时莫名其妙报错,排查了半天。
3.3 验证安装是否成功
不管用哪种方式,装完之后都要验证。我一般做三步检查:
- 版本检查:
dtc --version,确认版本号符合预期。 - 基本编译测试:随便写个最简单的
.dts文件,编译成.dtb。 - 反编译测试:把刚生成的
.dtb反编译回.dts,看看是否一致。
第二步和第三步的具体操作,我写个示例:
# 创建一个最简单的 dts 文件
cat > test.dts << EOF
/dts-v1/;
/ {
compatible = "test,device";
#address-cells = <1>;
#size-cells = <1>;
cpu@0 {
compatible = "test,cpu";
reg = <0x00 0x100>;
};
};
EOF
# 编译
dtc -I dts -O dtb -o test.dtb test.dts
# 反编译
dtc -I dtb -O dts -o test_reverse.dts test.dtb
# 对比原始文件和反编译文件
diff test.dts test_reverse.dts
如果 diff 没有输出,说明编译和反编译都正常。你想想看,这其实就验证了 DTC 的核心功能——无损转换。
3.4 常见问题与避坑指南
| 问题 | 原因 | 解决方法 |
|---|---|---|
dtc: command not found |
没安装或 PATH 没配置 | 检查安装路径,或重新安装 |
FATAL ERROR: Unrecognized input format |
输入文件格式不对 | 检查 -I 参数是 dts 还是 dtb |
Error: syntax error |
dts 文件语法错误 | 检查分号、花括号是否匹配 |
反编译后多了 __symbols__ 节点 |
DTC 版本差异 | 加 -@ 参数控制符号表生成 |
我曾经在调试一块 ARM 开发板时,反编译出来的 dtb 总是多出一些奇怪的节点。后来发现是 DTC 版本太老,不支持新的 plugin 语法。升级到 1.6.1 后问题解决。所以,版本对齐很重要——你的 DTC 版本最好和内核源码树里自带的版本一致。
3.5 本章知识体系
下面这张图,帮你理清 DTC 安装的完整脉络:
这张图把安装流程分成了两条路径,最终汇聚到验证环节。你跟着走一遍,基本不会出错。
好了,DTC 的安装就讲到这里。两种方式各有优劣——apt-get 省心,源码编译灵活。我个人建议:开发环境用源码编译,生产环境用 apt-get。下一节,咱们会真正动手写第一个 .dts 文件,到时候你就知道 DTC 装好有多重要了。
DTC: command not found 错误,别慌。八成是内核源码树里的 scripts/dtc 目录没编译。进到内核目录,执行 make scripts 就能生成。这个坑我踩过两次,现在记住了。