一文講解linux SMP Boot
說(shuō)明:
Kernel版本:4.14
ARM64處理器,Contex-A53,雙核
使用工具:Source Insight 3.5, Visio
1. 介紹
SMP, Symmetric Multi-Processor,相對(duì)于單核處理器來(lái)說(shuō),SMP實(shí)現(xiàn)了真正嚴(yán)格意義上的并發(fā)。通常SMP的啟動(dòng),會(huì)先讓Boot Core啟動(dòng),Secondary Cores會(huì)等待Boot Core來(lái)喚醒。
順帶參考下Arm Cortex-A53 MPCore Processor, Revision:r0p4文檔中的圖片,描述一下SMP中CPU Core的配置接口及功能模塊:
配置接口

功能框圖

【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【749907784】整理了一些個(gè)人覺(jué)得比較好的學(xué)習(xí)書(shū)籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書(shū)、實(shí)戰(zhàn)項(xiàng)目及代碼)? ?


2. 流程
當(dāng)然,這篇文章的核心,當(dāng)然是下邊這張圖片了:

圖中從Uboot到內(nèi)核分析了流程:
SMP啟動(dòng)的時(shí)候,Secondary CPU是可能處在WFI或者WFE狀態(tài),以前的內(nèi)核中會(huì)進(jìn)入WFI狀態(tài),然后可以通過(guò)arch_send_call_function_ipi_mask接口去boot Secondary CPU。而我分析的這個(gè)版本中,處理器會(huì)在Uboot中進(jìn)入WFE狀態(tài),后續(xù)在啟動(dòng)過(guò)程中,會(huì)有兩次進(jìn)入WFE狀態(tài)的情況,Boot CPU需要兩次通過(guò)SEV指令才能真正把CPU1啟動(dòng)起來(lái)。
在Kernel啟動(dòng)的過(guò)程中,涉及到smp操作的時(shí),最終會(huì)調(diào)用到底層的CPU操作函數(shù)集cpu_ops,而cpu_ops是可以選擇smp_spin_table的形式,或者psci的形式,如果選擇psci的形式,那么就涉及到底層的Arm Trusted Firmware。整體的流程比較復(fù)雜,后續(xù)有機(jī)會(huì)接觸再深入分析。
原文作者:LoyenWang
