Skip to main content
remoteproc 框架用于将固件加载到其他子系统中,例如 Qualcomm® 平台上的音频数字信号处理器(aDSP)和计算数字信号处理器(cDSP)。 remoteproc 框架分为两部分:
  • 核心框架——核心框架包含通用逻辑。它加载固件并启动或停止远程处理器。
  • Remoteproc 驱动——驱动包含用于管理相应内核的平台特定操作。remoteproc 驱动向核心框架注册一个 remoteproc 实例和一组操作。
SoC 上存在多个异构远程处理器,采用非对称多处理(ASMP)配置。这些远程处理器运行不同的固件或 OS 实例。 有关 Qualcomm Linux 用于管理其他内核的标准框架的更多信息,请参阅 Remote Processor Framework

Qualcomm remoteproc 支持

Qualcomm 使用上游 PAS 驱动增强了 remoteproc 框架,以实现外设固件认证。 Qualcomm Linux 中的 Remoteproc 驱动实现了外设认证服务(PAS)驱动,它是基于 TrustZone 的外设镜像加载器,用于 Qualcomm SoC 设备上的远程处理器。 有关更多信息,请参阅 qcom_q6v5_pas.c 远程处理器用于管理各类协处理器的生命周期,例如 aDSP、cDSP、调制解调器外设子系统(MPSS)和无线处理器子系统(WPSS)。基于 QCS6490 的开发板和 Dragonwing RB3 Gen 2 开发套件支持的协处理器为 aDSP、cDSP 和 WPSS。
支持的远程处理器子系统列表取决于所使用的 SoC。
用户接口: remoteproc 框架跟踪已注册的 remoteproc 设备,并提供用户接口以启动和关闭这些设备。用户空间可以使用以下 sysfs 接口查询和更改 remoteproc 的当前状态:
图:Remoteproc 支持

图:Remoteproc 支持

配置 remoteproc 恢复和子系统重启

remoteproc 子设备管理远程处理器子系统崩溃和恢复场景中的通信上下文。 诸如通信上下文之类的实体必须确定远程处理器何时启动或关闭。每个子设备有两个操作:
  • probe():在 remoteproc start() 之后调用
  • remove():在 stop() 之前调用
当远程处理器发生致命错误时,remoteproc 驱动会处理该错误并调用 rproc_report_crash(),从而触发对故障远程处理器的恢复。 恢复处理程序执行以下操作:
图:Remoteproc 崩溃流程

图:Remoteproc 崩溃流程

启动 remoteproc 实例、重新加载固件、调用 coredump 生成器、停止 remoteproc 实例 图:Remoteproc 崩溃流程 要从用户空间使用 recovery debugfs 节点启用和禁用恢复,请执行以下操作:

启用或禁用核心转储

支持远程处理器核心转储(core dump),可使用 Qualcomm Linux 内核 devcoredump 特性调试子系统崩溃问题。 当子系统崩溃时,devcoredump 会在 /sys/class/devcoredump/devcdN/data 节点中暴露正在恢复的 remoteproc 的内存快照,并向用户空间发送关联的崩溃 uevent。读取该 sysfs 节点时,sysfs 以 ELF 容器形式提供这些段;写入操作会释放资源并销毁 devcoredump 实例。 系统暴露了一个 debugfs 节点,可从用户空间启用和禁用核心转储。
为了收集用于崩溃分析的完整 RAM 转储,Qualcomm SoC 在 remoteproc 崩溃(远程处理器致命错误)时实现内核 panic。仅当核心转储被禁用时才会启用内核 panic 模式。
只有在为子系统启用了核心转储的情况下,子系统崩溃时才会创建 devcoredump /sys/class/devcoredump/devcdN/data 节点。要启用核心转储,请运行 echo enabled > /sys/kernel/debug/remoteproc/remoteprocN/coredump 命令。devcdN/data 节点是临时的,会在超时后被移除。要调试问题,请使用 copy 命令将 devcdN/data 节点复制到本地设备以便安全使用。删除超时在 base/devcoredump.c 中定义。 以下是复制核心转储的示例命令:
要将核心转储文件传输到主机设备并调试问题,请使用 Qualcomm Crash Analysis Portal(QCAP)。
有关 QCAP 的更多信息,请参阅”使用 QCAP 解析 RAM 转储”。

在 DT 中配置 remoteproc 节点和固件加载

remoteproc 设备在相应的设备树文件中使用 DT 绑定进行配置。配置包括 compatible 设备名称、内存区域、中断设置和时钟引用,遵循 Documentation/devicetree/bindings/remoteproc/ 目录中的 DT 绑定。 以下示例展示了 arch/arm64/boot/dts/qcom/qcs6490.dtsi(在内核 v6.19 及更高版本中重命名为 kodiak.dtsi)中 QCS6490 aDSP remoteproc 设备树配置:
请在 arch/arm64/boot/dts/qcom/lemans.dtsi 路径中查看 IQ-9075 设备树配置文件。
要获取所有 Qualcomm SoC 的设备树配置文件,请参阅相应的平台 DTSI 文件。
所有固件文件都位于 rootfs/lib/firmware 目录中,相关配置在相应的开发板设备树 arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts 文件中完成。对于其他 Qualcomm 硬件 SoC,请参阅 arch/arm64/boot/dts/qcom/<SoC>-<board>.dts 文件。 以下示例展示了 remoteproc DT 配置:

Remoteproc 参考日志

remoteproc 成功启动时会显示以下日志:
remoteproc 固件加载失败时会显示以下日志: