psci_cpu_on () //lib/psci/psci_main.c - > psci_validate_entry_point () //驗證入口地址有效性并 保存入口點到一個結(jié)構(gòu)ep中 - > psci_cpu_on_start (target_cpu, //lib/el3_runtime/aarch64/context_mgmt.c write_ctx_reg (state, CTX_ELR_EL3, ep- >pc); //注:異常返回時執(zhí)行此地址 于是完成了cpu的啟動?。?! write_ctx_reg (state, CTX_SP" />

曰本美女∴一区二区特级A级黄色大片, 国产亚洲精品美女久久久久久2025, 页岩实心砖-高密市宏伟建材有限公司, 午夜小视频在线观看欧美日韩手机在线,国产人妻奶水一区二区,国产玉足,妺妺窝人体色WWW网站孕妇,色综合天天综合网中文伊,成人在线麻豆网观看

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

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

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

PSCI處理函數(shù)代碼分析

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

處理函數(shù)根據(jù)funid來決定服務,可以看到PSCI_CPU_ON_AARCH64為0xc4000003,這正是設備樹中填寫的cpu_on屬性的id,會委托psci_cpu_on來執(zhí)行核上電任務。下面分析是重點:?。?!

- >psci_cpu_on()  //lib/psci/psci_main.c
 - >psci_validate_entry_point()  //驗證入口地址有效性并  保存入口點到一個結(jié)構(gòu)ep中
 - >psci_cpu_on_start(target_cpu, &ep)   //ep入口地址
  - >psci_plat_pm_ops- >pwr_domain_on(target_cpu)
   - >qemu_pwr_domain_on  //實現(xiàn)核上電(平臺實現(xiàn))
  /* Store the re-entry information for the non-secure world. */
  - >cm_init_context_by_index()  //重點:會通過cpu的編號找到 cpu上下文(cpu_context_t),存在cpu寄存器的值,異常返回的時候?qū)憣懙綄募拇嫫髦?,然后eret,舊返回到了el1?。?!
   - >cm_setup_context()  //設置cpu上下文
     - > write_ctx_reg(state, CTX_SCR_EL3, scr_el3);  //lib/el3_runtime/aarch64/context_mgmt.c
              write_ctx_reg(state, CTX_ELR_EL3, ep- >pc);  //注:異常返回時執(zhí)行此地址  于是完成了cpu的啟動!??!
              write_ctx_reg(state, CTX_SPSR_EL3, ep- >spsr);

psci_cpu_on主要完成開核的工作 ,然后會設置一些異常返回后寄存器的值(eg:從el1 -> el3 -> el1),重點關注 ep->pc寫到cpu_context結(jié)構(gòu)的CTX_ELR_EL3偏移處(從處理器啟動后會從這個地址取指執(zhí)行)。

實際上, 所有的從處理器啟動后都會從bl31_warm_entrypoint開始執(zhí)行 ,在plat_setup_psci_ops中會設置(每個平臺都有自己的啟動地址寄存器,通過寫這個寄存器來獲得上電后執(zhí)行的指令地址)。

大致說一下:主處理器通過smc進入el3請求開核服務,atf中會響應這種請求, 通過平臺的開核操作來啟動從處理器并且設置從處理的一些寄存器eg:scr_el3、spsr_el3、elr_el3,然后主處理器,恢復現(xiàn)場,eret再次回到el1 ,

而處理器開核之后會從bl31_warm_entrypoint開始執(zhí)行,最后通過el3_exit返回到el1的elr_el3設置的地址。

分析到這atf的分析到此為止,atf中主要是響應內(nèi)核的snc的請求,然后做開核處理,也就是實際的開核動作,但是從處理器最后還是要回到內(nèi)核中執(zhí)行

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

    關注

    68

    文章

    11015

    瀏覽量

    215400
  • SMP
    SMP
    +關注

    關注

    0

    文章

    77

    瀏覽量

    20124
  • 函數(shù)
    +關注

    關注

    3

    文章

    4365

    瀏覽量

    63940
  • 設備樹
    +關注

    關注

    0

    文章

    39

    瀏覽量

    3289
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    ARM電源管理中的PSCI是什么意思呢

    新的中斷不會再發(fā)給該處理器核;反過來,如果處理器核重新上電,要在OS調(diào)度器中加載該處理器的信息,并且需要重新配置中斷寄存器。而CPUIdle就沒有加載/移除的需要。從上圖可以看出來,PSCI
    發(fā)表于 04-02 09:45

    2160處理器支持VHE嗎?

    ] CPU15: 關閉 [ 94.403035] psci: CPU15 被殺死。 [94.417654]再見! 然后控制臺沒有輸出,看了kexec代碼后,我有一些疑問: 1. 2160處理器支持VHE嗎?我
    發(fā)表于 06-08 07:21

    ESAM接口函數(shù)代碼

    ESAM接口函數(shù)代碼 ESAM接口函數(shù)說是用子程序的代碼
    發(fā)表于 08-18 16:51 ?65次下載

    華清遠見FPGA代碼-使用函數(shù)實現(xiàn)簡單的八位處理

    華清遠見FPGA代碼-使用函數(shù)實現(xiàn)簡單的八位處理
    發(fā)表于 10-27 18:07 ?4次下載

    ARM處理器的啟動代碼分析與設計

    ARM處理器的啟動代碼分析與設計
    發(fā)表于 09-25 08:27 ?12次下載
    ARM<b class='flag-5'>處理</b>器的啟動<b class='flag-5'>代碼</b>的<b class='flag-5'>分析</b>與設計

    用于MPLAB X IDE代碼性能分析插件的工作原理和代碼性能分析參考

    MPLAB X IDE提供收集有關C代碼函數(shù)函數(shù)級性能分析(Function Level Profiling, FLP)數(shù)據(jù)的功能。但是,該數(shù)據(jù)無法在未安裝MPLAB X IDE插件
    發(fā)表于 06-11 04:28 ?11次下載
    用于MPLAB X IDE<b class='flag-5'>代碼</b>性能<b class='flag-5'>分析</b>插件的工作原理和<b class='flag-5'>代碼</b>性能<b class='flag-5'>分析</b>參考

    MATLAB圖像處理工具箱的函數(shù)介紹和圖像處理分析的技術(shù)實現(xiàn)分析

    介紹了MATLAB 圖像處理工具箱中的函數(shù), 給出了圖像處理分析的技術(shù)實現(xiàn), 如用空域法進行圖像增強, 通過形態(tài)學方法進行圖像特征抽取與分析
    發(fā)表于 10-30 16:30 ?10次下載
    MATLAB圖像<b class='flag-5'>處理</b>工具箱的<b class='flag-5'>函數(shù)</b>介紹和圖像<b class='flag-5'>處理</b>與<b class='flag-5'>分析</b>的技術(shù)實現(xiàn)<b class='flag-5'>分析</b>

    用于MPLABX IDE的代碼性能分析插件

    MPLAB X IDE提供收集有關C代碼函數(shù)函數(shù)級性能分析(Function Level Profiling,F(xiàn)LP)數(shù)據(jù)的功能。但是,該數(shù)據(jù)無法在未安裝MPLAB X IDE插件—
    發(fā)表于 05-12 10:38 ?15次下載

    使用Arduino函數(shù)簡化代碼

    組織擴展代碼的一種出色技術(shù)是使用函數(shù),即可以根據(jù)需要從程序的其他部分(例如通過主循環(huán))調(diào)用的代碼片段。
    的頭像 發(fā)表于 08-16 09:23 ?2119次閱讀
    使用Arduino<b class='flag-5'>函數(shù)</b>簡化<b class='flag-5'>代碼</b>

    psci接口規(guī)范介紹

    由于psci是由linux內(nèi)核調(diào)用bl31中的安全服務,實現(xiàn)cpu電源管理功能的。因此其軟件架構(gòu)包含三個部分: (1)內(nèi)核與bl31之間的調(diào)用接口規(guī)范 (2)內(nèi)核中的架構(gòu) (3)bl31中的架構(gòu)
    的頭像 發(fā)表于 12-05 16:53 ?1242次閱讀

    內(nèi)核中的psci驅(qū)動是什么

    內(nèi)核中的psci架構(gòu) 內(nèi)核psci軟件架構(gòu)包含psci驅(qū)動和每個cpu的cpu_ops回調(diào)函數(shù)實現(xiàn)兩部分。 其中psci驅(qū)動實現(xiàn)了驅(qū)動初始化
    的頭像 發(fā)表于 12-05 16:58 ?959次閱讀
    內(nèi)核中的<b class='flag-5'>psci</b>驅(qū)動是什么

    內(nèi)核中的psci架構(gòu)cpu_ops接口

    cpu_ops接口 驅(qū)動初始化完成后,cpu的cpu_ops就可以調(diào)用這些回調(diào)實現(xiàn)psci功能的調(diào)用。如下所示,當devicetree中cpu的enable-method設置為psci時,該cpu
    的頭像 發(fā)表于 12-05 17:25 ?920次閱讀

    bl31中的psci架構(gòu)介紹

    std_svc_setup會在bl31啟動流程中被調(diào)用,以用于初始化該服務相關的配置。而std_svc_smc_handler為其smc異常處理函數(shù),當內(nèi)核通過psci接口調(diào)用相關服務時,最終將由該
    的頭像 發(fā)表于 12-05 17:33 ?1344次閱讀
    bl31中的<b class='flag-5'>psci</b>架構(gòu)介紹

    SMP多核啟動PSCI代碼示例

    _setup //lib/psci/psci_setup.c - >plat_setup_psci_ops //設置平臺的psci操作 調(diào)用平臺的plat_setup_
    的頭像 發(fā)表于 12-05 17:45 ?890次閱讀

    C語言如何處理函數(shù)的返回值

    當你在函數(shù)的最后寫上 return 0 的時候,它是如何返回給調(diào)用函數(shù)的? 比如 test 函數(shù),為了待會更好的看懂匯編代碼,我寫成了 return 1234。
    的頭像 發(fā)表于 01-16 09:21 ?306次閱讀