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

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

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

armv8 u-boot的啟動(dòng)介紹

麥辣雞腿堡 ? 來源:CSDN博客 ? 作者:內(nèi)核新視界 ? 2023-12-07 11:09 ? 次閱讀

先看arm官網(wǎng)提供的一張圖:

圖片

上圖詳細(xì)概括了arm官方推薦的armv8的啟動(dòng)層次結(jié)構(gòu):

官方將啟動(dòng)分為了BL1,BL2,BL31,BL32,BL33階段,根據(jù)順序,芯片啟動(dòng)后首先執(zhí)行BL1階段代碼,接著驗(yàn)簽啟動(dòng)BL2,BL2根據(jù)具體設(shè)計(jì)啟動(dòng)BL31或者BL33,BL32只有在有BL31時(shí)才可能會(huì)存在并被驗(yàn)簽加載啟動(dòng)。

armv8分為Secure World和Non-Secure World(Normal World),四種異常級(jí)別從高到低分別為EL3,EL2,EL1,EL0。

? Secure World就是可以執(zhí)行可信的firmware和app,比如密碼支付,指紋識(shí)別等一系列依賴安全保證的服務(wù)。

? Non-Secure World就是我們常見的u-boot,linux,qnx等裸機(jī)程序或者操作系統(tǒng)

? EL3具有最高管理權(quán)限,負(fù)責(zé)安全監(jiān)測(cè)和安全模式切換。

? EL2主要提供了對(duì)虛擬化的支持。

? EL1是一個(gè)特權(quán)模式,能夠執(zhí)行一些特權(quán)指令,用于運(yùn)行各類操作系統(tǒng),在安全模式則是可信任OS。

? EL0是無特權(quán)模式,所有APP應(yīng)用都在EL0。

上圖中的BL1,BL2,BL31,BL32,BL33分別對(duì)應(yīng)如下功能:

? BL1:是一切信任的根,一般就是固化在ROM中的一段啟動(dòng)加載代碼,用于引導(dǎo)bl2,并對(duì)bl2進(jìn)行驗(yàn)簽保證可信任執(zhí)行;

?BL2:一般是在flash中的一段可信安全啟動(dòng)代碼,它的可信建立在bl1對(duì)它的驗(yàn)證,主要完成一些平臺(tái)相關(guān)的初始化,比如對(duì)ddr的初始化等,并在完成初始化后尋找BL31或者BL33進(jìn)行執(zhí)行;如果找到了BL31則不會(huì)繼續(xù)調(diào)用BL33,如果沒有BL31則BL33必須有;

?BL31:BL31不像BL1和BL2是一次性運(yùn)行的,它作為最后一道可信任固件存在,在系統(tǒng)運(yùn)行時(shí)通過smc指令陷入EL3調(diào)用系統(tǒng)安全服務(wù)或者在Secure World和Non-Secure World之間進(jìn)行切換;在完成BL31初始化后會(huì)去尋找BL32或者BL33進(jìn)行驗(yàn)簽后加載執(zhí)行;

? BL32:OPTee OS + 安全app,它是一個(gè)可信安全的OS運(yùn)行在EL1并在EL0啟動(dòng)可信任APP(上述的指紋驗(yàn)證等app),并在Trust OS運(yùn)行完成后通過smc指令返回BL31,BL31切換到Non-Seucre World繼續(xù)執(zhí)行BL33;

? BL33:非安全固件,也就是我們常見的UEFI firmware或者u-boot也可能是直接啟動(dòng)Linux
kernel;啟動(dòng)BL1,BL2,BL31,BL32則是一個(gè)完整的ATF信任鏈建立流程(ARM Trusted Firmware),像常見的PSCI(Power State Coordination Interface)功能則是在ATF的BL31上實(shí)現(xiàn);

最后一張圖完整展示整個(gè)調(diào)用流程:

圖片

BL2根據(jù)是否存在BL31和BL32可選擇性的加載不同firmware;

綜上所述可知u-boot是一個(gè)運(yùn)行在非安全世界的bootloader,負(fù)責(zé)加載各類操作系統(tǒng),并提供豐富的驅(qū)動(dòng)接口

并根據(jù)是否存在安全固件還可以進(jìn)行不同的boot流程,如下。

?u-boot,u-boot-spl,u-boot-tpl的關(guān)系:對(duì)于一般嵌入式而言只需要一個(gè)u-boot作為bootloader即可,但是在小內(nèi)存,或者有atf的情況下還可以有spl,tpl;

? spl:Secondary Program Loader,二級(jí)加載器

? tpl:Tertiary Program Loader,三級(jí)加載器

出現(xiàn)spl和tpl的原因最開始是因?yàn)橄到y(tǒng)sram太小,rom無法在ddr未初始化的情況下一次性把所有代碼從flash,emmc,usb等搬運(yùn)到sram中執(zhí)行,也或者是flash太小,無法完整放下整個(gè)u-boot來進(jìn)行片上執(zhí)行。

所以u(píng)-boot又定義了spl和tpl,spl和tpl走u-boot完全相同的boot流程,不過在spl和tpl中大多數(shù)驅(qū)動(dòng)和功能被去除了,根據(jù)需要只保留一部分spl和tpl需要的功能,通過CONFIG_SPL_BUILD和CONFIG_TPL_BUILD控制;

一般只用spl就足夠了,spl完成ddr初始化,并完成一些外設(shè)驅(qū)動(dòng)初始化,比如usb,emmc,以此從其他外圍設(shè)備加載u-boot,但是如果對(duì)于小系統(tǒng)spl還是太大了,則可以繼續(xù)加入tpl,tpl只做ddr等的特定初始化保證代碼體積極小,以此再次從指定位置加載spl,spl再去加載u-boot。

從目前來看,spl可以取代上圖中bl2的位置,或者bl1,根據(jù)具體廠商實(shí)現(xiàn)來決定,有一些芯片廠商會(huì)將spl固化在rom中,使其具有從emmc,usb等設(shè)備加載u-boot或者其他固件的能力。

當(dāng)然在有atf的情況下可以由atf加載u-boot,或者由spl加載atf,atf再去加載u-boot。

甚至在快速啟動(dòng)的系統(tǒng)中可以直接由spl啟動(dòng)加載linux等操作系統(tǒng)而跳過啟動(dòng)u-boot;

在上圖中arm官方只是給出了一個(gè)建議的啟動(dòng)信任鏈,具體實(shí)現(xiàn)都需要芯片廠商來決定;

后續(xù)分析啟動(dòng)流程中會(huì)在具有SPL和TPL的地方拓展它們的分叉執(zhí)行路徑盡量把SPL和TPL的功能也一并分析;

聲明:本文內(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)注

    452

    文章

    50206

    瀏覽量

    420896
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9027

    瀏覽量

    366479
  • Uboot
    +關(guān)注

    關(guān)注

    4

    文章

    125

    瀏覽量

    28125
  • 系統(tǒng)
    +關(guān)注

    關(guān)注

    1

    文章

    1006

    瀏覽量

    21292
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    U-Boot介紹

    在移植 Linux之前我們需要先移植一個(gè) bootloader 代碼,這個(gè) bootloader 代碼用于啟動(dòng) Linux 內(nèi)核, bootloader有很多,常用的就是 U-Boot
    的頭像 發(fā)表于 10-08 10:50 ?3891次閱讀

    U-boot的基本介紹

    從本文開始,將陸續(xù)推送“手把手教你移植U-boot”系列文章,目標(biāo)是由淺入深地講解U-boot的工作流程、原理、配置方法和移植方法,手把手教你完成U-boot的移植工作,默認(rèn)硬件開發(fā)平臺(tái)為ARM,操作系統(tǒng)為Linux。
    發(fā)表于 07-14 16:52 ?2722次閱讀
    <b class='flag-5'>U-boot</b>的基本<b class='flag-5'>介紹</b>

    U-BOOT啟動(dòng)流程分享

    Bootloader移植(下)U-BOOT 啟動(dòng)流程u-boot啟動(dòng)三個(gè)2啟動(dòng)步驟(重點(diǎn))U-boot
    發(fā)表于 01-18 10:17

    基于armv8架構(gòu)對(duì)u-boot進(jìn)行啟動(dòng)流程分析(一)

    的開發(fā)調(diào)試文檔與強(qiáng)大的網(wǎng)絡(luò)技術(shù)支持;基于以上理由本篇文章對(duì)現(xiàn)在主流的armv8架構(gòu)的u-boot啟動(dòng)流程進(jìn)行詳細(xì)分析,以便所有人快速學(xué)習(xí)和理解u-boot的工作流程。2
    發(fā)表于 05-23 15:59

    基于armv8架構(gòu)對(duì)u-boot進(jìn)行啟動(dòng)流程分析(二)

    boot參數(shù),進(jìn)行地址無關(guān)fixed,系統(tǒng)寄存器復(fù)位,底層平臺(tái)相關(guān)初始化等,啟動(dòng)代碼位于arch/arm/cpu/armv8/start.S,入口地址為_start。1.1 啟動(dòng)前為后
    發(fā)表于 05-23 16:05

    U-Boot啟動(dòng)及移植分析

    bootloader 開發(fā)是嵌入式系統(tǒng)必不可少而且十分重要的部分,U-Boot 為功能強(qiáng)大的bootloader 開發(fā)軟件。本文詳細(xì)分析了U-Boot啟動(dòng)流程,并結(jié)合其源碼,闡述了U-Bo
    發(fā)表于 09-01 16:34 ?27次下載

    嵌入式U-BOOT啟動(dòng)流程及移植

    摘要:嵌入式系統(tǒng)一般沒有通用的bootloader,u-boot是功能強(qiáng)大的bootloader開發(fā)軟件,但相對(duì)也比較復(fù)雜。文中對(duì)u-boot啟動(dòng)流程作了介紹,詳細(xì)給出了
    發(fā)表于 02-25 16:00 ?59次下載

    u-boot簡介

    U-Boot,全稱 Universal Boot Loader,是遵循GPL條款的開放源碼項(xiàng)目。U-Boot的作用是系統(tǒng)引導(dǎo)。U-Boot從FADSROM、
    發(fā)表于 10-14 11:17 ?3532次閱讀

    fireflyFace-RK3399主板U-Boot模式啟動(dòng)

    RK U-Boot 基于開源的 U-Boot 進(jìn)行開發(fā),工作模式有啟動(dòng)加載模式和下載模式。
    的頭像 發(fā)表于 12-04 08:52 ?4466次閱讀
    fireflyFace-RK3399主板<b class='flag-5'>U-Boot</b>模式<b class='flag-5'>啟動(dòng)</b>

    fireflyAIO-3399C主板U-Boot介紹

    RK U-Boot 基于開源的 U-Boot 進(jìn)行開發(fā),工作模式有啟動(dòng)加載模式和下載模式。
    的頭像 發(fā)表于 12-04 10:31 ?1403次閱讀

    fireflyAIO-3288C主板U-Boot介紹

    RK U-Boot 基于開源的 U-Boot 進(jìn)行開發(fā),工作模式有啟動(dòng)加載模式和下載模式。
    的頭像 發(fā)表于 12-16 13:52 ?1123次閱讀
    fireflyAIO-3288C主板<b class='flag-5'>U-Boot</b><b class='flag-5'>介紹</b>

    fireflyAIO-3399J主板U-Boot使用介紹

    RK U-Boot 基于開源的 U-Boot 進(jìn)行開發(fā),工作模式有啟動(dòng)加載模式和下載模式。
    的頭像 發(fā)表于 12-24 10:00 ?1600次閱讀
    fireflyAIO-3399J主板<b class='flag-5'>U-Boot</b>使用<b class='flag-5'>介紹</b>

    基于armv8架構(gòu)來對(duì)u-boot進(jìn)行啟動(dòng)流程分析

    首先引用wiki上的簡介:u-boot 是一個(gè)主要用于嵌入式系統(tǒng)的引導(dǎo)加載程序,可以支持多種不同的計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)。
    發(fā)表于 06-09 09:39 ?770次閱讀
    基于<b class='flag-5'>armv8</b>架構(gòu)來對(duì)<b class='flag-5'>u-boot</b>進(jìn)行<b class='flag-5'>啟動(dòng)</b>流程分析

    u-boot armv8鏈接腳本

    u-boot armv8鏈接腳本 在進(jìn)行源碼分析之前,首先看看u-boot的鏈接腳本,通過鏈接腳本可以從整體了解一個(gè)u-boot的組成,并且可以在
    的頭像 發(fā)表于 12-07 11:19 ?566次閱讀

    u-boot在匯編啟動(dòng)階段的相關(guān)操作介紹

    boot參數(shù), 進(jìn)行地址無關(guān)fixed,系統(tǒng)寄存器復(fù)位,底層平臺(tái)相關(guān)初始化等 ,啟動(dòng)代碼位于arch/arm/cpu/armv8/start.S, 入口地址為_start。 啟動(dòng)前為后
    的頭像 發(fā)表于 12-07 11:22 ?557次閱讀