- 核心框架——核心框架包含通用逻辑。它加载固件并启动或停止远程处理器。
- Remoteproc 驱动——驱动包含用于管理相应内核的平台特定操作。remoteproc 驱动向核心框架注册一个 remoteproc 实例和一组操作。
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。
sysfs 接口查询和更改 remoteproc 的当前状态:
图:Remoteproc 支持
配置 remoteproc 恢复和子系统重启
remoteproc 子设备管理远程处理器子系统崩溃和恢复场景中的通信上下文。 诸如通信上下文之类的实体必须确定远程处理器何时启动或关闭。每个子设备有两个操作:probe():在 remoteprocstart()之后调用remove():在stop()之前调用
rproc_report_crash(),从而触发对故障远程处理器的恢复。
恢复处理程序执行以下操作:
图:Remoteproc 崩溃流程
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 模式。
/sys/class/devcoredump/devcdN/data 节点。要启用核心转储,请运行 echo enabled > /sys/kernel/debug/remoteproc/remoteprocN/coredump 命令。devcdN/data 节点是临时的,会在超时后被移除。要调试问题,请使用 copy 命令将 devcdN/data 节点复制到本地设备以便安全使用。删除超时在 base/devcoredump.c 中定义。
以下是复制核心转储的示例命令:
有关 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 配置:

