補充一下一個使用自旋表作為啟動方式的平臺設(shè)備樹cpu節(jié)點:
arch/arm64/boot/dts/xxx.dtsi:
cpu@0 {
device_type = "cpu";
compatible = "arm,armv8";
reg = < 0x0 0x000 >;
enable-method = "spin-table";
cpu-release-addr = < 0x1 0x0000fff8 >;
};
spin-table方式的多核啟動方式,顧名思義在于自旋,主處理器和從處理器上電都會啟動,主處理器執(zhí)行uboot暢通無阻,從處理器在spin_table_secondary_jump處wfe睡眠,主處理器通過修改設(shè)備樹的cpu節(jié)點的cpu-release-addr屬性為spin_table_cpu_release_addr,這是從處理器的釋放地址所在的地方。
主處理器進入內(nèi)核后,會通過smp_prepare_cpus函數(shù)調(diào)用spin-table 對應(yīng)的cpu操作集的cpu_prepare方法從而在smp_spin_table_cpu_prepare函數(shù)中設(shè)置從處理器的釋放地址為secondary_holding_pen這個內(nèi)核函數(shù),然后通過sev指令喚醒從處理器,從處理器繼續(xù)從secondary_holding_pen開始執(zhí)行(從處理器來到了內(nèi)核的世界),發(fā)現(xiàn)secondary_holding_pen_release不是自己的處理編號,然后通過wfe繼續(xù)睡眠。
當主處理器完成了大多數(shù)的內(nèi)核組件的初始化之后,調(diào)用smp_init來來開始真正的啟動從處理器,最終調(diào)用spin-table 對應(yīng)的cpu操作集的cpu_boot方法從而在smp_spin_table_cpu_boot將需要啟動的處理器的編號寫入secondary_holding_pen_release中,然后再次sev指令喚醒從處理器,從處理器得以繼續(xù)執(zhí)行(設(shè)置自己異常向量表,初始化mmu等)。
最終在idle線程中執(zhí)行wfi睡眠。其他從處理器也是同樣的方式啟動起來,同樣最后進入各種idle進程執(zhí)行wfi睡眠,主處理器繼續(xù)往下進行內(nèi)核初始化,直到啟動init進程,后面多個處理器都被啟動起來,都可以調(diào)度進程,多進程還會被均衡到多核。
問題
- 1、 而啟動流程中哪個cpu作為primary cpu可以任意指定?primary cpu如何任意指定的?
啟動的匯編代碼中會通過cpu的affinity值獲取當前cpu的id,然后將自身cpu id與指定cpu id進行比較,以確定當前cpu是否是primary cpu
- 2、cpu hotplug對于spintable是必須的嗎?
spintable啟動方式不支持cpu hotplug,只是在secondary 啟動時復(fù)用了hotplug相同的流程,這部分代碼默認是會被編譯到內(nèi)核中的
但是spin-table方式非常簡單,但其只能被用于secondary cpu啟動,功能比較單一。
隨著aarch64架構(gòu)電源管理需求的增加(如cpu熱插拔、cpu idle等),arm設(shè)計了一套標準的電源管理接口協(xié)議psci。
該協(xié)議可以支持所有cpu相關(guān)的電源管理接口,而且由于電源相關(guān)操作是系統(tǒng)的關(guān)鍵功能,為了防止其被攻擊,該協(xié)議將底層相關(guān)的實現(xiàn)都放到了secure空間,從而可提高系統(tǒng)的安全性。
-
處理器
+關(guān)注
關(guān)注
68文章
20255瀏覽量
252320 -
cpu
+關(guān)注
關(guān)注
68文章
11279瀏覽量
225015 -
SMP
+關(guān)注
關(guān)注
0文章
81瀏覽量
20828 -
設(shè)備樹
+關(guān)注
關(guān)注
0文章
45瀏覽量
3574
發(fā)布評論請先 登錄
飛凌嵌入式ElfBoard ELF 1板卡-初識設(shè)備樹之設(shè)備樹組成和結(jié)構(gòu)
嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-初識設(shè)備樹之設(shè)備樹組成和結(jié)構(gòu)
安卓(android)6.0高通平臺下設(shè)備樹專題視頻講解【全國獨家+設(shè)備樹視頻教程+絕頂視頻】
Linux 設(shè)備樹詳解
Linux 設(shè)備樹詳解
Linux 設(shè)備樹詳解
qualcomm平臺的Little Kernel啟動流程
迅為iMX6UL開發(fā)板驅(qū)動-設(shè)備樹節(jié)點名稱和子節(jié)點獲取設(shè)備樹數(shù)據(jù)
怎樣去配置設(shè)備樹的leds節(jié)點呢
設(shè)備樹中GIC中斷控制器節(jié)點
arm linux設(shè)備樹都包括哪些基本信息呢
【米爾-TIAM62開發(fā)板-接替335x-試用評測】+(三)手把手創(chuàng)建Uboot設(shè)備樹與內(nèi)核設(shè)備樹實戰(zhàn)
你不知道的Linux設(shè)備樹--memory&chosen節(jié)點
深入理解設(shè)備樹chosen節(jié)點:固件與內(nèi)核的“配置橋梁”
使用自旋表啟動的平臺設(shè)備樹cpu節(jié)點介紹
評論