; enable-method = "spin-table" ; cpu-release-addr = 0 x1 0 x0000fff8 >; }; spin-table方式的多核啟動(dòng)方式,顧名思義在于自旋,主處理器和從處理器上電都會(huì)啟動(dòng),主處理器執(zhí)行uboot暢通無阻,從處理器在spin_table_secondary_jump處wfe睡眠,主處理器通過修改設(shè)備樹的cpu節(jié)點(diǎn)的cpu-release-addr屬性為spin_table_cpu_release_addr,這是從處理器的釋" />
0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用自旋表啟動(dòng)的平臺(tái)設(shè)備樹cpu節(jié)點(diǎn)介紹

麥辣雞腿堡 ? 來源:TrustZone ? 作者:Hcoco ? 2023-12-05 16:19 ? 次閱讀

補(bǔ)充一下一個(gè)使用自旋表作為啟動(dòng)方式的平臺(tái)設(shè)備樹cpu節(jié)點(diǎn):

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方式的多核啟動(dòng)方式,顧名思義在于自旋,主處理器和從處理器上電都會(huì)啟動(dòng),主處理器執(zhí)行uboot暢通無阻,從處理器在spin_table_secondary_jump處wfe睡眠,主處理器通過修改設(shè)備樹的cpu節(jié)點(diǎn)的cpu-release-addr屬性為spin_table_cpu_release_addr,這是從處理器的釋放地址所在的地方。

主處理器進(jìn)入內(nèi)核后,會(huì)通過smp_prepare_cpus函數(shù)調(diào)用spin-table 對(duì)應(yīng)的cpu操作集的cpu_prepare方法從而在smp_spin_table_cpu_prepare函數(shù)中設(shè)置從處理器的釋放地址為secondary_holding_pen這個(gè)內(nèi)核函數(shù),然后通過sev指令喚醒從處理器,從處理器繼續(xù)從secondary_holding_pen開始執(zhí)行(從處理器來到了內(nèi)核的世界),發(fā)現(xiàn)secondary_holding_pen_release不是自己的處理編號(hào),然后通過wfe繼續(xù)睡眠。

當(dāng)主處理器完成了大多數(shù)的內(nèi)核組件的初始化之后,調(diào)用smp_init來來開始真正的啟動(dòng)從處理器,最終調(diào)用spin-table 對(duì)應(yīng)的cpu操作集的cpu_boot方法從而在smp_spin_table_cpu_boot將需要啟動(dòng)的處理器的編號(hào)寫入secondary_holding_pen_release中,然后再次sev指令喚醒從處理器,從處理器得以繼續(xù)執(zhí)行(設(shè)置自己異常向量表,初始化mmu等)。

最終在idle線程中執(zhí)行wfi睡眠。其他從處理器也是同樣的方式啟動(dòng)起來,同樣最后進(jìn)入各種idle進(jìn)程執(zhí)行wfi睡眠,主處理器繼續(xù)往下進(jìn)行內(nèi)核初始化,直到啟動(dòng)init進(jìn)程,后面多個(gè)處理器都被啟動(dòng)起來,都可以調(diào)度進(jìn)程,多進(jìn)程還會(huì)被均衡到多核。

問題

  • 1、 而啟動(dòng)流程中哪個(gè)cpu作為primary cpu可以任意指定?primary cpu如何任意指定的?

啟動(dòng)的匯編代碼中會(huì)通過cpu的affinity值獲取當(dāng)前cpu的id,然后將自身cpu id與指定cpu id進(jìn)行比較,以確定當(dāng)前cpu是否是primary cpu

  • 2、cpu hotplug對(duì)于spintable是必須的嗎?

spintable啟動(dòng)方式不支持cpu hotplug,只是在secondary 啟動(dòng)時(shí)復(fù)用了hotplug相同的流程,這部分代碼默認(rèn)是會(huì)被編譯到內(nèi)核中的


但是spin-table方式非常簡(jiǎn)單,但其只能被用于secondary cpu啟動(dòng),功能比較單一。

隨著aarch64架構(gòu)電源管理需求的增加(如cpu熱插拔、cpu idle等),arm設(shè)計(jì)了一套標(biāo)準(zhǔn)的電源管理接口協(xié)議psci。

