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

Qualcomm remoteproc 支持

Qualcomm 增强了 remoteproc 框架,使用上游 PAS 驱动实现外设固件认证。 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 崩溃序列 要从用户空间使用恢复 debugfs 节点启用和禁用恢复功能,请执行以下操作:

启用或禁用 core dump

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

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

remoteproc 设备使用 DT 绑定在相应的设备树文件中进行配置。该配置包括兼容的设备名称、内存区域、中断设置以及时钟引用,均遵循 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 固件加载失败时会显示以下日志: