RT-Thread SMP启动流程

电子说

1.3w人已加入

描述

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 简单测试成功。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分