Linux kernel 用Linux引导armcortex-A二级内核

Linux kernel 用Linux引导armcortex-A二级内核,linux-kernel,arm,Linux Kernel,Arm,我需要关于Linux如何在多核SOC中实现辅助CPU核引导的指针。 trustzone实现是引导辅助CPU核心的必要条件吗?Linux如何在多核SOC中实现辅助CPU核心的引导? 多核引导的具体实现取决于平台。让我们以ARM全能Express为例。VE平台提供了一个特殊的引导寄存器,以帮助辅助核心引导。所有内核都将退出重置,并执行与下面的伪代码类似的代码 if( get_cpu_id() == PRIMARY_CORE ) { //Primary core enters

我需要关于Linux如何在多核SOC中实现辅助CPU核引导的指针。
trustzone实现是引导辅助CPU核心的必要条件吗?

Linux如何在多核SOC中实现辅助CPU核心的引导?

多核引导的具体实现取决于平台。让我们以ARM全能Express为例。VE平台提供了一个特殊的引导寄存器,以帮助辅助核心引导。所有内核都将退出重置,并执行与下面的伪代码类似的代码

if( get_cpu_id() == PRIMARY_CORE )    
{     
   //Primary core enters here    
   //proceed with booting OS (Linux)
}
else
{
  //Secondary core enters here
  while( *boot_reg == 0x0 )
  {
      WFI //Sleep here, wait for interrupts
  }

  (*boot_reg)(); //Jump to address pointer by boot_reg
}
主内核在设置了GIC等基本功能后,将向boot_reg写入辅助内核跳转地址。然后,主内核将生成一个SGI(软件生成中断),该中断针对它想要带出复位的次内核。因此,次核心被唤醒并跳转到操作系统代码中,进行与次核心相关的初始化,如页表基址设置、MMU启用等

启动辅助CPU核心时必须使用信任区实现吗?


如果您的ARM内核支持Trustzone(安全扩展),则重置后所有内核都将处于安全管理器模式。理想情况下,您希望在启动前切换到非安全管理模式。此模式更改必须由所有内核执行。如果您的ARM内核不支持Trustzone,则重置后它将处于非安全监管模式,因此不需要特殊处理。虚拟化扩展也是如此。如果您的ARM core支持虚拟化,并且您希望支持虚拟机监控程序(这是可选的),那么在模式切换到非安全监控程序模式之前,您必须先切换到虚拟机监控程序模式(对于hyp init)。

最好的提示是-即,阅读源代码以了解它是如何完成的。首先,感谢您提供了非常清晰的说明。我有一个后续问题,如果你能帮忙的话。在多核SoC(cortex-A7)的情况下,如何在没有Trustzone实现的情况下处理从安全模式到非安全模式的核心切换?我需要找到是否可以引导,以便我可以将主代码切换到非安全监管模式,引导到Linux,然后还可以将辅助核心切换到非安全监管模式。提前感谢。Trustzone几乎是安全扩展(整个安全世界模式)的一个品牌名称。因此,在A7处理器的启动过程中,您不能逃避“Truszone”代码。以下是你可以遵循的顺序:1。在安全SVC模式下,为监视器模式2设置向量表。呼叫smc进入监控模式3。将lr、spsr设置为指向SVC模式,并将SCR.NS位设置为1 4。执行异常返回这本身就是一个全新的问题