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

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

3天内不再提示

SMP多核启动cpu操作函数

麦辣鸡腿堡 来源:TrustZone 作者:Hcoco 2023-12-05 16:04 次阅读

cpu操作函数

cpu_ops函数由bringup_cpu调用,以触发secondary cpu启动。它是根据设备树中解析出的enable-method属性确定的。

int __init init_cpu_ops(int cpu)
{
	const char *enable_method = cpu_read_enable_method(cpu);   (1)
			…
	cpu_ops[cpu] = cpu_get_ops(enable_method);                 (2)
		…
}

(1)获取该cpu enable-method属性的值

(2)根据其enable-method获取其对应的cpu_ops回调

其中spin-table启动方式的回调如下:

const struct cpu_operations smp_spin_table_ops = {
	.name		= "spin-table",
	.cpu_init	= smp_spin_table_cpu_init,
	.cpu_prepare	= smp_spin_table_cpu_prepare,
	.cpu_boot	= smp_spin_table_cpu_boot,
}

触发secondary cpu启动

以上流程都准备完成后,触发secondary cpu启动就非常简单了。只需调用其cpu_ops回调函数,向其对应的spin_table_cpu_release_addr位置写入secondary cpu入口地址即可。以下为其调用流程:

图片

其中smp_spin_table_cpu_boot的实现如下:

static int smp_spin_table_cpu_boot(unsigned int cpu)
{
	write_pen_release(cpu_logical_map(cpu));    (1sev();                                      (2return 0;
}

(1)向给定地址写入内核entry

(2)通过sev指令唤醒secondary cpu启动

此后,该线程将等待cpu启动完成,并在完成后将其设置为online状态

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

    关注

    68

    文章

    10442

    浏览量

    206557
  • SMP
    SMP
    +关注

    关注

    0

    文章

    68

    浏览量

    19450
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61309
  • 设备树
    +关注

    关注

    0

    文章

    35

    浏览量

    3045
收藏 人收藏

    评论

    相关推荐

    AliOS Things SMP系统及其在esp32上实现示例

    对应CPUSMP功能:2.1 核启动加载目前的启动顺序是,系统默认开始启动0核,在0核的主任务入口内
    发表于 05-15 12:45

    记录学习ARM Linux的多核启动过程

    CONFIG_HOTPLUG_CPU.cpu_die = vexpress_cpu_die,#endif};2.2.多核启动多核
    发表于 05-25 10:43

    ARM64 SMP多核启动相关资料推荐(下)

    处理器的启动,仅此而已,所以,现在社区几乎很少使用spin-table这种方式,取而代之的是psci,他不仅可以启动从处理器,还可以关闭,挂起等其他核操作,现在基本上arm64平台上使用多核
    发表于 06-06 17:11

    介绍在ARM64架构下启动多核的两种方式

    1、ARM64的多核启动流程分析工作中遇到的多核 ARM CPU 越来越多,总结分享一些多核启动
    发表于 06-13 18:23

    基于raspi 3b上的SMP设计实现

    本帖主要描述raspi 3b上SMP实现,该实现主要基于现有raspi2 bsp代码基础上添加相关SMP支持,所需支持的功能主要包括:多核启动多核
    发表于 12-05 13:56

    RT-Thread SMP和AMP初体验简介

    ,所有CPU共享系统内存和外设资源。嵌入式领域除 SMP 外还有一种支持多核处理器芯片的操作系统体系结构,即 AMP。AMP(Asymmetric Multi-processing)
    发表于 02-03 14:33

    RT-Thread框架下的SMP支持

    支持 SMP,在对称多核上可以通过使能 RT_USING_SMP 来开启。系统上电后,各 CPU启动流程如下图所示:每个次级
    发表于 02-13 15:02

    Linux在SMP系统上的移植研究

    基于自主开发以双核嵌入式CPU EM8301为处理核心的嵌入式应用的目的,针对双核CPU芯片的系统结构和Linux内核的特性,通过研究嵌入式Linux操作系统在SMP系统上的移植,探讨
    发表于 11-14 16:09 11次下载
    Linux在<b class='flag-5'>SMP</b>系统上的移植研究

    CPU 拓扑中的SMP架构

    CPU 拓扑用来表示 CPU 在硬件层面的组合方式,本文主要讲解 CPU 拓扑中的 SMP(Symmetric Multi-Processor,对称多处理器系统)架构,
    的头像 发表于 08-29 11:02 3514次阅读

    ARM64 SMP多核启动(上)—spin-table

    一般嵌入式系统使用的都是对称多处理器(Symmetric Multi-Processor, SMP)系统,包含了多个cpu, 这几个cpu都是相同的处理器,如4核Contex-A53。
    发表于 06-09 14:28 653次阅读
    ARM64 <b class='flag-5'>SMP</b><b class='flag-5'>多核</b><b class='flag-5'>启动</b>(上)—spin-table

    ARM64 SMP多核启动(下)—PSCI

    上面说了pin-table的多核启动方式,看似很繁琐,实际上并不复杂,无外乎主处理器唤醒从处理器到指定地址上去执行指令
    发表于 06-09 14:31 460次阅读
    ARM64 <b class='flag-5'>SMP</b><b class='flag-5'>多核</b><b class='flag-5'>启动</b>(下)—PSCI

    多核CPU启动方式

    工作中遇到的多核 ARM CPU 越来越多,总结分享一些多核启动的知识,希望能帮助更多小伙伴。 在 ARM64 架构下如果想要启动
    的头像 发表于 06-22 10:04 1146次阅读

    SMP是什么?多核芯片(SMP)的启动方法

    SMP 英文为Symmetric Multi-Processing ,是对称多处理结构的简称,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构,一个服务器系统可以同时运行多个处理器,并共享内
    的头像 发表于 07-26 09:26 8847次阅读
    <b class='flag-5'>SMP</b>是什么?<b class='flag-5'>多核</b>芯片(<b class='flag-5'>SMP</b>)的<b class='flag-5'>启动</b>方法

    SMP是什么 启动方式介绍

    ,一个服务器系统可以同时运行多个处理器,并共享内存和其他的主机资源。 CMP 英文为Chip multiprocessors,指的是单芯片多处理器,也指多核心。其思想是将大规模并行处理器中的SMP集成到同一芯片内,各个处理器并行执行不同的进程。 (1)
    的头像 发表于 12-05 15:23 990次阅读

    SMP多核secondary cpu启动流程

    secondary cpu启动 由于psci方式启动secondary cpu的流程,除了其所执行的cpu_ops不同之外,其它流程与spi
    的头像 发表于 12-05 17:41 278次阅读
    <b class='flag-5'>SMP</b><b class='flag-5'>多核</b>secondary <b class='flag-5'>cpu</b><b class='flag-5'>启动</b>流程