日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux kernel之SMP初始化

發布時間:2023/12/20 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux kernel之SMP初始化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

01


SMP數據結構

SMP的數據結構如下圖所示,主要由2部分構成,通過兩個宏定義CONFIG_SMP和CONFIG_HOT_PLUG來控制。當設置kernel支持SMP模式時,那么CONFIG_SMP選項是一定會打開的,因此第一部分是必須實現的內容。而第二部分是否需要實現取決于熱插拔宏定義CONFIG_HOTPLUG_CPU是否打開。

CONFIG_SMP宏定義:

CONFIG_HOTPLUG_CPU宏定義:


02


SMP初始化

  • smp_init_cpus

core0執行該函數實際上并不去設置硬件,這個函數通過SCUCONFIG(0x4)寄存器獲取當前SoC的core數量,預先初始化好一張cpu map的表,后期若除primary cpu之外的cpu真正被激活并設置為SMP模式,那么會再次更新cpu map這張表。

其實例化如下:

  • 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的完整初始化流程。


推薦閱讀:

專輯|Linux文章匯總

專輯|程序人生

專輯|C語言

我的知識小密圈

關注公眾號,后臺回復「1024」獲取學習資料網盤鏈接。

歡迎點贊,關注,轉發,在看,您的每一次鼓勵,我都將銘記于心~

嵌入式Linux

微信掃描二維碼,關注我的公眾號

總結

以上是生活随笔為你收集整理的Linux kernel之SMP初始化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。