术语”非 HLOS”是指除应用处理器之外的所有子系统的软件。要了解子系统的启动流程,请参阅 Qualcomm Linux 启动指南。
请参阅 Qualcomm® Linux® 支持的硬件 SoC。
调试工作流
由于 Qualcomm SoC 有许多子系统,请先识别问题最先发生的子系统。这有助于您调试正确的子系统。 作为主要子系统的应用处理器会检测其他子系统何时崩溃。例如,如果 aDSP 处理器子系统崩溃,内核日志会捕获子系统重启(SSR)崩溃错误日志。因此,要识别需要调试的子系统,请先检查内核调试消息。 下图显示了识别错误以及需要调试的组件的工作流。图:识别受影响子系统的工作流
识别内核 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 功能,而不是在开发阶段使用。
强制子系统复位
使用此功能调试需要重启子系统的用例。此功能仅供具有授权访问权限的许可开发者使用。
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 相关的硬件问题导致的随机复位
后续步骤
- 要调试与 Linux 应用相关的问题,请参阅调试 Linux 用户空间问题。
- 要调试与 Linux 内核相关的问题,请参阅调试 Linux 内核空间问题。

