一文讲解linux SMP Boot
说明:
Kernel版本:4.14
ARM64处理器,Contex-A53,双核
使用工具:Source Insight 3.5, Visio
1. 介绍
SMP, Symmetric Multi-Processor,相对于单核处理器来说,SMP实现了真正严格意义上的并发。通常SMP的启动,会先让Boot Core启动,Secondary Cores会等待Boot Core来唤醒。
顺带参考下Arm Cortex-A53 MPCore Processor, Revision:r0p4文档中的图片,描述一下SMP中CPU Core的配置接口及功能模块:
配置接口

功能框图

【文章福利】小编推荐自己的Linux内核技术交流群:【749907784】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!(含视频教程、电子书、实战项目及代码)


2. 流程
当然,这篇文章的核心,当然是下边这张图片了:

图中从Uboot到内核分析了流程:
SMP启动的时候,Secondary CPU是可能处在WFI或者WFE状态,以前的内核中会进入WFI状态,然后可以通过arch_send_call_function_ipi_mask接口去boot Secondary CPU。而我分析的这个版本中,处理器会在Uboot中进入WFE状态,后续在启动过程中,会有两次进入WFE状态的情况,Boot CPU需要两次通过SEV指令才能真正把CPU1启动起来。
在Kernel启动的过程中,涉及到smp操作的时,最终会调用到底层的CPU操作函数集cpu_ops,而cpu_ops是可以选择smp_spin_table的形式,或者psci的形式,如果选择psci的形式,那么就涉及到底层的Arm Trusted Firmware。整体的流程比较复杂,后续有机会接触再深入分析。
原文作者:LoyenWang
