ARM多核处理器启动过程分析

发布者:幸福时光最新更新时间:2016-07-25 来源: eefocus关键字:ARM  多核处理器  启动过程 手机看文章 扫描二维码
随时随地手机看文章

 

 

 

说明:

该流程图按照代码执行时间顺序划分为4部分:

1.     Bootloader在图片上半部,最先启动;

2.     Kernel在图片下半部,由bootloader引导启动;

3.CPU0执行流程在图片左半部,bootloader代码会进行判断,先行启动CPU0;

4.  Secondary CPUs在图片右半部,由CPU唤醒

 

具体启动流程如下:

1.     在bootloader启动时,会判断执行代码的是否为CPU0,如果不是,则执行wfe等待CPU0发出sev指令唤醒。如果是CPU0,则继续进行初始化工作。

 

         mrs  x4,mpidr_el1

         tst    x4,#15             //testwether the current cpu is CPU0, ie. mpidr_el1=15

         b.eq 2f

/*

 * Secondary CPUs

 */

1: wfe

ldr x4, mbox               

cbz x4, 1b        //if x4==0(ie. The value in address of mbox is 0) dead loop,or jump to x4

br x4 // branch to thegiven address

 

2:……        //UART initialisation (38400 8N1)

 

以上mbox的地址在Makefile中写定,是0x8000fff8,该地址处初始状态内容为全0。上面代码判断,若mbox地址处内容为0,则死循环;如果不为0则直接跳转到该地址所包含内容处执行。

 

2.     在dts中,对cpu-release-addr进行赋值,将其地址设为0x8000fff8。即只要往该地址写入相应的值,例如地址A,并且发送sev指令,就能将次级CPU唤醒,并跳转到A地址处执行。

cpu-release-addr = <0x0 0x8000fff8>; 

 

3. 内核中smp_prepare_cpus 函数对0x8000fff8地址处内容进行了赋值,其值为函数secondary_holding_pen 的地址:

release_addr = __va(cpu_release_addr[cpu]);

release_addr[0] = (void*)__pa(secondary_holding_pen);//write function address to mbox

 

以上代码执行完后发送sev指令,唤醒其他次级CPU执行secondary_holding_pen函数:

/*

 * Send an event to wake up the secondaries.

 */

sev();

 

4. secondary cpu 执行secondary_holding_pen()函数时都会去判断当前CPU的ID,并与secondary_holding_pen_release变量做比对,如果相等,则执行进一步初始化,否则执行WFE等待;

secondary_holding_pen_release变量的修改过程由CPU0调用smp_init()函数进行。该函数首先为相应CPU绑定一个idle线程,然后修改secondary_holding_pen_release的值(其值即CPU0欲唤醒的CPU的ID),最后发送sev指令,唤醒相应CPU执行idle线程。

 

secondary_holding_pen()函数代码如下:

         /*

          * This provides a"holding pen" for platforms to hold all secondary

          * cores are helduntil we're ready for them to initialise.

          */

ENTRY(secondary_holding_pen)

         bl      el2_setup                          // Drop to EL1

         mrs  x0, mpidr_el1

         and  x0, x0, #15                        // CPU number

         adr   x1, 1b

         ldp   x2, x3, [x1]

         sub   x1, x1, x2

         add  x3, x3, x1

pen: ldr    x4, [x3]

         cmp x4,x0

         b.eq secondary_startup

         wfe

         b       pen

ENDPROC(secondary_holding_pen)

 

 

附录:

内核中启动secondary cpus函数调用过程大致如下:

start_kernel èrest_initèkernel_inièkernel_init_freeable èsmp_init()  kernel/smp.c line 649, 由CPU0激活剩余的处理器

cpu_upè_cpu_up()è__cpu_up ()èboot_secondary ()èwrite_pen_release该函数中有一句:secondary_holding_pen_release = val; 然后发送sev指令,激活剩余处理器。

关键字:ARM  多核处理器  启动过程 引用地址:ARM多核处理器启动过程分析

上一篇:ARM位操作和伪指令介绍
下一篇:对于ARM加载时、运行时地址的理解

推荐阅读最新更新时间:2024-03-16 15:01

第1天-ARM汇编指令ADD/SUB/MUL
ADD : 加法 (Addition) ADD{条件}{S} , , dest = op_1 + op_2 ADD 将把两个操作数加起来,把结果放置到目的寄存器中。操作数 1 是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即值: ADD R0, R1, R2 ; R0 = R1 + R2 ADD R0, R1, #256 ; R0 = R1 + 256 ADD R0, R2, R3,LSL#1 ; R0 = R2 + (R3 1) 加法可以在有符号和无符号数上进行。 ps:带进位的加法ADC SUB : 减法 (Subtraction) SUB{条件}{S} , , dest = op_1
[单片机]
arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf的区别
命名规则 交叉编译工具链的命名规则为:arch arch – 体系架构,如ARM,MIPS vendor – 工具链提供商 os – 目标操作系统 eabi – 嵌入式应用二进制接口(Embedded Application Binary Interface) 注意 没有vendor时,用none代替; 没有os支持时,也用none代替 同进没有vendor和os支持时,只用一个none代替,比如arm-none-eabi中的none表示既没有vendor也没有os支持。 根据对操作系统的支持与否,ARM GCC可分为支持和不支持操作系统,如 arm-none-eabi:这个是没有操作系统的,自然不可能
[单片机]
<font color='red'>arm</font>交叉编译器gnueabi、none-eabi、<font color='red'>arm</font>-eabi、gnueabihf的区别
expect 移植到ARM
一、环境介绍 1.1 宿主机 Ubuntu 1404 32 位 1.2 嵌入式平台 ATMEL AT91SAM9X25 1.3 交叉工具链 arm-none-linux-gnueabi TCL 与 Expect 源码下载地址 二、交叉编译 2.1 编译 TCL tar xvf tcl8.6.4-src.tar.gz cd tcl8.6.4/ cd unix/ export tcl_cv_type_64bit= long long export ac_cv_c_bigendian=no export tcl_cv_strtod_buggy=1 export ac_cv_func_strstr=yes expor
[单片机]
软银收购ARM 2018年7月前完成
   Softbank、ARM共同发出声明,确认将由Sofbank以240亿英镑价格收购ARM,预计最快将在2018年7月13日以前完成此项收购案。 ARM释出更具体说明内容,强调此次收购将促使Softbank、ARM加速双方在科技技术发展,同时也确认Softbank将以每股17英镑现金收购ARM,同时也预计在未来5年内于英国地区新增1500个工作职缺,海外市场也计画增加更多工作机会。 根据Softbank、ARM共同释出声明,确定将自2017年7月15日起由Softbank以240亿英镑收购ARM,预计最快将在2018年7月13日以前完成此笔收购。而根据Softbank说明表示,未来将协助ARM持续推动全球晶片事业发
[手机便携]
定制自己的Windows CE 5.0 ARM中文模拟器
一、生成OS 1. 安装Windows CE 5.0(记得CPU类型里把ARMV4I选上)装完之后装 DeviceEmulatorBSP.msi ,这是ARMV4I模拟器的BSP。 2. 运行Platform Builder,新建一个Platform,给你的新Platform取一个名字,我这里取为MyCEEmu。BSP选择Microsoft DeviceEmulator:ARMV4I,Design Template选择Mobile Handheld,Application & Media随你选,Networking & Communications只选择Local Area Network(LAN)- Wired Loca
[嵌入式]
基于ARM的微波频率自动测量系统设计
  1.引言   通常微波所指的是分米波、厘米波和毫米波。关于其频率范围,一种说法是:   300MHz ~ 300GHz(1MHz =106Hz,1GHz =109 )相应的自由空间中的波长约为1m~1mm.   微波技术的兴起和蓬勃发展,使得国内大多数高校都开设微波技术课程。但还存在以下问题:测量时,由手工逐点移动探头并记录各点读数,然后手工计算实验结果并绘图。测量项目单一、精度低、测量周期长,操作也较为繁琐。本文主要研究一种实用的基于Labview的速调管微波频率自动测量系统。   2.系统整体结构   系统的整体结构如图2-1所示。由下位机跟上位机构成。微处理器通过驱动电路来控制步进电机,带动谐振式频率计的
[测试测量]
基于<font color='red'>ARM</font>的微波频率自动测量系统设计
快速学Arm(37)--定时器和计数器(1)
定时器和计算器本来没有什么区别,只是用途不同而已.定时器/计算器注意的用途如下: _ 记录外部事件的数量. _ 产生时间基准,各种时标间隔,实现定时机制. LPC2300系列ARM拥有4个32位可编程定时器/计算器.每一个定时器/计算器都包括一个32位的预分频器.这4个定时器/计算器均具有匹配,捕获功能. 定时器/计算器的基本功能包括:计算,匹配,捕获.三大基本功能中,计算功能是匹配和捕获功能的基础. 定时器/计数器的预分频: 数据-- 预分频计数器-- 计数器 计数先由预分频计数器进行计数,计数到指定的数量向计算器进位,这样定时器/计算器的计数范围大大的增加了. 计数外部脉冲: 工作在计数器模式时,可对外部脉
[单片机]
SCA体系结构中ARM组件的设计
  SCA的出现使得软件无线电的民用成为现实,SCA是通信平台组件可移植性、可交换性、互用性、软件可重用性、体系结构可扩展性的一个标准,这个标准主要体现在以下4个方面:1)使移植费用降到最低;2)使一个波形应用在不同厂商的多个平台(比如操作系统、硬件、主机环境)上能实现最大无缝移植;3)多使用和重用即插即用组件来建立波形;4)支持通信平台体系结构可扩展性,这样从手持到基站都使用同样的体系结构。   SCA的开发主要包括以下3点:1)核心框架的设计,核心框架是SCA系统的核心,通常选用成熟的核心框架产品,而不是开发新的核心框架实现;2)设备节点开发和波形应用开发:3)系统集成,主要是把上两步中的核心框架和设备节点,波形应用集成到一
[单片机]
SCA体系结构中<font color='red'>ARM</font>组件的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved