—
linux
SMP數據結構
web
CONFIG_HOTPLUG_CPU宏定義:
微信
02網絡
—
數據結構
SMP初始化
app
smp_init_cpus
smp_prepares_cpus函數
core0執行完setup_arch後,在其初始化的最後部分調用,配置好SMP相關的SCU模塊。其中setup_max_cpus由內核配置選項NR_CPUS決定。flex
其實例化以下:url
smp_secondary_initspa
這個函數是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的完整初始化流程。
推薦閱讀
進羣,請加一口君我的微信,帶你嵌入式入門進階。
本文分享自微信公衆號 - 一口Linux(yikoulinux)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。