启动失败
内核无法启动,黑屏或无串行输出
首先检查:- 确认已配置串行控制台(内核命令行中包含
console=ttyMSM0,115200n8)。 - 通过重新运行
fastboot flash efi efi.bin验证efi.bin已成功刷写,并检查OKAY响应。 - 如果携带 EFI 变量的 RPMB 区域持久状态已损坏或错位,请擦除该区域:
- 在内核命令行中添加
earlycon,以便在 UART 驱动初始化之前获得输出。
启动时内核 panic
启动期间的内核 panic 会在串行控制台上产生调用栈。捕获它并确定出错的函数:设备树问题
DTB 认证失败
UEFI 固件在将 DTB 传递给内核之前会对其进行认证。认证失败会导致内核无法接收任何设备树。 日志特征:dtb.bin。确保 efi.bin 和 dtb.bin 来自同一构建。
未找到 DTB
-
验证 DTB 已包含在打包的
dtb.bin中: 如果使用传统的拼接式 dtb 打包:如果使用基于 FIT 的打包: -
检查开发板 DTS 文件已列在 Yocto 机器配置的
KERNEL_DEVICETREE中。 -
重新刷写
dtb.bin:
在运行时验证加载了哪个 DTB
成功启动后,确认加载了正确的设备树:启动期间的 DTB 识别
有关设备树识别的更多信息,请参阅常见 DTB 问题。模块加载失败
Invalid module format 显示 vermagic 不匹配
.ko 文件中的 vermagic 字符串不匹配。
诊断:
KERNEL_SRC、相同的 defconfig 和片段)重新构建模块。如果使用 Yocto,请通过 bitbake qcom-multimedia-image 重新构建,以保持模块和内核同步。
缺少 .ko 文件
obj-m += my_driver.o)并已安装(通过 make modules_install 或 Yocto module 类)。
未找到模块且 modules.dep 中缺失
depmod 以重建模块依赖映射:
模块可加载但不工作
在insmod 后立即检查 dmesg 中的探测错误:
对于延迟探测,检查哪些设备仍处于待处理状态:
串行控制台不工作
如果刷写新内核后串行控制台没有输出:-
验证 Kconfig:
-
验证内核命令行:
-
获取早期启动消息: 在内核命令行中添加
earlycon。这样可以在 UART 驱动完全初始化之前启用输出。 - 检查线缆和波特率: 确认设备和主机终端均为 115200 波特、8N1、无硬件流控。
Remoteproc 故障
固件加载失败
/lib/firmware/qcom/<SoC>/ 中:
子系统崩溃时捕获日志
为防止 remoteproc 驱动自动恢复崩溃的子系统(这会清除崩溃日志),请在复现崩溃之前禁用恢复:.elf 文件传输到主机,并使用 Qualcomm Crash Analysis Portal(QCAP)进行分析。有关更多详情,请参阅配置远程处理器子系统。
