由于选取了错误的 DTB 或未选取 DTB 导致的启动失败
排除因 DTB 加载问题导致的启动失败时,请验证认证和 DTB 可用性,并按照步骤修复问题。 以下场景会导致启动失败:- 认证失败
以下示例显示了因认证不正确而失败的日志:
- 由于 DTB 不可用导致的失败
以下示例显示了因缺少 DTB 而失败的日志:
要修复 DTB 不可用的问题,请执行以下操作:
- 验证对应的 DTB 文件是否包含在打包的
dtb.bin文件中。 - 在主机开发机上本地挂载
dtb.bin文件以进行以下验证:
- 验证对应的 DTB 文件是否包含在打包的
- 从内核日志验证已加载的 DTB
使用以下命令从内核日志验证启动时加载的 DTB:
串行控制台不工作
要排除串行控制台日志故障,请在内核配置中启用特定驱动,并在内核启动参数中添加相关参数。- 在内核配置文件中启用以下驱动:
CONFIG_SERIAL_QCOM_GENI=yCONFIG_SERIAL_QCOM_GENI_CONSOLE=y
- 在内核启动参数中添加以下参数:
- 要获取内核的早期启动消息,请在内核启动参数中添加以下参数:
调试远程处理器故障
要排除 remoteproc 故障,请捕获内核日志、使用匹配的固件签名文件,并验证设备中的固件位置。- 确保所有匹配的子系统镜像均已无误刷写。
- 检查内核日志中是否存在错误。
以下示例显示了一个内核日志样例:
- 禁用以下子系统重启功能,以确保 remoteproc 崩溃签名在内核日志中可见:
- 确认 rootfs 文件系统的
/lib/firmware/qcom/<SoC>中存在所有必需的固件文件。
调试配置或符号未反映到镜像中
要调试配置或符号未反映到镜像中的内核配置更改问题,请按以下步骤操作:- 将调试配置驱动添加到
kernel/configs/debug.config文件。 - 在运行
bitbake命令之前导出DEBUG_BUILD=1宏。
系统内存过低
要调试系统可用内存耗尽的情况,请参阅 Debugging linux kernel。在启动期间识别 DTB
设备启动时,引导加载程序会验证以下 ID 并加载对应的 DTB 文件:- x = SoC 的 ID
- z = SoC 修订版本的 ID(保留字段)
- y = CDP、MTP(硬件变体)和平台的 ID
- y’ = 子类型的 ID(如缺失则假定为 0)
调试 RT 内核
以下方法用于排除 RT 内核中的问题:- 如何验证底层内核是实时内核?
启动完成后,运行以下命令验证内核类型:
- 如何使驱动符合 RT 要求?
确保同步原语不会破坏 RT 假设。
以下是可能破坏 RT 假设并导致意外系统行为的场景示例:
- 调试 RT 内核配置
以下是 RT 内核的调试配置:
CONFIG_DEBUG_ATOMIC_SLEEP- 检查原子区段内是否存在睡眠。CONFIG_PROVE_RAW_LOCK_NESTING- 允许raw_spinlock与 spinlock 嵌套。确保不违反PREEMPT_RT内核的锁嵌套规则。 调试期间,你可以从 RT 内核切换到非 RT 内核。要切换,请修改meta-qcom/ci/linux-qcom-rt-6.18.yml文件以更改linux-qcom-rt中的 virtual/kernel 设置,然后重新编译。 要进行更改,请运行以下命令:
排除 virtio 问题
使用以下方法排除 virtio 问题:- 确保内核已使用所需配置编译。
- 验证 QEMU 命令行选项或 libvirt XML 配置。
- 检查系统日志中的错误。
- 使用可用的跟踪后端在 QEMU 命令行中为 virtio 启用跟踪。有关 KVM 跟踪的更多信息,请参阅 KVM traces。