該協(xié)議可以支持所有cpu相關(guān)的電源管理接口,而且由于電源相關(guān)操作是系統(tǒng)的關(guān)鍵功能,為了防止其被攻擊,該協(xié)議將底層相關(guān)的實(shí)現(xiàn)都放到了secure空間,從而可提高系統(tǒng)的安全性。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19286

    瀏覽量

    229873
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10863

    瀏覽量

    211799
  • SMP
    SMP
    +關(guān)注

    關(guān)注

    0

    文章

    74

    瀏覽量

    19669
  • 設(shè)備樹
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    3126
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    安卓(android)6.0高通平臺(tái)下設(shè)備專題視頻講解【全國(guó)獨(dú)家+設(shè)備視頻教程+絕頂視頻】

    安卓(android)6.0高通平臺(tái)下設(shè)備專題視頻講解【全國(guó)獨(dú)家+設(shè)備視頻教程+絕頂視頻】hi,大家好,我是aiku,又和大家見面了,我最近錄制了全國(guó)只有一家視頻講解安卓(andr
    發(fā)表于 10-06 22:55

    Linux 設(shè)備詳解

    的外設(shè)硬件接到哪里或是那個(gè)平臺(tái),其驅(qū)動(dòng)代碼邏輯并不需要改動(dòng),而僅僅需要改變下設(shè)備信息,主要的就是I/O地址和中斷號(hào)。說了這么半天,跟引入設(shè)備有什么關(guān)系呢?華清教學(xué)使用的開發(fā)板(A8/
    發(fā)表于 10-19 15:53

    Linux 設(shè)備詳解

    的外設(shè)硬件接到哪里或是那個(gè)平臺(tái),其驅(qū)動(dòng)代碼邏輯并不需要改動(dòng),而僅僅需要改變下設(shè)備信息,主要的就是I/O地址和中斷號(hào)。說了這么半天,跟引入設(shè)備有什么關(guān)系呢?華清教學(xué)使用的開發(fā)板(A8/
    發(fā)表于 11-02 13:46

    Linux 設(shè)備詳解

    的外設(shè)硬件接到哪里或是那個(gè)平臺(tái),其驅(qū)動(dòng)代碼邏輯并不需要改動(dòng),而僅僅需要改變下設(shè)備信息,主要的就是I/O地址和中斷號(hào)。說了這么半天,跟引入設(shè)備有什么關(guān)系呢?華清教學(xué)使用的開發(fā)板(A8/
    發(fā)表于 11-29 17:58

    設(shè)備(Device Tree)

    設(shè)備介紹設(shè)備是一個(gè)描述設(shè)備硬件資源的文件,該文件是由節(jié)
    發(fā)表于 03-14 14:36

    qualcomm平臺(tái)的Little Kernel啟動(dòng)流程

    的header中檢索到)。載入設(shè)備到TAGS_ADDR(從boot image的header中檢索到),然后更新設(shè)備;3)把命令行(cmd line)作為
    發(fā)表于 09-25 15:42

    迅為iMX6UL開發(fā)板驅(qū)動(dòng)-設(shè)備節(jié)點(diǎn)名稱和子節(jié)點(diǎn)獲取設(shè)備數(shù)據(jù)

    文檔介紹迅為IMX6UL開發(fā)板設(shè)備通過節(jié)點(diǎn)名稱獲取設(shè)備數(shù)據(jù),以及獲取子
    發(fā)表于 06-11 11:35

    怎樣去配置設(shè)備的leds節(jié)點(diǎn)

    配置設(shè)備leds節(jié)點(diǎn),sys文件系統(tǒng)中沒有出現(xiàn)相應(yīng)設(shè)備文件,引腳沒有查出有重復(fù)定義的?怎樣去配置設(shè)備
    發(fā)表于 01-07 06:15

    設(shè)備中GIC中斷控制器節(jié)點(diǎn)

    文章目錄一、回顧二、設(shè)備中GIC中斷控制器節(jié)點(diǎn)三、外設(shè)中斷控制器節(jié)點(diǎn)三、其他設(shè)備使用中斷節(jié)點(diǎn)1
    發(fā)表于 01-10 07:37

    如何在設(shè)備文件里面添加心跳燈節(jié)點(diǎn)

    如何在設(shè)備文件里面添加心跳燈節(jié)點(diǎn)呢?有哪些步驟?
    發(fā)表于 03-04 06:44

    ARM Linux設(shè)備的組成和結(jié)構(gòu)

    包含子節(jié)點(diǎn)。所謂屬性,其實(shí)就是成對(duì)出現(xiàn)的名稱和值。在設(shè)備中,可描述的信息包括(原先這些信息大多被硬編碼在內(nèi)核中):·CPU 的數(shù)量和類別?!?內(nèi)存基地址和大小。· 總線和橋?!?外設(shè)
    發(fā)表于 05-11 16:28

    arm linux設(shè)備都包括哪些基本信息呢

    設(shè)備是由一系列被命名的節(jié)點(diǎn)(Node)和屬性(Property)組成。節(jié)點(diǎn)本身可包含子節(jié)點(diǎn)。設(shè)備
    發(fā)表于 05-24 16:04

    【米爾-TIAM62開發(fā)板-接替335x-試用評(píng)測(cè)】+(三)手把手創(chuàng)建Uboot設(shè)備與內(nèi)核設(shè)備實(shí)戰(zhàn)

    .dts文件編譯為.dtb文件,然后將.dtb文件用于系統(tǒng)啟動(dòng)過程中的設(shè)備信息獲取。 深入學(xué)習(xí)特定硬件平臺(tái)設(shè)備:針對(duì)你正在使用的硬件
    發(fā)表于 11-28 09:54

    你不知道的Linux設(shè)備--memory&chosen節(jié)點(diǎn)

    節(jié)點(diǎn)那一節(jié)我們說過,最簡(jiǎn)單的設(shè)備也必須包含cpus節(jié)點(diǎn)和memory節(jié)點(diǎn)。memory節(jié)點(diǎn)
    發(fā)表于 05-05 11:14 ?3631次閱讀

    Petalinux工程中設(shè)備介紹

    設(shè)備是 Petalinux kernel 的關(guān)鍵組件,接下來以 2020.1 版本為例,為大家介紹一下在Xilinx Petalinux 工程中的設(shè)備
    的頭像 發(fā)表于 02-20 16:32 ?6941次閱讀
    Petalinux工程中<b class='flag-5'>設(shè)備</b><b class='flag-5'>樹</b>的<b class='flag-5'>介紹</b>