日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

ATF(TF-A)代碼的剖析

Linux閱碼場(chǎng) ? 來(lái)源:Linux閱碼場(chǎng) ? 作者:Linux閱碼場(chǎng) ? 2022-06-23 10:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

思考:

1、 SOC一上電,只有一個(gè)核啟動(dòng),還是所有核都啟動(dòng)?

2、如果SOC一上電,如果只有一個(gè)核啟動(dòng),那么從核啟動(dòng)的時(shí)候,從核的入口是哪里?

3、啥是cold boot?啥時(shí)warm boot? 在哪些場(chǎng)景下會(huì)使用warm boot?4、啥是cold reset/warm reset/primary boot/senondary boot?

說(shuō)明:

1、本文以為armv8-aarch64、armv9為例、TF-A代碼為例,不討論其它硬件架構(gòu)和固件軟件中的設(shè)計(jì)。

2、重點(diǎn)講述cold reset/warm reset/primary boot/senondary boot之間的流程和概念。

1、基礎(chǔ)概念

請(qǐng)先自行理解以下4個(gè)概念:

  • cold boot

  • warm boot

  • Primary boot

  • Secondary boot

另外還兩種配置:

  • 你的reset地址是可編程的,則會(huì)配置PROGRAMMABLE_RESET_ADDRESS=1,與之對(duì)立的則是你的reset地址是不可編程的。

  • 你在SOC啟動(dòng)的時(shí)候,首先只啟動(dòng)一個(gè)core,則會(huì)配置COLD_BOOT_SINGLE_CPU=1,與之對(duì)立的則是你的SOC啟動(dòng)的時(shí)候,所有core都上電了。

2、啟動(dòng)流程

我們就假定 reset地址是可編程的、SOC啟動(dòng)的時(shí)候只啟動(dòng)一個(gè)core,來(lái)講解我們的boot流程:

(1)、SOC一上電,SOC給ARM Core的signal configuration會(huì)改變RVBAR_EL3,這里一般就是就是bootrom的首地址。即CPU一上電,Primary core的PC指向的就是RVBAR_EL3的地址,機(jī)器就開(kāi)始啟動(dòng)了。

(2)、當(dāng)需要Secondary Core啟動(dòng)的時(shí)候,例如會(huì)走PSCI協(xié)議,【主核】進(jìn)入ATF會(huì)將bl31_warm_entrypoint(或平臺(tái)自定義的地址)寫(xiě)入到SOC寄存器,改變r(jià)eset地址(改變RVBAR_EL3的值),然后此時(shí)SOC的PMIC給Secondary Core上電,此時(shí)Secondary Core也就發(fā)生了cold reset,PC從RVBAR_EL3(bl31_warm_entrypoint或平臺(tái)自定義函數(shù))處開(kāi)始執(zhí)行.

總結(jié)(針對(duì)本文示例情況:reset地址是可編程的、cold boot的時(shí)候只啟動(dòng)一個(gè)cpu):

  • 開(kāi)機(jī)一上電只有Primary Core再跑,從RVBAR_EL3處開(kāi)始跑,屬于cold boot

  • 從核啟動(dòng)時(shí),會(huì)修改reset的值,影響到RVBAR_EL3的值,然后給從核上電,此時(shí)屬于Secondary boot,仍然是cold boot.

  • 一般會(huì)將bl31_warm_entrypoint設(shè)置為reset地址,即Secondary Core的啟動(dòng)地址;

  • 這個(gè)示例中沒(méi)有用到warm boot

3、ATF(TF-A)代碼的剖析

以BL1代碼為例分析,該代碼適配支持cold reset/warm reset/primary boot/senondary boot等諸多場(chǎng)景。

c8e8583c-f288-11ec-ba43-dac502259ad0.png

  • 如果reset是可編程的,PROGRAMMABLE_RESET_ADDRESS=1, 則_warm_boot_mailbox=0,則下面這段代碼不會(huì)被編譯,無(wú)論cold boot還是warm boot都不會(huì)走_warm_boot_mailbox。

  • 如果reset是可編程的,PROGRAMMABLE_RESET_ADDRESS=0, 則_warm_boot_mailbox=1,則下面這段代碼會(huì)被編譯,但cold boot走do_cold_boot流程,warm boot需要走br x0流程


	
  1. .if \_warm_boot_mailbox

  2. /* -------------------------------------------------------------

  3. * This code will be executed for both warm and cold resets.

  4. * Now is the time to distinguish between the two.

  5. * Query the platform entrypoint address and if it is not zero

  6. * then it means it is a warm boot so jump to this address.

  7. * -------------------------------------------------------------

  8. */

  9. bl plat_get_my_entrypoint

  10. cbz x0, do_cold_boot

  11. br x0

  12. do_cold_boot:

  13. .endif /* _warm_boot_mailbox */

  • 如果SOC啟動(dòng)的時(shí)候只啟動(dòng)一個(gè)core,COLD_BOOT_SINGLE_CPU=1,_secondary_cold_boot=0,則下面代碼不被編譯, 則無(wú)論主核還是從核都不需要走_secondary_cold_boot流程

  • 如果SOC啟動(dòng)的時(shí)候啟動(dòng)多個(gè)core,COLD_BOOT_SINGLE_CPU=0,_secondary_cold_boot=1, 則下面代碼會(huì)被編譯,則主核走do_primary_cold_boot流程, 從核需要走plat_secondary_cold_boot_setup流程


	
  1. .if \_secondary_cold_boot

  2. /* -------------------------------------------------------------

  3. * Check if this is a primary or secondary CPU cold boot.

  4. * The primary CPU will set up the platform while the

  5. * secondaries are placed in a platform-specific state until the

  6. * primary CPU performs the necessary actions to bring them out

  7. * of that state and allows entry into the OS.

  8. * -------------------------------------------------------------

  9. */

  10. bl plat_is_my_cpu_primary

  11. cbnz w0, do_primary_cold_boot

  12. /* This is a cold boot on a secondary CPU */

  13. bl plat_secondary_cold_boot_setup

  14. /* plat_secondary_cold_boot_setup() is not supposed to return */

  15. bl el3_panic

  16. do_primary_cold_boot:

根據(jù)以上的代碼規(guī)則,這里也畫(huà)了兩張圖:

(1)、BL2 at EL3的場(chǎng)景

c8fe1f5a-f288-11ec-ba43-dac502259ad0.png

(2)、BL2 at S-EL1的場(chǎng)景

c922fc4e-f288-11ec-ba43-dac502259ad0.png

4、軟件如何判斷當(dāng)前是cold reset/warm reset/primary boot/senondary boot

TF-A中定義了多核的啟動(dòng)框架,如上一節(jié)框圖所示,在啟動(dòng)的過(guò)程中會(huì)進(jìn)行一些判斷,是cold reset還是warm reset,是primary boot還是secondary boot?那么代碼中是怎么知道這些狀態(tài)的呢?

4.1 cold reset和warm reset

這種判斷方法由平臺(tái)實(shí)現(xiàn),其實(shí)就是讀取mailbox的值。

在第一個(gè)核cold boot時(shí),會(huì)寫(xiě)mailbox內(nèi)存(magic,entrypoint...)在第二個(gè)核啟動(dòng)時(shí)、或第一個(gè)核再次啟動(dòng)時(shí)(有可能是resume喚醒時(shí)),會(huì)讀取mailbox內(nèi)存,如果讀取到了符合期望的magic的值,則走warm流程,否則走cold流程。注意這里所說(shuō)的warm流程,只是軟件上的warm流程,并非說(shuō)當(dāng)前是warm reset。

4.2 primary boot和secondary boot

這種判斷方法由平臺(tái)實(shí)現(xiàn),看似也很簡(jiǎn)單,一般而言就說(shuō)讀取mpidr寄存器進(jìn)行判斷。


	
  1. (trusted-firmware-a/plat/marvell/armada/a8k/common/aarch64/plat_helpers.S)

  2. func plat_is_my_cpu_primary

  3. mrs x0, mpidr_el1

  4. and x0, x0,

    #(MPIDR_CLUSTER_MASK | MPIDR_CPU_MASK)

  5. cmp x0, #MVEBU_PRIMARY_CPU

  6. cset w0, eq

  7. ret

  8. endfunc plat_is_my_cpu_primary

5、mailbox的介紹

5.1 mailbox是什么

mailbox就說(shuō)一塊內(nèi)存,所有的core都能訪問(wèn)這塊內(nèi)存。第一次啟動(dòng)時(shí),core會(huì)填充mailbox,將其下次resume時(shí)的地址、secondary core的啟動(dòng)地址、warm reset的地址寫(xiě)入到mailbox內(nèi)存中,這幾個(gè)地址其實(shí)是一個(gè)地址。同時(shí)也會(huì)將這個(gè)地址寫(xiě)入到SOC PMIC寄存器中,影響到RVBAR_EL3的值。

