0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

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

secondary cpu初始化狀態(tài)設(shè)置

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

spin-table

spin-table啟動流程的示意圖如下:

圖片

芯片上電后primary cpu開始執(zhí)行啟動流程,而secondary cpu則將自身設(shè)置為WFE睡眠狀態(tài),并且為內(nèi)核準備了一塊內(nèi)存,用于填寫secondary cpu的入口地址。

uboot負責將這塊內(nèi)存的地址寫入devicetree中,當內(nèi)核初始化完成,需要啟動secondary cpu時,就將其內(nèi)核入口地址寫到那塊內(nèi)存中,然后喚醒cpu。

secondary cpu被喚醒后,檢查該內(nèi)存的內(nèi)容,確認內(nèi)核已經(jīng)向其寫入了啟動地址,就跳轉(zhuǎn)到該地址執(zhí)行啟動流程。

secondary cpu初始化狀態(tài)設(shè)置

uboot啟動時,secondary cpu會通過以下流程進入wfe狀態(tài)(arch/arm/cpu/armv8/start.S):

#if defined(CONFIG_ARMV8_SPIN_TABLE) && !defined(CONFIG_SPL_BUILD)
	branch_if_master x0, x1, master_cpu1b	spin_table_secondary_jump2)
	…
master_cpu:                                                  (3bl	_main

(1)若當前cpu為primary cpu,則跳轉(zhuǎn)到step 3,繼續(xù)執(zhí)行啟動流程。其中cpu id是通過mpidr區(qū)分的,而啟動流程中哪個cpu作為primary cpu可以任意指定。當指定完成后,此處就可以根據(jù)其身份確定相應(yīng)的執(zhí)行流程

(2)若當前cpu為slave cpu,則執(zhí)行spin流程。它是由spin_table_secondary_jump函數(shù)實現(xiàn)的(arch/arm/cpu/armv8/start.S)。以下為其代碼實現(xiàn):

ENTRY(spin_table_secondary_jump)
.globl spin_table_reserve_begin
spin_table_reserve_begin:
0:	wfe                                           (1)
	ldr	x0, spin_table_cpu_release_addr       (2)
	cbz	x0, 0b                                (3)
	br	x0                                    (4)
.globl spin_table_cpu_release_addr                    (5)
	.align	3
spin_table_cpu_release_addr:
	.quad	0
.globl spin_table_reserve_end
spin_table_reserve_end:
ENDPROC(spin_table_secondary_jump)

(1)secondary cpu當前沒有事情要做,因此執(zhí)行wfe指令進入睡眠模式,以降低功耗

(2)spin_table_cpu_release_addr將由uboot傳遞給內(nèi)核,根據(jù)step 5的定義可知,其長度為8個字節(jié),在64位系統(tǒng)中正好可以保存一個指針。而它的內(nèi)容在啟動時會被初始化為0,當內(nèi)核初始化完成后,在啟動secondary cpu之前,會在uboot中將其入口地址寫到該位置,并喚醒它

(3)當secondary cpu從wfe狀態(tài)喚醒后,會校驗內(nèi)核是否在spin_table_cpu_release_addr處填寫了它的啟動入口。若未填寫,則其會繼續(xù)進入wfe狀態(tài)

(4)若內(nèi)核填入了啟動地址,則其直接跳轉(zhuǎn)到該地址開始執(zhí)行內(nèi)核初始化流程

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

    關(guān)注

    452

    文章

    49941

    瀏覽量

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

    關(guān)注

    68

    文章

    10770

    瀏覽量

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

    關(guān)注

    0

    文章

    71

    瀏覽量

    19598
收藏 人收藏

    評論

    相關(guān)推薦

    CW32L083 RTC初始化設(shè)置

    介紹CW32L083的RTC初始化設(shè)置
    的頭像 發(fā)表于 06-24 10:16 ?1394次閱讀
    CW32L083 RTC<b class='flag-5'>初始化</b><b class='flag-5'>設(shè)置</b>

    手機模塊初始化向?qū)?/a>

    手機模塊初始化向?qū)?為了剛好的對手機模塊進行初始化,所以把最基本的向?qū)懴聛?本向?qū)нm用于本公司的西門子TC35I和華為GT9000模塊。一、在初始化手機模塊前,請先確定DT
    發(fā)表于 09-18 09:41 ?17次下載

    FPGA的ROM初始化問題討論

    本文討論FPGA的ROM初始化問題,詳細介紹mit文件的創(chuàng)建與使用。利用FPGA實現(xiàn)的ROM只能認為器件處于用戶狀態(tài)時具備ROM功能。使用時不必要刻意劃分,而ROM單元的初始化則是設(shè)計人員必須面
    發(fā)表于 02-08 14:24 ?5431次閱讀
    FPGA的ROM<b class='flag-5'>初始化</b>問題討論

    RDA1846S初始化設(shè)置

    RDA1846S初始化設(shè)置RDA1846S初始化設(shè)置RDA1846S初始化設(shè)置
    發(fā)表于 01-15 17:08 ?0次下載

    UCOS_III_配置與初始化

    UCOS_III_配置與初始化
    發(fā)表于 12-20 22:53 ?5次下載

    ROVA燒錄工具的應(yīng)用程序和注冊及初始化MCU說明和配置設(shè)置詳細概述

    本文檔的主要內(nèi)容介紹的是ROVA燒錄工具的應(yīng)用程序和注冊及初始化MCU說明和配置設(shè)置,安裝信息的詳細概述
    發(fā)表于 06-06 10:00 ?11次下載

    霍爾無刷電機如何進行程序初始化

    頻率下的振蕩周期的16倍2. 對PWM模塊進行初始化,對PWM模塊進行初始化的過程中需要進行設(shè)置的主要PWM的時鐘,對其方式,PWM的極性,同時還需要對占空比和載波的周期值以及使能端來進行
    的頭像 發(fā)表于 10-15 17:29 ?7615次閱讀

    【嵌入式07】寄存器映射原理詳解,GPIO端口的初始化設(shè)置步驟

    本文主要介紹STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化設(shè)置三步驟(時鐘配置、輸入輸出模式設(shè)置、最大速率設(shè)置)。
    發(fā)表于 12-04 12:06 ?11次下載
    【嵌入式07】寄存器映射原理詳解,GPIO端口的<b class='flag-5'>初始化</b><b class='flag-5'>設(shè)置</b>步驟

    如何在Segger J-Flash中設(shè)置芯片初始化序列?

    許多微控制器在燒錄之前需要一個自定義的初始化序列來初始化目標硬件,例如初始化PLL時鐘,關(guān)閉看門狗或定義Flash的等待狀態(tài)。在使用這些對初始化
    的頭像 發(fā)表于 12-12 10:56 ?2071次閱讀

    什么是指定初始化?

    按照這種固定的順序,我們可以依次給 a[0] 和 a[8] 賦值。因為沒有對 a[9] 賦值,所以編譯器會將 a[9] 默認設(shè)置為0。當數(shù)組長度比較小時,使用這種方式初始化比較方便。
    的頭像 發(fā)表于 02-17 09:32 ?781次閱讀

    CPU CACHE策略的初始化

    build_mem_type_table()函數(shù)的功能是獲取當前CPU的CACHE類型,據(jù)此初始化mem_type。
    的頭像 發(fā)表于 06-05 15:03 ?1300次閱讀
    <b class='flag-5'>CPU</b> CACHE策略的<b class='flag-5'>初始化</b>

    復(fù)位電路如何回到初始化狀態(tài)

    單片機最小系統(tǒng)中復(fù)位電路屬于必不可少的部分。數(shù)字電路中只有高低電平兩個狀態(tài),電路剛上電或者電路不能正常工作時,需要復(fù)位電路使電路進入回到初始化狀態(tài)。由下圖可以看出復(fù)位可以分為系統(tǒng)復(fù)位,外部復(fù)位和看門狗復(fù)位。
    的頭像 發(fā)表于 06-22 09:02 ?1173次閱讀
    復(fù)位電路如何回到<b class='flag-5'>初始化</b>的<b class='flag-5'>狀態(tài)</b>

    如何在內(nèi)核中啟動secondary cpu

    啟動secondary cpu 內(nèi)核在啟動secondary cpu之前當然需要為其準備好執(zhí)行環(huán)境,因為內(nèi)核中cpu最終都將由調(diào)度器管理,故
    的頭像 發(fā)表于 12-05 15:46 ?477次閱讀
    如何在內(nèi)核中啟動<b class='flag-5'>secondary</b> <b class='flag-5'>cpu</b>

    secondary cpu執(zhí)行流程介紹

    : 由于其底層相關(guān)初始化流程與primary cpu類似,因此此處不再介紹。我們這里主要看一下它是如何通過secondary_start_kernel啟動idle線程的: asmlinkage
    的頭像 發(fā)表于 12-05 16:12 ?748次閱讀
    <b class='flag-5'>secondary</b> <b class='flag-5'>cpu</b>執(zhí)行流程介紹

    SMP多核secondary cpu啟動流程

    ,詳細分析可以參考上篇博文。其中以下流程執(zhí)行secondary cpu啟動相關(guān)的一些初始化工作: 在初始化完成且hotplug線程創(chuàng)建完成后,就可通過以下流程喚醒
    的頭像 發(fā)表于 12-05 17:41 ?682次閱讀
    SMP多核<b class='flag-5'>secondary</b> <b class='flag-5'>cpu</b>啟動流程