RT-Thread SMP 初体验
最近在学习 RT-Thread 过程中发现了还有 SMP 功能,主要是用于多核的系统,并行运行提升性能。
SMP 和 AMP 简介
SMP(Symmetric Multi-processing) :对称多处理,在一个计算机上汇集了一组处理器 (多 CPU), 各 CPU 之间共享内存子系统以及总线结构。SMP模式系统中所有CPU的地位相同,共同运行一个操作系统实例,所有CPU共享系统内存和外设资源。
嵌入式领域除 SMP 外还有一种支持多核处理器芯片的操作系统体系结构,即 AMP。
AMP(Asymmetric Multi-processing) : 非对称多处理,AMP模式的RTOS在各个CPU上均运行一个操作系统实例(这些操作实例不一定完全相同),各个操作系统拥有自己专用的内存,相互之间通过访问受限的共享内存进行通信。
RT-Thread SMP 启动流程
首先是主 CPU(一下简称 CPU0 )进入到 RT-Thread 的初始化,其他的 CPU 需要通过 CPU0 唤醒,随后才进行各自的初始化( CPU0 只负责唤醒,次级 CPU 自身硬件部分的初始化不能由 CPU0 完成),流程图如下
CPU0 和其余 CPU 的启动流程都如下图所示,( CPU0 完成初始后,执行 main 线程之前唤醒其余 CPU )
想要在源码中看到一些具体的实现,可以在工程中搜索 RT_USING_SMP
简单实验
qemu-vexpress-a9
RT-Thread 中 qemu-vexpress-a9 的 BSP 中已经支持了 SMP ,没有实物也可以通过 qemu 试一试。
首先在进入到 bsp/qemu-vexpress-a9 目录,进入 menuconfig ,使能 SMP ,并且将 CPU 的个数设置为实际值(4个);
可以在次 CPU 的线程中添加一些简单的串口打印功能,方便观察现象;
env 中运行命令 scons 构建项目;
输入命令 ./qemu-nographic.sh 即可运行 qemu ,可以观察到 SMP 已经成功的跑起来了。
raspi3-32
我手上还有一块树莓派也是多核的,RT-Thread 官方的 BSP 中也支持了这块板子的 SMP 功能。
进入 menuconfig 进行同样的配置;
env 中运行命令 scons 构建项目;
将生成的 kernel7.img 文件拷贝到树莓派 SD 卡的 boot 目录中即可;
树莓派上电前先使用 USB 转 TTL 模块连接到电脑;
启动树莓派后,串口成功显示相关信息, SMP 简单测试成功。
原作者:螺丝松掉的人
|