【STM32MP157 异核通信框架学习篇】(1)SMP和AMP架构
文章目录
- 1 概要
- 2 SMP 和 AMP架构
- 2.1 同构和异构
- 2.2 SMP 和 AMP
- 3 总结
1 概要
使用正点原子的stm32mp157mini进行RPMSG多核通信试验。
硬件:STM32MP157
软件:STM32CubeIDE / STM32CubeMX
本章节将会介绍OpenAMP的相关知识框架。
2 SMP 和 AMP架构
1971 年, Intel 公司设计出一款4位的4004微处理器,它是第一款商用处理器,很快Intel又推出了8位的8008处理器和16位的8086处理器,那时候的4004芯片、8008芯片和8086芯片上都只有一个核(单核 CPU),随着需求的提高和功耗问题,慢慢的发现一个核不够用了,于是就在一个芯片上建造两个或者多个核,进而转向多核处理器发展了。多核CPU具有更高的计算密度和更强的并行处理能力,多核化趋势改变了IT计算的面貌。
2.1 同构和异构
从硬件的角度来分,多核处理器可以分为同构和异构,如下图所示3.1.1.1所示。

- 同构
如果所有的CPU或核心的架构都一样,那么称为同构。例如,三星的Exynos4210、飞思卡尔的I.MX6D以及TI的OMAP4460,它们有两个架构相同的Cortex-A9内核,都属于同构。 - 异构
如果所有CPU或核心的架构有不一样的,那么就称为异构。例如,ST推出的STM32MP1
57,有两个Cortex-A7 核和一个 Cortex-M4 核,Xilinx 的 ZYNQ7000 系列,有两个 Cortex-A9
核和FPGA,TI的达芬奇系列TMS320DM8127有一个DSP C674x核和一个Cortex-A8核,这
些处理器有不一样结构的核,所以都属于异构。
2.2 SMP 和 AMP
从软件的角度来分,多核处理器平台的操作系统体系有:SMP(Symmetric multiprocessing,对称多处理)结构、AMP(Asymmetric Multi-Processing,非对称多处理)结构和 BMP(bound multi-processing,边界多处理)结构。
-
对称多处理结构(SMP)
SMP 结构是指只有一个操作系统(OS)实例运行在多个CPU上,一个OS同等的管理各个内核,为各个内核分配工作负载,系统中所有的内核平等地访问内存资源和外设资源。因为异构处理器的各个内核结构不同,如果一个OS去管理不同的内核,这种情况实现起来比较复杂,所以一般运行在SMP结构下的通常都是同构处理器。Windows、Linux和Vxworks等多种操作系统都支持SMP结构。如下图3.1.2.1 所示,在 SMP 结构下,一个OS负责协调两个处理器,两个处理器共享内
存,每个核心运行的应用程序(APP1和APP2)的地址是相同的,通过MMU(Memory Mana
gement Unit,内存管理单元)把它们映射到主存的不同位置上。

-
非对称多处理结构(AMP)
AMP结构是指每个内核运行自己的OS或同一OS的独立实例,或者说不运行OS,如运行裸机,每个内核有自己独立的内存空间,也可以和其它内核共享部分内存空间,每个核心相对独立地运行不同的任务,但是有一个核心为主要核心,它负责控制其它核心以及整个系统的运行,而其它核心负责“配合”主核心来完成特定的任务。这里,主核心我们就称为主处理器,其它核心我们就称为协处理器或者远程处理器。这种结构最大的特点在于各个操作系统都有本身独占的资源,其它资源由用户来指定多个系统共享或者专门分配给某一个系统来使用,系统之间可以通过共享的内存来完成通信。如下图3.1.2.2是STM32MP157的资源简图,STM32MP157的Cortex-A7内核可以运行Linux操作系统,Cortex-M4 内核可以运行裸机或者其它RTOS(实时操作系统),RTOS如OneOS,FreeRTOS、RT-Thread 和 UCOS 等。Cortex-A7和Cortex-M4 都有自己独占的资源,也有共享的资源,这些资源由用户来分配,双核之间可通过共享内存来进行通信。

在AMP系统设计中,一般需要解决两个问题:
(1)生命周期管理(内核启动顺序)问题;
(2)内核间通信问题。
配置 AMP 系统最好的方法是使用一个既满足控制又满足通信要求的统一框架,而OpenAMP 就是当前多核架构使用的最多的标准框架,许多芯片供应商都提供了 OpenAMP 的实现。基于OpenAMP,生命周期管理是通过Remoteproc来实现的,内核间通信是通过RPMsg来管理的,关于两者的实现方式是我们后面章节重点介绍的内容。 -
边界多处理结构(BMP)
BMP和SMP类似,也是由一个操作系统同时管理所有CPU内核,但是开发者可以指定某个任务在某个核中执行,这里就不再详细介绍BMP结构了。前面讲解的AMP和SMP有着明显的差别,但两者之间也有着联系,例如,在一个芯片上,可能多个架构相同的内核被配置为一个SMP子系统,而此时另外的内核跑的是其它的操作系统,从整体来看就是AMP结构了,从逻辑上来分,这个SMP子系统看起来像是一个单核,可以看做包含在这个大的AMP系统中。例如STM32MP157的两个Cortex-A7内核跑的是同一个Linux 操作系统,这两个Cortex-A7内核就可以看做是一个SMP子系统,而Cortex-M4内核可以跑裸机或者RTOS,那么STM32MP157这款芯片从整体上看就是AMP结构了。
3 总结
本章节介绍了异核通信框架中的SMP和AMP架构,下一章节将会介绍IPCC通信框架。
参考文献:
【1】【正点原子】STM32MP1异核通信(基于CubeIDE) V1.1