當(dāng)SOC一上電所有core都啟動(dòng)的這種情況下,主核會(huì)繼續(xù)跑,從核會(huì)在SOC一上電就進(jìn)入wfi狀態(tài)。當(dāng)從核需要繼續(xù)啟動(dòng)時(shí),該core從BL1 BL2 BL31正常流程啟動(dòng)時(shí),會(huì)在BL1、BL2 at EL3、BL31中,強(qiáng)制跳轉(zhuǎn)到mailbox的地址,跳過(guò)主核已經(jīng)初始化的部分;

當(dāng)SOC一上電,只有一個(gè)core上電的情況下,主核繼續(xù)跑,從核未上電。當(dāng)從核需要啟動(dòng)時(shí),相當(dāng)于cold reset,從核會(huì)直接從RVBAR_EL3處開(kāi)始跑,也就是你設(shè)置的entrypoint。

5.2 mailbox的作用

mailbox中定義了entrypoint地址,當(dāng)core從BL1 BL2 BL31正常流程啟動(dòng)時(shí),會(huì)在BL1、BL2 at EL3、BL31中,強(qiáng)制跳轉(zhuǎn)到mailbox的地址,以跳過(guò)已初始化的部分。

c933e6da-f288-11ec-ba43-dac502259ad0.png

5.3 mailbox的示例

其實(shí)就是定義了一塊內(nèi)存,主核第一次跑時(shí),會(huì)填充該內(nèi)存。主核第二次跑時(shí)或從和跑時(shí),檢測(cè)該內(nèi)存已經(jīng)填充過(guò)了,則走warm啟動(dòng)流程,即強(qiáng)制跳轉(zhuǎn)到mailbox中的address地址。

c94561b2-f288-11ec-ba43-dac502259ad0.png

6、具體場(chǎng)景的總結(jié)

  • 串口中斷中敲擊reboot命令、或系統(tǒng)panic時(shí)導(dǎo)致的機(jī)器重啟:在一些的SOC廠商設(shè)計(jì)中,應(yīng)該是code reboot。比如在Linux Kernel中敲擊reboot,到底層還是寫(xiě)的一些寄存器控制pmic(或PMU),直接給cpu下電了。然后再上電,SOC還是會(huì)給Core發(fā)送signal configuration,此時(shí)RVBAR_EL3又會(huì)變成ASIC設(shè)置的值.

  • Suspend和Resume:比如我在看ATF中的海思平臺(tái),在ATF的suspend函數(shù),將bl31_warm_entrypoint地址寫(xiě)入到了SOC PMIC的一個(gè)寄存器中(上電時(shí),該寄存器會(huì)影響的是RVBARADDR信號(hào))。此時(shí)系統(tǒng)深睡的時(shí)候,應(yīng)該是Linux Kernel調(diào)用到ATF,將bl31_warm_entrypoint地址寫(xiě)入到了pmu/pmic相關(guān)的寄存器中,在下一次reset時(shí),會(huì)影響到signal configuration繼而改變RVBAR_EL3的值。然后還會(huì)給各個(gè)模塊下電(給哪些模塊下電是SOC的設(shè)計(jì)和邏輯),最后再給ARM Core下電, 這就算是深睡了。Resume的時(shí)候,也是有一些SOC的硬件行為,然后再給Core上電,那給Core上電后,一上電執(zhí)行的是哪里?

    PC還是指向RVBAR_EL3中的地址,當(dāng)然這是我們suspend的時(shí)候更改過(guò)的,其實(shí)就是bl31_warm_entrypoint

  • RMR_EL3:本文中都沒(méi)有提到RMR_EL3。那么RMREL3是干啥的呢?這是ARM的一個(gè)feature,怎么用?是你自己的設(shè)計(jì),隨便你。你寫(xiě)RMR_EL3中的bit,就可以觸發(fā)warm reset. 一般的kernel dump、或者一些工具,就可以主動(dòng)觸發(fā)RMR_EL3,然后去干一些活. 還有在csdn上看到一篇高通soc的啟動(dòng)流程的博客,他們正常的啟動(dòng)流程中,某一個(gè)鏡像跳轉(zhuǎn)到另外一個(gè)鏡像時(shí),竟然就是寫(xiě)了一些RMR_EL3,觸發(fā)warm_reset,另外一個(gè)鏡像的地址恰好就是warm reset的跳轉(zhuǎn)地址。

審核編輯 :李倩


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

    關(guān)注

    40

    文章

    4638

    瀏覽量

    230334
  • 架構(gòu)
    +關(guān)注

    關(guān)注

    1

    文章

    537

    瀏覽量

    26650

原文標(biāo)題:SOC的多核啟動(dòng)流程詳解

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    是否可以重寫(xiě)TF 文件的內(nèi)容或添加新的 TF 文件?

    我有三個(gè) TF 文件(TF_Config_20MHz.txt、TF_Config_40MHz.txt、TF_Config_80MHz.txt)。 是否可以重寫(xiě)
    發(fā)表于 05-06 06:46

    LX2160 BootROM是否可以從 I2C 加載 RCW PBI,從 QSPI 加載 BL2?

    RCW PBI存儲(chǔ)在I2C EEPROM中 同時(shí),將BL2(TF-A)存儲(chǔ)在QSPI NOR閃存中 問(wèn)題: BootROM 是否可以從 I2C 獲取 RCW,然后通過(guò) PBI 塊讀取從 QSPI 獲取 BL2? 還是嚴(yán)格要求BL2必須與RCW(在本例中為I2C EEPROM)駐留在同一器件中?
    發(fā)表于 04-27 08:08

    深度剖析AD5122A/AD5142A數(shù)字電位器:特性、應(yīng)用與操作指南

    深度剖析AD5122A/AD5142A數(shù)字電位器:特性、應(yīng)用與操作指南 在電子設(shè)計(jì)領(lǐng)域,數(shù)字電位器憑借其高精度、可編程性和穩(wěn)定性,成為眾多應(yīng)用場(chǎng)景中的關(guān)鍵組件。AD5122A/AD51
    的頭像 發(fā)表于 04-16 17:05 ?392次閱讀

    AD9737A/AD9739A:高性能RF DAC的技術(shù)剖析與應(yīng)用指南

    AD9737A/AD9739A:高性能RF DAC的技術(shù)剖析與應(yīng)用指南 在當(dāng)今的電子技術(shù)領(lǐng)域,高性能的RF DAC(射頻數(shù)模轉(zhuǎn)換器)對(duì)于實(shí)現(xiàn)寬帶信號(hào)合成和通信系統(tǒng)的高效運(yùn)行至關(guān)重要。AD9737
    的頭像 發(fā)表于 04-13 11:15 ?242次閱讀

    CONFIG_STATIC_DDR 在 LS1028ARDB 上破壞 ATF 編譯的定義,怎么解決?

    in build_ls1028ardb/tmp/work/ls1028ardb-fsl-linux/qoriq-atf/2.10+/git/plat/nxp/soc-ls1028a/ls1028ardb
    發(fā)表于 04-09 06:09

    深入剖析Microchip HCS320 KEELOQ? 代碼跳變編碼器

    深入剖析Microchip HCS320 KEELOQ? 代碼跳變編碼器 在電子安全領(lǐng)域,遠(yuǎn)程無(wú)鑰匙進(jìn)入(RKE)系統(tǒng)的安全性至關(guān)重要。Microchip的HCS320 KEELOQ? 代碼跳變
    的頭像 發(fā)表于 04-07 11:00 ?161次閱讀

    Atmel ATECC508A CryptoAuthentication 設(shè)備的技術(shù)剖析與應(yīng)用探索

    Atmel ATECC508A CryptoAuthentication 設(shè)備的技術(shù)剖析與應(yīng)用探索 引言 在當(dāng)今數(shù)字化時(shí)代,信息安全愈發(fā)重要,尤其是在物聯(lián)網(wǎng)(IoT)等領(lǐng)域,設(shè)備的身份驗(yàn)證和數(shù)據(jù)安全
    的頭像 發(fā)表于 04-07 09:55 ?145次閱讀

    AD9054A:8位、200 MSPS ADC的技術(shù)剖析

    AD9054A:8位、200 MSPS ADC的技術(shù)剖析 在電子設(shè)計(jì)領(lǐng)域,模數(shù)轉(zhuǎn)換器(ADC)是連接模擬世界和數(shù)字世界的關(guān)鍵橋梁。今天,我們將深入探討Analog Devices公司的AD9054A
    的頭像 發(fā)表于 04-03 11:40 ?149次閱讀

    RZ/A2M Group芯片:技術(shù)剖析與設(shè)計(jì)應(yīng)用指南

    RZ/A2M Group芯片:技術(shù)剖析與設(shè)計(jì)應(yīng)用指南 在電子設(shè)計(jì)領(lǐng)域,選擇一款合適的芯片對(duì)于項(xiàng)目的成功至關(guān)重要。RZ/A2M Group芯片以其豐富的功能和良好的性能,成為眾多工程師的關(guān)注焦點(diǎn)。下面
    的頭像 發(fā)表于 04-01 13:55 ?237次閱讀

    Onsemi FQT1N80TF-WS N溝道MOSFET深度解析

    深入剖析Onsemi公司的FQT1N80TF-WS這款N溝道增強(qiáng)型功率MOSFET。 文件下載: FQT1N80TF-WS-D.PDF 產(chǎn)品概述 FQT1N80TF-WS采用了Onse
    的頭像 發(fā)表于 03-29 15:45 ?470次閱讀

    CS5371A/CS5372A:高性能ΔΣ調(diào)制器的技術(shù)剖析與應(yīng)用指南

    CS5371A/CS5372A:高性能ΔΣ調(diào)制器的技術(shù)剖析與應(yīng)用指南 在電子設(shè)計(jì)領(lǐng)域,對(duì)于高精度、低功耗的信號(hào)處理需求日益增長(zhǎng)。Cirrus Logic的CS5371A和CS5372
    的頭像 發(fā)表于 03-26 15:50 ?227次閱讀

    HCS300:高性能代碼跳頻編碼器的技術(shù)剖析與應(yīng)用

    HCS300:高性能代碼跳頻編碼器的技術(shù)剖析與應(yīng)用 在電子工程領(lǐng)域,安全與便捷是設(shè)計(jì)中永恒的追求。Microchip Technology Inc.推出的HCS300代碼跳頻編碼器,憑借其卓越的性能
    的頭像 發(fā)表于 03-17 17:30 ?475次閱讀

    如何使 i.MX93 上的 U-Boot SPL 和 ATF/BL31輸出靜音呢?

    上看到 SPL 和 ATF 輸出: U-Boot SPL 2023.04 gf8a2983ec83 p0 (2024 年 3 月 4 日 - 07:25:04 0000) SOC:0xa1009300
    發(fā)表于 03-09 08:28

    TF卡燒錄異常該如何處理?

    在燒錄固件到TF卡時(shí),您可能會(huì)遇到一些問(wèn)題,例如標(biāo)準(zhǔn)固件無(wú)法燒錄成功,或者某些TF卡可以正常燒錄,而其他卡則不行。為了解決這些問(wèn)題,我們建議您執(zhí)行以下兩個(gè)操作:1.TF卡硬件讀寫(xiě)檢測(cè)從
    的頭像 發(fā)表于 01-08 11:51 ?431次閱讀
    <b class='flag-5'>TF</b>卡燒錄異常該如何處理?

    開(kāi)源+安全雙引擎!STM32MPU白皮書(shū)解鎖可信系統(tǒng)構(gòu)建新范式

    硬件級(jí)安全+開(kāi)源生態(tài) 給出破局方案! 這份白皮書(shū)深度揭秘: ? 從0到1構(gòu)建信任鏈 :安全啟動(dòng)(Secure Boot)如何通過(guò)公私鑰認(rèn)證、固件簽名、OTP存儲(chǔ)實(shí)現(xiàn)“代碼未動(dòng),安全先行”? ? 開(kāi)源不妥協(xié)的安全性 :OpenSTLinux如何整合TF-A/
    的頭像 發(fā)表于 05-16 15:24 ?726次閱讀
    開(kāi)源+安全雙引擎!STM32MPU白皮書(shū)解鎖可信系統(tǒng)構(gòu)建新范式
    莆田市| 昌平区| 增城市| 抚顺市| 龙游县| 文登市| 武隆县| 读书| 长顺县| 丽江市| 仁化县| 新余市| 富裕县| 浮山县| 华宁县| 遂溪县| 多伦县| 临沭县| 石泉县| 朝阳县| 北碚区| 从江县| 互助| 汽车| 贵德县| 贡觉县| 西乌| 沙雅县| 安康市| 策勒县| 鹤庆县| 朔州市| 乌恰县| 绥江县| 沂南县| 固安县| 蕉岭县| 涡阳县| 乌鲁木齐市| 合山市| 正镶白旗|