—
SMP數據結構


CONFIG_HOTPLUG_CPU宏定義:

02
—
SMP初始化


smp_prepares_cpus
core0執行完setup_arch后,在其初始化的最后部分調用,配置好SMP相關的SCU模塊。其中setup_max_cpus由內核配置選項NR_CPUS決定。

其實例化如下:

smp_secondary_init
這個函數是SMP系統初始化過程中唯一一個secondary core執行的代碼。它的執行時間點在core1解復位之后,由secondary_start_kernel()調用,通常會配置core1的電源模式等。

smp_boot_secondary
作為開啟SMP系統的鑰匙函數,它是一定要實現的。由__cpu_up進行調用,設置core1解復位后要執行的第一條指令地址,使core1得以執行初始化代碼并最終進入到secondary_start_kernel()函數中。

對于每個多核ARM SoC而言,這個函數使一定要實現的,其實例化的方式大相徑庭,都可以參考如下方式:

而core1執行的第一條指令符號是secondary_startup,通常的做法是將符號secondary_startup的絕對地址寫入SoC內部特定的寄存器,當core1被激活后,會自動跳轉到該寄存器所存的地址處進行取指。
至此,4個smp相關的初始化函數介紹完畢,以下為kernel SMP的完整初始化流程。

推薦閱讀

進群,請加一口君個人微信,帶你嵌入式入門進階。