; enable-method = "spin-table" ; cpu-release-addr = 0 x1 0 x0000fff8 >; }; spin-table方式的多核启动方式,顾名思义在于自旋,主处理器和从处理器上电都会启动,主处理器执行uboot畅通无阻,从处理器在spin_table_secondary_jump处wfe睡眠,主处理器通过修改设备树的cpu节点的cpu-release-addr属性为spin_table_cpu_release_addr,这是从处理器的释" />
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

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

3天内不再提示

使用自旋表启动的平台设备树cpu节点介绍

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

补充一下一个使用自旋表作为启动方式的平台设备树cpu节点:

arch/arm64/boot/dts/xxx.dtsi:

   cpu@0 {
                        device_type = "cpu";
                        compatible = "arm,armv8";
                        reg = < 0x0 0x000 >;
                        enable-method = "spin-table";
                        cpu-release-addr = < 0x1 0x0000fff8 >;
                };

spin-table方式的多核启动方式,顾名思义在于自旋,主处理器和从处理器上电都会启动,主处理器执行uboot畅通无阻,从处理器在spin_table_secondary_jump处wfe睡眠,主处理器通过修改设备树的cpu节点的cpu-release-addr属性为spin_table_cpu_release_addr,这是从处理器的释放地址所在的地方。

主处理器进入内核后,会通过smp_prepare_cpus函数调用spin-table 对应的cpu操作集的cpu_prepare方法从而在smp_spin_table_cpu_prepare函数中设置从处理器的释放地址为secondary_holding_pen这个内核函数,然后通过sev指令唤醒从处理器,从处理器继续从secondary_holding_pen开始执行(从处理器来到了内核的世界),发现secondary_holding_pen_release不是自己的处理编号,然后通过wfe继续睡眠。

当主处理器完成了大多数的内核组件的初始化之后,调用smp_init来来开始真正的启动从处理器,最终调用spin-table 对应的cpu操作集的cpu_boot方法从而在smp_spin_table_cpu_boot将需要启动的处理器的编号写入secondary_holding_pen_release中,然后再次sev指令唤醒从处理器,从处理器得以继续执行(设置自己异常向量表,初始化mmu等)。

最终在idle线程中执行wfi睡眠。其他从处理器也是同样的方式启动起来,同样最后进入各种idle进程执行wfi睡眠,主处理器继续往下进行内核初始化,直到启动init进程,后面多个处理器都被启动起来,都可以调度进程,多进程还会被均衡到多核。

问题

  • 1、 而启动流程中哪个cpu作为primary cpu可以任意指定?primary cpu如何任意指定的?

启动的汇编代码中会通过cpu的affinity值获取当前cpu的id,然后将自身cpu id与指定cpu id进行比较,以确定当前cpu是否是primary cpu

  • 2、cpu hotplug对于spintable是必须的吗?

spintable启动方式不支持cpu hotplug,只是在secondary 启动时复用了hotplug相同的流程,这部分代码默认是会被编译到内核中的


但是spin-table方式非常简单,但其只能被用于secondary cpu启动,功能比较单一。

随着aarch64架构电源管理需求的增加(如cpu热插拔、cpu idle等),arm设计了一套标准的电源管理接口协议psci。

该协议可以支持所有cpu相关的电源管理接口,而且由于电源相关操作是系统的关键功能,为了防止其被攻击,该协议将底层相关的实现都放到了secure空间,从而可提高系统的安全性。

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

    关注

    68

    文章

    19286

    浏览量

    229821
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10863

    浏览量

    211751
  • SMP
    SMP
    +关注

    关注

    0

    文章

    74

    浏览量

    19664
  • 设备树
    +关注

    关注

    0

    文章

    38

    浏览量

    3123
收藏 人收藏

    评论

    相关推荐

    安卓(android)6.0高通平台下设备专题视频讲解【全国独家+设备视频教程+绝顶视频】

    安卓(android)6.0高通平台下设备专题视频讲解【全国独家+设备视频教程+绝顶视频】hi,大家好,我是aiku,又和大家见面了,我最近录制了全国只有一家视频讲解安卓(andr
    发表于 10-06 22:55

    Linux 设备详解

    的外设硬件接到哪里或是那个平台,其驱动代码逻辑并不需要改动,而仅仅需要改变下设备信息,主要的就是I/O地址和中断号。说了这么半天,跟引入设备有什么关系呢?华清教学使用的开发板(A8/
    发表于 10-19 15:53

    Linux 设备详解

    的外设硬件接到哪里或是那个平台,其驱动代码逻辑并不需要改动,而仅仅需要改变下设备信息,主要的就是I/O地址和中断号。说了这么半天,跟引入设备有什么关系呢?华清教学使用的开发板(A8/
    发表于 11-02 13:46

    Linux 设备详解

    的外设硬件接到哪里或是那个平台,其驱动代码逻辑并不需要改动,而仅仅需要改变下设备信息,主要的就是I/O地址和中断号。说了这么半天,跟引入设备有什么关系呢?华清教学使用的开发板(A8/
    发表于 11-29 17:58

    设备(Device Tree)

    设备介绍设备是一个描述设备硬件资源的文件,该文件是由
    发表于 03-14 14:36

    qualcomm平台的Little Kernel启动流程

    的header中检索到)。载入设备到TAGS_ADDR(从boot image的header中检索到),然后更新设备;3)把命令行(cmd line)作为
    发表于 09-25 15:42

    迅为iMX6UL开发板驱动-设备节点名称和子节点获取设备数据

    文档介绍迅为IMX6UL开发板设备通过节点名称获取设备数据,以及获取子
    发表于 06-11 11:35

    怎样去配置设备的leds节点

    配置设备leds节点,sys文件系统中没有出现相应设备文件,引脚没有查出有重复定义的?怎样去配置设备
    发表于 01-07 06:15

    设备中GIC中断控制器节点

    文章目录一、回顾二、设备中GIC中断控制器节点三、外设中断控制器节点三、其他设备使用中断节点1
    发表于 01-10 07:37

    如何在设备文件里面添加心跳灯节点

    如何在设备文件里面添加心跳灯节点呢?有哪些步骤?
    发表于 03-04 06:44

    ARM Linux设备的组成和结构

    包含子节点。所谓属性,其实就是成对出现的名称和值。在设备中,可描述的信息包括(原先这些信息大多被硬编码在内核中):·CPU 的数量和类别。· 内存基地址和大小。· 总线和桥。· 外设
    发表于 05-11 16:28

    arm linux设备都包括哪些基本信息呢

    设备是由一系列被命名的节点(Node)和属性(Property)组成。节点本身可包含子节点设备
    发表于 05-24 16:04

    【米尔-TIAM62开发板-接替335x-试用评测】+(三)手把手创建Uboot设备与内核设备实战

    .dts文件编译为.dtb文件,然后将.dtb文件用于系统启动过程中的设备信息获取。 深入学习特定硬件平台设备:针对你正在使用的硬件
    发表于 11-28 09:54

    你不知道的Linux设备--memory&chosen节点

    节点那一节我们说过,最简单的设备也必须包含cpus节点和memory节点。memory节点
    发表于 05-05 11:14 3630次阅读

    Petalinux工程中设备介绍

    设备是 Petalinux kernel 的关键组件,接下来以 2020.1 版本为例,为大家介绍一下在Xilinx Petalinux 工程中的设备
    的头像 发表于 02-20 16:32 6940次阅读
    Petalinux工程中<b class='flag-5'>设备</b><b class='flag-5'>树</b>的<b class='flag-5'>介绍</b>