0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RT-Thread SMP启动流程

冬至子 来源:螺丝松掉的人 作者:螺丝松掉的人 2023-08-03 15:10 次阅读

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 完成),流程图如下

1.jpg
1.jpg

CPU0 和其余 CPU 的启动流程都如下图所示,( CPU0 完成初始后,执行 main 线程之前唤醒其余 CPU )

1.jpg

想要在源码中看到一些具体的实现,可以在工程中搜索 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 简单测试成功。

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

    关注

    68

    文章

    19259

    浏览量

    229651
  • TTL电路
    +关注

    关注

    2

    文章

    65

    浏览量

    15071
  • SMP
    SMP
    +关注

    关注

    0

    文章

    74

    浏览量

    19654
  • RT-Thread
    +关注

    关注

    31

    文章

    1285

    浏览量

    40081
  • 树莓派
    +关注

    关注

    116

    文章

    1706

    浏览量

    105607
收藏 人收藏

    评论

    相关推荐

    RT-Thread记录(三、RT-Thread线程操作函数)

    讲完了RT-Thread开发环境,启动流程启动以后当然是开始跑线程了,那么自然我们得学会如何创建线程以及线程的有关操作。
    的头像 发表于 06-20 00:31 6806次阅读
    <b class='flag-5'>RT-Thread</b>记录(三、<b class='flag-5'>RT-Thread</b>线程操作函数)

    RT-Thread记录(二、RT-Thread内核启动流程

    在前面我们RT-Thread Studio工程基础之上讲一讲RT-Thread内核启动流程.
    的头像 发表于 06-20 00:30 5028次阅读
    <b class='flag-5'>RT-Thread</b>记录(二、<b class='flag-5'>RT-Thread</b>内核<b class='flag-5'>启动</b><b class='flag-5'>流程</b>)

    RT-Thread SMP介绍与移植资料分享

    1、如何移植 RT-Thread SMP系统上电后,每个 CPU 都会在 ROM 中的代码控制下独自运行,但是只有主处理器(以下简称 CPU0 )跳转到 RT-Thread 的初始化入口处,而其
    发表于 04-27 14:38

    RT-Thread快速入门之了解内核启动流程

    1、了解RT-Thread内核的启动流程  内核是操作系统最基础也是最重要的部分。从本文开始进入 RT-Thread 内核相关知识的学习。  首先了解内核的基础知识,对
    发表于 09-05 17:01

    RT-Thread SMP和AMP初体验简介

    多处理,AMP模式的RTOS在各个CPU上均运行一个操作系统实例(这些操作实例不一定完全相同),各个操作系统拥有自己专用的内存,相互之间通过访问受限的共享内存进行通信。RT-Thread SMP 启动
    发表于 02-03 14:33

    RT-Thread框架下的SMP支持

    RT-Thread 的调度流程和中断机制有一定的学习和理解,这部分可以参考 RT-Thread 文档中心,最好能配合着理解源码的实现。我对 RT-Thread 框架下的
    发表于 02-13 15:02

    RT-Thread编程指南

    RT-Thread编程指南——RT-Thread开发组(2015-03-31)。RT-Thread做为国内有较大影响力的开源实时操作系统,本文是RT-Thread实时操作系统的编程指南
    发表于 11-26 16:06 0次下载

    rt-thread 优化系列(六)启动流程重构

    去年此时,笔者刚接触 rt-thread 的时候,被它的初始化过程深深折服了。第一次打开一个 rt-thread 的项目,竟然没找到多线程在哪儿初始化的,"main" 函数里没有!
    的头像 发表于 07-04 15:30 1742次阅读
    <b class='flag-5'>rt-thread</b> 优化系列(六)<b class='flag-5'>启动</b><b class='flag-5'>流程</b>重构

    RT-Thread学习笔记 RT-Thread的架构概述

    RT-Thread 简介 作为一名 RTOS 的初学者,也许你对 RT-Thread 还比较陌生。然而,随着你的深入接触,你会逐渐发现 RT-Thread 的魅力和它相较于其他同类型 RTOS
    的头像 发表于 07-09 11:27 4545次阅读
    <b class='flag-5'>RT-Thread</b>学习笔记 <b class='flag-5'>RT-Thread</b>的架构概述

    RT-Thread文档_RT-Thread 简介

    RT-Thread文档_RT-Thread 简介
    发表于 02-22 18:22 5次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> 简介

    RT-Thread文档_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文档_RT-Thread 潘多拉 STM32L475 上手指南
    发表于 02-22 18:23 9次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> 潘多拉 STM32L475 上手指南

    RT-Thread文档_RT-Thread SMP 介绍与移植

    RT-Thread文档_RT-Thread SMP 介绍与移植
    发表于 02-22 18:31 9次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> <b class='flag-5'>SMP</b> 介绍与移植

    基于RT-Thread Studio学习

    前期准备:从官网下载 RT-Thread Studio,弄个账号登陆,开启rt-thread学习之旅。
    的头像 发表于 05-15 11:00 3930次阅读
    基于<b class='flag-5'>RT-Thread</b> Studio学习

    RT-Thread启动流程RT-Thread如何支持不同开发板?

    一个开发板上的RT-Thread启动流程可能是首先从bsp​当中链接脚本指定的startup_xxx.S​中的入口函数(ENTRY)或者复位异常处理函数(ResetHandler)开始运行,这部分我们在讲​bsp​支持时会详细
    的头像 发表于 08-10 15:29 1589次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>启动</b><b class='flag-5'>流程</b>?<b class='flag-5'>RT-Thread</b>如何支持不同开发板?

    RT-Thread框架下的SMP支持

    使其支持 RT-Thread 框架下的 SMP,最近就一直在研究 SMP,并在 Raspberry-Pico 上做了一些实验。
    的头像 发表于 10-11 10:34 1126次阅读
    <b class='flag-5'>RT-Thread</b>框架下的<b class='flag-5'>SMP</b>支持