概括

多处理器使得在几个核心上运行独立的固件成为可能。在这种情况下,一个核心可以使用一些外设,而不知道这些外设在其他核心上的使用情况。这中情况出现了潜在的竞争,必须有策略管理来保护。
资源管理的作用是控制外设到专用内核的分配,并提供一种配置用于操作该外设的系统资源的方法。

术语

为了理解STM32资源管理机制,用户可能需要熟悉一些术语:

  • 外设分配(Assignment): 将外设分配给内核意味着该处理器可以使用外设(或硬件模块)。

  • 系统资源(System resource): 操作外设所需的共享资源,并由主内核控制。

 

系统资源
外设需要一些外部资源才能正常运行。 这些资源是时钟,中断线,信号线,引脚,调节器等。
image

每个内核都实例化了其中一些资源(例如中断,时钟门控,复位),而两个内核共享了其他一些资源(定义为系统资源)。 为了避免争用这些系统资源,开发人员必须注意如何控制这些特定资源。
系统资源分为两类:

  • 由Arm Cortex-A和Cortex-M上下文共享并受Hardware Semaphore保护的系统资源:

Pin: 引脚配置
External interrupt (EXTI): GPIO和关联的EXTI中断之间的绑定。

  • 系统资源仅由Linux通过资源管理器框架控制:

Clock tree: 时钟配置由Linux时钟框架管理。 协处理器负责分配给Cortex-M4上下文的外设的时钟门控。
Regulator: 电源由Linux regulator框架管理。

资源管理服务

为了确保两种固件共存,资源管理提供了以下几种服务,这些服务将在下一节中详细介绍:

  • 外设分配请求服务: 用于确保为专用处理器上下文使用保留外围设备的机制。

  • 系统资源配置集服务: 主处理器(运行Linux的Arm Cortex-A)中提供的服务,用于配置在协处理器上操作外设所需的系统资源。

  • 动态系统资源更新服务: 基于远程处理消息传递的服务,该消息允许协处理器请求主处理器更新系统资源配置。

动态系统资源更新服务

由于上面描述了系统资源配置集服务,Cortex-A上下文配置了在Cortex-M上下文中操作外设所需的系统资源。
借助动态系统资源更新服务,Cortex-M上下文可以要求Cortex-A上下文在运行时更新这些资源的配置。
该服务依赖于rpmsg框架,该框架由Cortex-A上的Linux rpmsg和Cortex-M上的OpenAMP实施。 Cortex-M ResourceManager使用专用的rpmsg channel与Cortex-A进行通信。
此服务提供了获取和设置以下配置的能力:

  • Clock rate

  • Regulator enable / disable, voltage (min/max)

 

总览
image

  • Cortex-A 组件:

rproc_srm_core: 系统资源管理器核心部分,负责为分配给Cortex-M的外设解析设备树,并负责与远程处理器ResourceManager交换消息。
rproc_srm_dev: 设备驱动程序,用于保留和配置分配给协处理器的外设所需的系统资源。 在设备树中声明的每个外围设备都会创建一个驱动程序实例。
remoteproc: 请参考Linux remoteproc 框架文档。
rpmsg: 请参考Linux RPMsg 框架文档。
STM32 IPCC: Linux中IPCC的设备驱动。

  • Cortex-M 组件:

HAL_XXX: 负责外围XXX的HAL驱动程序。
HAL_IPCC: 负责IPCC内部外围设备的HAL驱动程序。
OpenAMP: 实现RPMsg服务的库。 请参阅OpenAMP文档。
ResourceManager: 实用程序,负责请求外设的可访问性和配置系统资源。

外设分配请求服务

外设分配一词用于标识将一组外设分配给运行时上下文的操作。 该服务依赖于:

  • ETZPC内部外设,用于控制总线防火墙以保护和/或MCU隔离某些外设(例如I2Cn或USARTn):- 无法从非安全环境(Linux,M4固件)访问安全外围设备(总线错误)。

    • 不能从Cortex-A MPU访问Cortex-M MCU隔离的外围设备(总线错误)ET-ZPC内部外围设备是在引导阶段由TF-A配置的。

  • 外设分配请求服务:一种用于确保外围设备可以被上下文访问的机制。

 

总览

image

  • Cortex-A 组件:

stm32 driver XXX: 负责外围设备XXX的Linux驱动程序,由于Cortex-M使用外围设备,因此必须禁用它。
stm32 driver YYY: 负责外围设备YYY的Linux驱动程序,由于Cortex-A使用了外围设备,因此必须启用它
Device tree: 请参阅Linux内核设备树配置

  • Cortex-M 组件:

HAL_XXX: 负责外设XXX的HAL驱动程序。
ResourceManager: 实用程序实现外设分配请求服务。 负责请求外围设备的可访问性并重新配置系统资源。

  • HW 组件:

ETZPC: 总线防火墙的保护控制器(请参阅ETZPC内部外围设备)。

系统资源配置集服务

This service is dedicated to peripheral assigned to the Cortex-M context. It is mainly managed on the Cortex-A by Linux. A remote processor system resource manager (rproc_srm) permits the assignment and configuration of the system resources of a peripheral assigned to the Cortex-M coprocessor.

总览
image

  • Cortex-A 组件:

rproc_srm_core: 系统资源管理器核心部分,负责解析其设备树节点把外设分配给Cortex-M。
rproc_srm_dev: 设备驱动程序,用于保留和配置分配给协处理器的外设所需的系统资源。 在设备树资源管理器节点中声明的每个外围设备都会创建一个驱动程序实例。
remoteproc: 在加载Cortex-M固件之前负责探测资源管理器。 请参阅Linux remoteproc框架小节。

  • Cortex-M 组件:

HAL_RCC: HAL驱动程序,负责复位和时钟控制(RCC)外设。
HAL_X: 外设X的HAL驱动实现。
HAL_..._MSP: 外设系统级初始化用户回调。

作者:SteveChen  创建时间:2024-09-18 14:31
最后编辑:SteveChen  更新时间:2024-09-18 14:33
上一篇:
下一篇: