ARM MP-core启动流程
(1)让CPU0执行主要开机流程,其它的处理器进入WFI.
(在启动时,每个处理器可以透过CPU ID得知自己是否为CPU0,如果不是,就进入WFI的程序代码中.)
即:让AP进入Sleep
(2) 初始化外部内存与执行系统的初始化
(3) 设定 Stack
在DRAM初始化前,Stack是建立在SRAM中的。
(4) 把BootRom程序代码复制到外部内存中
(5) 重新Mapping 内存位置
(把0×00000000地址对应到外部内存 或 I-TCM如果 0×00000000地址要跑中断表的话(or 中断表对应到0xffff0000))
因为,Cold Reset时为了顺利开机,把iROM映射到了0x0000 0000处.
(6) 把第二阶段的BootLoader加载到外部内存中 or OnChip SRAM.\
(7) 执行第二阶段的BootLoader
2. 如何识别当前是哪个CPU在执行
执行时期,软件可以透过 CPU ID Register知道目前是MPCore中哪个处理器执行该程序代码,
CPU Id储存在CP15 c0中,长度为32bits,只能在特权等级(也就是SVC Mode下)被读取,读取的范例如下程序代码所示:
MRC p15,0,
31 12 11 … 8 7 … 4 3 … 0
SBZ Cluster ID SBZ CPU ID
说明如下,
(1) Cluster ID:
用以支持 Multi-MPCore架构下的Cluster识别之用 (The Cluster ID field value is set by the CLUSTERID configuration pins.)
(2) CPU ID: 视处理器的个数,例如四个处理器ID依序为 0×00,0×01,0×02与0×03
3. Primary Core所做的自身初始化
(1)Invalidate Data Cache
(2)Invalidate SCU(Snoop Control Unit) duplicate tags for all processors
(3)Invalidate L2 Cache
(4)Enable SCU
(5)Enable Data Cache
(6)Enable L2 Cache
(7)Set SMP mode with ACTLR.SMP.
等到系统稳定后,可能会让Non BSP Core做:
(1). Invalidate Data Cache
(2). Enable Data Cache
(3). Set SMP with ACTLR.SMP.
ARMMP-core启动流 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)