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

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

3天内不再提示

如何在内核中启动secondary cpu

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

启动secondary cpu

内核在启动secondary cpu之前当然需要为其准备好执行环境,因为内核中cpu最终都将由调度器管理,故此时调度子系统应该要初始化完成。

同时cpu启动完成转交给调度器之前,并没有实际的业务进程,而我们知道内核中cpu在空闲时会执行idle进程。因此,在其启动之前需要为每个cpu初始化一个idle进程。

另外,由于将一个cpu通过热插拔方式移除后,再次启动该cpu的流程,与secondary cpu的启动流程是相同的,因此内核复用了cpu hotplug框架用于启动secondary cpu。

而内核为每个cpu都分配了一个独立的hotplug线程,用于执行本cpu相关的热插拔流程。为此,内核通过以下流程执行secondary cpu启动操作:

图片

idle进程初始化

以下代码为每个非boot cpu分配一个idle进程

void __init idle_threads_init(void)
{
	…
	boot_cpu = smp_processor_id();
	for_each_possible_cpu(cpu) {                 (1if (cpu != boot_cpu)
			idle_init(cpu);              (2)
	}
}

(1)遍历系统中所有的possible cpu

(2)若该cpu为secondary cpu,则为其初始化一个idle进程

hotplug线程初始化

以下代码为每个cpu初始化一个hotplug线程

void __init cpuhp_threads_init(void)
{
	BUG_ON(smpboot_register_percpu_thread(&cpuhp_threads));
	kthread_unpark(this_cpu_read(cpuhp_state.thread));
}

其中线程的描述结构体定义如下:

static struct smp_hotplug_thread cpuhp_threads = {
	.store			= &cpuhp_state.thread,               (1)
	.create			= &cpuhp_create,                     (2)
	.thread_should_run	= cpuhp_should_run,                  (3)
	.thread_fn		= cpuhp_thread_fun,                  (4)
	.thread_comm		= "cpuhp/%u",                        (5)
	.selfparking		= true,                              (6)
}

(1)用于保存cpu上的task struct指针

(2)线程创建时调用的回调

(3)该回调用于获取线程是否需要退出标志

(4)cpu hotplug主函数,执行实际的hotplug操作

(5)该线程的线程名

(6)用于设置线程创建完成后,是否将其设置为park状态

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

    关注

    3

    文章

    1362

    浏览量

    40217
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10824

    浏览量

    211088
  • SMP
    SMP
    +关注

    关注

    0

    文章

    71

    浏览量

    19628
收藏 人收藏

    评论

    相关推荐

    如何使用dtb方式启动内核

    /boot/zImagebootz 0x82000000 - 0x88000000至此,Linux内核就能启动了。  (7)小结  从启动Log上分析,现在内核无法挂在根文件系统,在
    发表于 04-22 14:06

    何在eDesignSuite中将调节模式从Secondary更改为Primary?

    何在eDesignSuite中将调节模式从Secondary更改为Primary?我想设计一个低成本的85-265V AC到12V 0.2A DC隔离反激式转换器,使用Viper06和PSR
    发表于 07-09 08:55

    是否可以通过SPAEr320 CPU的USB启动机制启动Linux内核

    你好 是否可以通过SPAEr320 CPU的USB启动机制启动Linux内核? 如果是,可以使用哪些工具为可
    发表于 08-07 14:23

    何在内核中去读取文件的大小呢

    何在内核中去读取文件的大小呢?有什么方法吗?
    发表于 11-02 06:57

    I.MX8MM开发板Linux如何在内核添加驱动呢

    迅为I.MX8MM开发板编译驱动到内核,在平时的驱动开发,经常需要在内核配置某种功能,为了方便大家开发和学习,本小节讲解如何在内核
    发表于 08-29 17:46

    基于ARM体系的内核启动解析

    初始化内存位置。具有“ psci”启用方法的CPU应该保留在内核之外(即,在内存节点中描述给内核的内存区域之外,或者在内核
    发表于 09-14 12:02

    在内核启动时发现SPI驱动没有正确运行?

    在内核启动中发现这个打印信息[ 1.138240] spi_gpio spi4.15: gpio-miso property not found, switching to no-rx mode这是
    发表于 11-28 07:54

    CPU内核结构解析

    CPU内核结构解析  CPU内核主要分为两部分:运算器和控制器。   (一) 运算器   1、 算
    发表于 04-15 16:13 1531次阅读

    米尔科技改内核调整GPIO在内核启动阶段方案

    米尔用户在使用i.MX6UL/i.MX6ULL系列产品开发时,需要调整GPIO在内核启动阶段的状态,这怎么操作呢?
    的头像 发表于 11-26 16:31 2825次阅读
    米尔科技改<b class='flag-5'>内核</b>调整GPIO<b class='flag-5'>在内核</b><b class='flag-5'>启动</b>阶段方案

    程序是如何在 CPU 运行的(二)

    在上一篇文章《程序是如何在 CPU 运行的(一)》笔者讲述了程序中一条一条指令以及一条一条数据是如何在
    发表于 02-07 11:10 1次下载
    程序是如<b class='flag-5'>何在</b> <b class='flag-5'>CPU</b> <b class='flag-5'>中</b>运行的(二)

    Linux内核启动流程(上)

    本文先讲解上篇,大家看到汇编不用担心看不懂,在内核启动阶段,没有特别复杂的流程,都是顺序执行,只需一句一句阅读代码即可。
    发表于 06-23 14:07 1592次阅读
    Linux<b class='flag-5'>内核</b><b class='flag-5'>启动</b>流程(上)

    secondary cpu初始化状态设置

    ,用于填写secondary cpu的入口地址。 uboot负责将这块内存的地址写入devicetree,当内核初始化完成,需要启动
    的头像 发表于 12-05 15:27 1001次阅读
    <b class='flag-5'>secondary</b> <b class='flag-5'>cpu</b>初始化状态设置

    SMP多核启动cpu操作函数

    cpu操作函数 cpu_ops函数由bringup_cpu调用,以触发secondary cpu启动
    的头像 发表于 12-05 16:04 701次阅读
    SMP多核<b class='flag-5'>启动</b><b class='flag-5'>cpu</b>操作函数

    secondary cpu执行流程介绍

    secondary cpu执行流程 aarch64架构secondary cpu内核入口函数为seco
    的头像 发表于 12-05 16:12 784次阅读
    <b class='flag-5'>secondary</b> <b class='flag-5'>cpu</b>执行流程介绍

    SMP多核secondary cpu启动流程

    secondary cpu启动 由于psci方式启动secondary cpu的流程,除了其所执
    的头像 发表于 12-05 17:41 775次阅读
    SMP多核<b class='flag-5'>secondary</b> <b class='flag-5'>cpu</b><b class='flag-5'>启动</b>流程