Skip to main content
针对使用 Qualcomm® Linux 内核时最常见故障的 定向诊断步骤和修复方法。

启动失败

内核无法启动,黑屏或无串口输出

首先检查:
  1. 确认已配置串口控制台(内核命令行中包含 console=ttyMSM0,115200n8)。
  2. 通过重新运行 fastboot flash efi efi.bin 验证 efi.bin 已成功烧写, 并检查是否有 OKAY 响应。
  3. 如果携带 EFI 变量的 RPMB 持久状态已损坏或错位,请擦除 RPMB 区域:
  1. 在内核命令行中添加 earlycon,以便在 UART 驱动初始化之前获得输出。
有关串口控制台设置,请参阅内核日志。

启动时内核 panic

启动期间的内核 panic 会在串口控制台上产生调用栈。捕获它并找出出错的函数:
Qualcomm Linux 上的常见原因:

设备树问题

DTB 认证失败

UEFI 固件在将 DTB 传递给内核之前会对其进行认证。认证失败会导致内核 无法接收任何设备树。 日志特征:
**修复:**烧写与设备上当前预置的签名密钥相匹配的、正确签名的 dtb.bin。 确保 efi.bin 和 dtb.bin 来自同一次构建。

未找到 DTB

修复:
  1. 验证 DTB 已包含在打包的 dtb.bin 中: 如果使用传统的拼接式 dtb 打包:
    如果使用基于 FIT 的打包:
  2. 检查开发板的 DTS 文件是否列在 Yocto machine 配置的 KERNEL_DEVICETREE 中。
  3. 重新烧写 dtb.bin:

验证运行时加载了哪个 DTB

成功启动后,确认加载了正确的设备树:

启动期间的 DTB 识别

有关设备树识别的更多信息,请参阅常见 DTB 问题。

模块加载失败

Invalid module format,显示 vermagic 不匹配

**原因:**该模块是针对与正在运行的内核不同的内核版本、配置或编译器构建的。 .ko 文件中嵌入的 vermagic 字符串不匹配。 诊断:
**修复:**针对生成正在运行的内核镜像的确切内核源码树(相同的 KERNEL_SRC、相同的 defconfig 和片段)重新构建模块。如果使用 Yocto, 请使用 bitbake qcom-multimedia-image 重新构建,以保持模块与内核同步。

缺少 .ko 文件

诊断:
**修复:**确保模块已构建(Makefile 中包含 obj-m += my_driver.o) 且已安装(通过 make modules_install 或 Yocto 的 module 类)。

模块未找到且未出现在 modules.dep 中

**修复:**安装新模块后,运行 depmod 以重建模块依赖映射:

模块加载成功但不工作

在 insmod 之后立即检查 dmesg 中的探测错误:
常见模式: 对于延迟探测(deferred probe),检查哪些设备仍处于挂起状态:

串口控制台不工作

如果烧写新内核后串口控制台没有输出:
  1. 验证 Kconfig:
  2. 验证内核命令行:
  3. **获取早期启动消息:**在内核命令行中添加 earlycon。这可以在 UART 驱动完全初始化之前启用输出。
  4. **检查线缆和波特率:**确认设备和主机终端两侧均为 115200 波特、8N1、 无硬件流控。

Remoteproc 故障

固件加载失败

**修复:**确保所有必需的固件文件都存在于 /lib/firmware/qcom/<SoC>/ 中:

在子系统崩溃时捕获日志

为了防止 remoteproc 驱动自动恢复崩溃的子系统(这会清除崩溃日志), 请在复现崩溃之前禁用恢复功能:
崩溃日志示例:
启用 coredump 以捕获内存快照供离线分析:
将 .elf 文件传输到主机,并使用 Qualcomm Crash Analysis Portal(QCAP) 进行分析。有关更多详细信息,请参阅 配置远程处理器子系统。