有关与启动架构和 DTB 选择算法相关的设备树故障排除,请参阅
设备树架构。
DTB 编译错误
缺少 dt-bindings 头文件
**症状:**内核构建失败并显示:dt-bindings/ 中的头文件,而该头文件在
正在构建的内核版本中不存在。这通常发生在下游 DTS 基于较新的内核,或新的
绑定头文件尚未合入上游时。
修复:
- 确认头文件路径存在于内核源码中:
-
如果头文件缺失,可以从较新的内核回移(backport)它,或者用它定义的
数值常量替换
#include。 -
对于 Yocto 构建,请验证内核配方的
SRCREV与所使用的 DTS 源码修订 版本相匹配。
FIT 镜像中不存在 DTB
**症状:**Yocto 构建完成,但dtb.bin 中缺少预期的 DTB。
**原因:**machine 配置中的 KERNEL_DEVICETREE 或
LINUX_QCOM_KERNEL_DEVICETREE 未列出该 DTB 文件名。
**修复:**将 DTB 路径添加到 machine 配置并重新构建:
dtb.bin 重新烧写到 dtb_a 分区。
启动失败
由于 FIT 配置匹配失败而未加载 DTB
**症状:**设备无法启动。UEFI 串口日志显示:dtb.bin 中的所有 FIT 配置,未找到与硬件标识符
(芯片 ID、开发板类型、开发板版本、外设子类型)匹配的 compatible
字符串。发生这种情况的原因包括:
FIT_DTB_COMPATIBLE条目缺失或拼写错误。- 硬件开发板子类型与任何 FIT 配置都不匹配。
- 修改 machine 配置后没有重新烧写
dtb.bin。
-
验证 DTB 已包含在打包的
dtb.bin中: 如果使用传统的拼接式 dtb 打包:如果使用基于 FIT 的打包: - 将存在的 compatible 字符串与开发板报告的硬件 ID 进行比较。compatible 字符串格式为:
-
在
conf/machine/include/fit-dtb-compatible.inc中添加或更正FIT_DTB_COMPATIBLE条目,并重新构建dtb.bin。 -
重新烧写到
dtb_a分区:
- 收集 UEFI 串口日志。找到 Configuration From BoardParam 行。 例如:
- 将配置的 compatible 字符串与 BoardParam 输出进行比较,找出任何不匹配的 子字符串。
- 将 FIT 镜像解码为 ITS 文件,并更新配置的 compatible 字符串,使其与 BoardParam 值对齐。
-
如果没有 DTB 与开发板的子类型组合匹配,请添加所需的
FIT_DTB_COMPATIBLE条目并重新构建dtb.bin。
DTB 认证失败
**症状:**UEFI 串口日志显示:dtb.bin 镜像在签名后被修改,或使用了不匹配的 .sgn 文件。
**修复:**使用未签名的开发固件,或使用正确的签名密钥重新生成 dtb.bin
及对应的签名。
启动时选择了错误的 DTB
**症状:**设备可以启动,但枚举到了非预期的外设,或dmesg 显示非预期的
开发板型号:
compatible 字符串的 FIT 配置先于预期配置
被匹配。FIT 配置按顺序(conf-1、conf-2、…)评估,第一个匹配即胜出。
修复:
-
通过检查 UEFI 串口日志中的
FindConfigToBoot,确定选择了哪个配置。 -
通过添加开发板子类型、版本或存储类型标记,使预期配置的
compatible字符串更加具体,从而使其先于通用条目被匹配。 -
必要时,在
.its文件中重新排列配置顺序:更具体的条目必须出现在 通用条目之前。
启动后外设无法探测(probe)
**症状:**某个外设在/dev 中不存在,其驱动程序不在 lsmod 中,或
dmesg 显示探测失败。
**原因:**常见原因包括:
- DTS 文件中缺少该外设节点。
- 节点被禁用(
status = "disabled")。 - 缺少或未启用所需的时钟、稳压器或 pinctrl 依赖。
- DTS 中的
compatible字符串与驱动程序的of_device_id表不匹配。
- 确认设备节点存在且已启用:
- 检查
dmesg中的探测错误:
-
如果节点显示
probe deferred,说明某个依赖项(时钟、电源域、 pinctrl)尚不可用。请验证节点中的所有 phandle 引用都解析到已启用的 节点。 -
编辑 DTS 后,重新构建并重新烧写
dtb.bin:
DT 更改未在设备上生效
**症状:**重启后 DTS 编辑没有任何效果;旧的外设配置仍然处于活动状态。 **原因:**修改后的 DTB 没有被重新打包进dtb.bin 并重新烧写。设备
继续从过期的 dtb_a 分区启动。
修复(Yocto 工作流):
DTB overlay 未被应用
**症状:**重启后预期的 overlay(例如 CamX 相机 overlay)未生效。UEFI 日志中没有提到该 overlay 名称。通过 EFI 变量应用 DTB overlay 仅适用于 QCS6490、IQ-9075 和 IQ-8275。
IQ-615 EVK 使用模块级配置代替。
VendorDtbOverlays,或者是在 UEFI 启动阶段
已经读取该变量之后才设置的。
修复:
- 设置 EFI 变量并重启:
- 重启后,从 UEFI 串口日志确认 overlay 已被应用:
- 要清除 overlay 并恢复为默认 DTB:

