你好!针对你关于 RDK S100 MCU 侧四个物理核利用 的问题,结合社区现有资料和 S100 的架构特性,为你做如下解答:
核心结论
- MCU1 (Split-Lock 架构):官方 SDK 默认支持 将其作为两个独立核使用,但不支持分别运行两个独立的 FreeRTOS 系统。官方方案是在一个 FreeRTOS 系统内,将两个核配置为 AMP(非对称多处理)模式,即一个核做主核(Master)运行 FreeRTOS 调度,另一个核做从核(Slave)运行裸机代码或特定任务,通过共享内存和中断通信。
- MCU0 (DCLS 架构):不对普通用户开放开发。MCU0 运行的是地平线私有的实时操作系统(非 FreeRTOS),主要负责芯片启动、电源管理、安全启动、视频编解码底层控制等核心底层任务。用户无法在此运行自定义 FreeRTOS 或进行功能开发。
详细解答与技术路径
1. 关于 MCU1 (Split-Lock) 的双核利用
现状:
目前的官方 SDK (mcu-community) 默认配置是将 MCU1 的两个核作为一个整体(Lockstep 或 Split 模式下的单系统)来编译和运行。
可行性与难度:
- 双 FreeRTOS 实例(不可行/极难):在每个物理核上分别运行一个完整的 FreeRTOS 内核(即两个独立的 OS 实例)在 S100 上没有官方支持,且实现难度极大。你需要解决两个 OS 实例之间的中断路由、共享资源竞争、启动时序等底层问题,这通常涉及修改芯片的 BootROM 行为和底层初始化代码,需要芯片原厂深度支持。
- AMP 模式(可行/推荐):官方推荐的“充分利用”方式是 AMP (Asymmetric Multi-Processing)。
- 架构:Core A (Master) 运行 FreeRTOS,Core B (Slave) 运行裸机循环或特定高实时性任务。
- 实现:需要在编译配置中开启 AMP 选项,并编写 Core B 的入口代码。两个核之间通过共享内存(Shared Memory)和 Mailbox 中断进行通信。
- 官方支持:这是地平线技术支持可以协助的范围。社区已有相关讨论涉及 MCU1 的多核任务分配,但具体 AMP 配置需参考最新版 SDK 文档或联系技术支持获取
Split-Lock模式的详细配置指南。
建议操作:
- 检查你的 SDK 版本(建议更新至最新
v4.0.x或以上)。 - 在
Build/FreeRtos_mcu1_community目录下,查看build_freertos.py的脚本参数,寻找是否有amp或split相关的编译选项。 - 查阅 SDK 中
docs文件夹下关于 “Multi-core” 或 “AMP” 的说明。
2. 关于 MCU0 (DCLS) 的开发
现状:
MCU0 是 S100 的系统控制核心,运行的是地平线自研的实时 OS(并非 FreeRTOS),负责:
- 系统上电启动流程
- 电源管理 (PMIC 控制)
- 安全启动 (Secure Boot)
- 多媒体底层编解码控制
- 与 Linux 侧的 Remoteproc 通信
用户开发权限:
- 不可用:MCU0 的代码不对外开放,用户无法获取源码,也无法在上面运行自定义的 FreeRTOS 或应用程序。
- 接口方式:用户通过 Linux 侧的
remoteproc框架与 MCU0 交互(如启动/停止 MCU1,查看状态),或通过 MCU1 间接与底层通信。
社区佐证:
社区帖子 请问 RDK S100 的 MCU1 的源码从哪里获取? 中明确提到 MCU0 源码一般不对外开放。
推荐行动方案
如果你想充分利用 S100 的 MCU 算力,建议按以下路径进行:
-
主攻 MCU1 的 AMP 开发:
- 联系地瓜技术支持(通过工单或社区私信),明确询问:“如何在 SDK 中配置 MCU1 的 Split-Lock 模式为 AMP 架构?是否有 Core1 裸机运行的 Example?”
- 目标:将高实时性、低延迟的控制任务(如电机 FOC 电流环)放在从核(Slave Core)裸机运行,将通信、逻辑判断等任务放在主核(Master Core)的 FreeRTOS 中。
-
利用 Linux 侧算力:
- S100 的强项在于 AI 和 Linux 应用。复杂的决策、感知算法应部署在 Linux (A53) 侧。
- MCU 侧仅负责高频率、确定性的底层控制(如 10kHz+ 的电机控制、传感器数据采集)。
-
参考现有资源:
- 阅读社区精华帖:【S100-MCU-UseGuide】-1- 环境准备与开发流程,熟悉标准的 MCU1 开发流程。
- 查看 SDK 包中的
HorizonTask.c,了解官方预留的任务接口。
总结
- MCU1 双 FreeRTOS? → 不建议/不支持。请采用 AMP 模式(1 个 FreeRTOS + 1 个裸机核)。
- MCU0 能开发吗? → 不能。这是系统保留核,不开放给用户。
- 技术支持能帮吗? → 能。针对 MCU1 的 AMP 配置和底层驱动开发,技术支持可以提供指导,但不会帮你写业务代码。
建议你在该帖子下补充回复,说明你具体的应用场景(例如:需要控制几个电机?采样频率多少?),这样技术支持或社区大佬能给出更具体的架构建议。