调试RK3588必看!这个临时设备树文件,藏着你要的所有配置答案

天资达人 时政新闻 2026-02-04 3127 0

RK3588芯片开发的小伙伴,肯定在 kernel/arch/arm64/boot/dts/rockchip/ 目录下见过一个长名字文件”—— rk3588-evb7-v11-linux.dtb.dts.tmp 。不少人以为它是编译过程的临时垃圾,看完这篇你就知道: 它其实是解决硬件适配、内核启动问题的调试钥匙

wKgZO2kamkKAFXedAAPkvfz4y_U568.png

一、先搞懂:这个长名字文件到底是什么?

在解释为什么要关注之前,咱们先拆解文件名,搞懂它的身份

rk3588-evb7-v11:对应硬件型号——RK3588芯片的EVB7版本11开发板,明确了文件的硬件适配范围;

dtb.dts.tmp:核心属性——dts是设备树源码,dtb是编译后的二进制设备树,tmp表示它是内核编译过程中生成的临时中间文件,本质是展开后的完整设备树源码

简单说:它是编译器将所有关联的设备树文件(.dts/.dtsi)整合后生成的全量源码快照,比原始分散的dts文件更能反映最终生效的配置

二、关键信息提取:从文件里能挖到哪些宝藏

调试时最头疼的问题:我改的配置到底生效了吗?”“内核用了哪些设备树文件?”——这些答案都在这个临时文件里。

1.最终生效的硬件配置

打开文件后,所有硬件节点的实际配置一目了然,不用再逐个查分散的dtsi文件:

外设使能状态:比如uart2节点是否有status = "okay",判断串口是否真的启用;

引脚与地址:spi1的片选引脚cs-gpios寄存器基地址reg,直接对应硬件接线;

时钟电源clk-frequency = <100000000>SPI时钟100MHz)、vdd-supply = <&vdd_3v3>(供电来源),这些关键参数直接影响外设工作。

举个例子:如果调试I2C传感器时发现设备不响应,打开这个文件搜i2c3,就能快速确认:是节点被禁用(status="disabled"),还是地址写错(reg=0x48写成0x49)。

2.被引用的所有文件路径

设备树配置常分散在多个文件(如芯片级dtsi、板级dtsi、通用头文件),这个临时文件会通过#include明确列出所有依赖文件及路径

#include //通用GPIO定义头文件(内核通用路径)

#include // RK3588时钟定义

#include"rk3588.dtsi"// RK3588芯片核心设备树(同目录)

#include"rk3588-evb7-common.dtsi"// EVB7开发板通用配置(同目录)

#include"rk3588-sdmmc.dtsi"// SD卡控制器配置(同目录)

通过这些路径,你能快速定位:

某个配置来自哪个文件(比如时钟参数来自rk3588-cru.h);

是否漏引/错引文件(比如想启用HDMI,却没找到#include"rk3588-hdmi.dtsi")。

三、核心原因:为什么调试RK3588必须盯紧它?

咱们调试时踩过的很多坑,本质都是配置没生效文件引用错,而这个临时文件正好能解决这些核心痛点。

1.避免改了dts却没生效的无效调试

你有没有遇到过:明明在rk3588-evb7-v11.dts里改了SPI时钟,内核启动后却还是老频率?

问题可能出在配置被覆盖”——比如rk3588-evb7-common.dtsi里的SPI时钟参数优先级更高,覆盖了你改的配置。

这时候打开临时文件搜spi1,就能看到最终生效的clk-frequency是多少,快速定位被覆盖的配置,避免在原始dts里反复修改却没用。

2.快速定位编译报错/启动异常的根源

编译报错“undefined reference to 'GPIO_ACTIVE_HIGH'”:打开临时文件,看是否漏引了dt-bindings/gpio/gpio.h

内核启动提示Cannot find device tree node for 'mmc0'”:搜mmc0节点,看是否被禁用,或引用的rk3588-sdmmc.dtsi路径错了;

外设驱动加载失败:查对应节点的compatible属性(如compatible = "rockchip,rk3588-i2c")是否与驱动匹配,避免驱动和设备树不兼容的问题。

3.校验版本一致性,排除环境问题

多人协作或更换编译环境时,很容易出现用了旧版本dts文件的问题。比如同事更新了rk3588-evb7-common.dtsi,你本地却还是老版本,编译后配置不一致。

这时候对比两个环境生成的rk3588-evb7-v11-linux.dtb.dts.tmp文件(用diff命令),就能快速发现哪些配置或引用文件有差异,排除环境不一致的坑。

四、实操技巧:3步用好这个调试利器

知道了它的价值,咱们再讲怎么实际用起来:

1.找到文件:编译后自动生成

只要执行过RK3588内核编译(如make dtbsmake),文件就会自动生成在kernel/arch/arm64/boot/dts/rockchip/目录下,不用手动创建。

2.查看关键配置:用grep快速搜索

不用逐行翻文件,用grep命令精准定位:

UART2配置:grep -A 10 "uart2" rk3588-evb7-v11-linux.dtb.dts.tmp-A 10表示显示匹配行后10行);

查所有引用文件:grep "#include" rk3588-evb7-v11-linux.dtb.dts.tmp

3.对比配置差异:用diff命令

比如对比修改dts前后的配置变化:

#先备份修改前的文件

cp rk3588-evb7-v11-linux.dtb.dts.tmp old.tmp

#修改dts后重新编译,生成新文件

make dtbs

#对比差异

diff old.tmp rk3588-evb7-v11-linux.dtb.dts.tmp

最后总结

RK3588调试者来说,rk3588-evb7-v11-linux.dtb.dts.tmp不是临时垃圾,而是:

「配置快照」:反映最终生效的硬件参数;

「文件地图」:明确所有依赖的设备树文件;

「排障工具」:快速定位编译/启动/外设问题。

下次调试时,别再忽略这个文件了——打开它,很多问题可能一眼就有答案。你平时调试设备树时还遇到过哪些坑?欢迎在评论区分享,咱们一起避坑~

推荐阅读:

上半年你给证券行业发展打几分?中证协发文细评券商“中考”成绩