Skip to main content
子系统在 Qualcomm® SoC 上其自身的执行环境中独立处理任务。本节介绍受影响子系统的工具、示例日志和故障排查方法。了解子系统中的异常以及检查错误的方法,有助于诊断和排查此类异常。 下表列出了 SoC 上的重要子系统。 表:SoC 上的子系统
术语”非 HLOS”是指除应用处理器之外的所有子系统的软件。要了解子系统的启动流程,请参阅 Qualcomm Linux 启动指南
请参阅 Qualcomm® Linux® 支持的硬件 SoC

调试工作流

由于 Qualcomm SoC 有许多子系统,请先识别问题最先发生的子系统。这有助于您调试正确的子系统。 作为主要子系统的应用处理器会检测其他子系统何时崩溃。例如,如果 aDSP 处理器子系统崩溃,内核日志会捕获子系统重启(SSR)崩溃错误日志。因此,要识别需要调试的子系统,请先检查内核调试消息。 下图显示了识别错误以及需要调试的组件的工作流。
诊断内核 panic、软件 bug 和子系统崩溃问题的工作流。

图:识别受影响子系统的工作流

当内核 dmesg 日志未显示 panic 特征时,请检查 Qualcomm TEE 诊断(diag)日志中的错误,例如非安全看门狗 bite 和片上网络(NoC)错误。以下各节介绍指示内核 panic、bug 和子系统崩溃问题的示例内核消息。

识别内核 panic 和 bug

您可以从内核 dmesg 日志中确定复位是内核 panic 还是 bug。以下示例日志指示内核 panic 或 bug:
  • Panic(模式:一般错误) 18.800936: <6> Kernel panic - not syncing: Fatal exception 18.800938: <6> SMP: stopping secondary CPUs 18.800947: <6> CPU0: stopping Kernel panic - not syncing: Apps watchdog Bark received!
  • Bug(模式 1:由内存损坏导致的强制崩溃) 12.899532: <6> BUG kmalloc-128 (Not tainted): Redzone overwritten 12.905418: <6> -----------------------------------------------------------------------------
  • Bug(模式 2:来自驱动的强制崩溃) 320.510769: <6> ------------[ cut here ]------------ 320.510781: <6> kernel BUG at /local/mnt/workspace/lnxbuild/project/trees_in_use/free_tree_platform_manifest_refs_tags/drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c:955!
  • Bug(模式 3:由锁死问题导致的强制崩溃) [ 180.993861] BUG: spinlock lockup suspected on CPU#0, swapper/0/0 [ 180.993883] lock: stop_lock+0x0/0x18, .magic: dead4ead, .owner: swapper/6/0, .owner_cpu: 6 [ 181.015629] Causing a watchdog bite!
大多数 bug 通常会导致内核 panic。有关调试内核问题的更多信息,请参阅 Qualcomm Linux 内核指南

识别子系统崩溃问题

您可以检查内核 dmesg 日志,以确定重启是否由子系统崩溃引起。例如,根据 sc7280.dtsi(节点:remoteproc_adsp: remoteproc@3700000),以下日志表示 aDSP 子系统崩溃: 0x000000000A27652C | 5198.790423: qcom_q6v5_pas 3700000.remoteproc: fatal error received: err_inject_crash.c:413:Crash injected via Diag 0x000000000A276689 | 5198.801061: remoteproc remoteproc2: crash detected in 3000000.remoteproc: type fatal error 0x000000000A2767A1 | 5198.809602: remoteproc remoteproc2: handling crash #1 in 3000000.remoteproc 0x000000000A27688E | 5198.816837: remoteproc remoteproc2: recovering 3000000.remoteproc 0x000000000A276971 | 5198.823784: qcom_q6v5_pas 8a00000.remoteproc: subsystem event rejected

从 Qualcomm TEE 日志中识别系统问题

此功能仅供具有授权访问权限的许可开发者使用。有关指示 Qualcomm TEE 中错误的示例日志,请参阅 Qualcomm Linux 调试指南 - 补充文档 如果 Qualcomm TEE diag 日志未显示错误,则问题可能是由安全看门狗 bite 引起的。有关看门狗问题的更多信息,请参阅硬件复位 有关 Qualcomm TEE 中调试问题的更多信息,请参阅 Qualcomm Linux 安全指南

调试方法

以下是两种调试方式:
  • 在设备上(on-target)调试 在设备上调试可解决软件问题。此方式允许直接从实时设备访问大多数信息。使用 SSH 将 Linux 主机计算机连接到实时设备。要设置 SSH,请参阅使用 SSH 登录。 有关各种在设备上调试功能的更多信息,请参阅在设备上调试功能
  • 离线(off-target)调试i 此方式使用日志而不是实际设备,是一种高效的调试方法。您可以使用内存转储或日志工具以及各种类型的日志进行离线调试。虽然 RAM 转储捕获了大多数内存区域,但它只包含有限的硬件寄存器信息,因此调试与硬件相关的问题可能是一项挑战。 有关各种离线调试功能的更多信息,请参阅离线调试功能

在设备上调试功能

您可以在运行时在设备上使用以下调试功能:

Perf 实用工具

Linux 中的 Perf 实用工具便于进行性能分析和剖析。Linux 内核在 tools/perf 目录中包含 Perf 实用工具。 您可以使用 Perf 实用工具调试系统行为的各个方面,包括 CPU 性能计数器、tracepoint、kprobe 和 uprobe(用于动态跟踪)。下表列出了 Perf 实用工具的主要功能。 表:Perf 实用工具的主要功能 有关 Perf 实用工具的更多信息,请参阅以下资源:

子系统重启

子系统崩溃时可以独立重启而无需重启设备,这称为子系统重启(SSR)。SSR 功能使用 Linux 内核中提供的 remoteproc 框架。 要启用完整内存转储以进行调试,请默认禁用 SSR 功能。
建议在商用设备上使用 SSR 功能,而不是在开发阶段使用。
有关 SSR 功能的更多信息,请参阅配置远程处理器子系统 启用 SSR 功能以在子系统重启时生成 SSR 转储。考虑使用 SSR 转储进行调试,因为其大小比完整内存转储小。但是,要调试某些子系统崩溃,您需要完整的 RAM 转储。 有关如何启用和捕获子系统转储的更多信息,请参阅捕获子系统转储

强制子系统复位

使用此功能调试需要重启子系统的用例。
此功能仅供具有授权访问权限的许可开发者使用。
要强制子系统复位,可以使用 QXDM Professional 工具运行 diag 命令。有关 QXDM Professional 命令及其用法的更多信息,请参阅 Qualcomm Linux 调试指南 - 补充文档

离线调试功能

您可以使用 RAM 转储或 QXDM Professional 进行离线调试。

RAM 转储

RAM 转储是故障发生时整个内存的快照。您可以使用各种工具分析 RAM 转储,包括 Qualcomm® 崩溃分析门户(QCAP)、RAMParser、Lauterbach TRACE32 模拟器和 crash 实用工具。 有关如何收集和解析 RAM 转储的更多信息,请参阅收集并解析 RAM 转储

QXDM Professional

使用 QXDM Professional 调试各种子系统。此工具仅供具有授权访问权限的许可开发者使用。有关 QXDM Professional 命令及其用法的更多信息,请参阅 Qualcomm Linux 调试指南 - 补充文档

常见系统问题

您可以将系统问题分为以下类型之一:

其他问题

您可能会遇到以下其他问题:
  • 由软件 bug 导致的设备冻结问题
  • 与 Linux 应用相关的问题
  • 由与 PCB 相关的硬件问题导致的随机复位

后续步骤