一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

uboot的啟動BL1和BL2兩個階段介紹

麥辣雞腿堡 ? 來源:TrustZone ? 作者:Hcoco ? 2023-12-04 17:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

之前對這個uboot的源碼了解有些許遺忘。最近做AVB校驗,需要uboot到kernel的這個過程。這里再復習一下。

與大多數(shù)BootLoader一樣,uboot的啟動過程分為BL1和BL2兩個階段。

BL1階段通常是開發(fā)板的配置等設(shè)備初始化代碼,需要依賴依賴于SoC體系結(jié)構(gòu),通常用匯編語言來實現(xiàn);

BL2階段主要是對外部設(shè)備如網(wǎng)卡、Flash等的初始化以及uboot命令集等的自身實現(xiàn),通常用C語言來實現(xiàn)。

1、BL1階段

uboot的BL1階段代碼通常放在start.s文件中,用匯編語言實現(xiàn),其主要代碼功能如下:

? (1) 指定uboot的入口。在鏈接腳本uboot.lds中指定uboot的入口為start.S中的_start。

? (2)設(shè)置異常向量(exception vector)

? (3)關(guān)閉IRQ、FIQ,設(shè)置SVC模式

? (4)關(guān)閉L1 cache、設(shè)置L2 cache、關(guān)閉MMU

? (5)根據(jù)OM引腳確定啟動方式

? (6)在SoC內(nèi)部SRAM中設(shè)置棧

? (7)lowlevel_init(主要初始化系統(tǒng)時鐘、SDRAM初始化、串口初始化等)

? (8)設(shè)置開發(fā)板供電鎖存

? (9)設(shè)置SDRAM中的棧

? (10)將uboot從SD卡拷貝到SDRAM中

? (11)設(shè)置并開啟MMU

? (12)通過對SDRAM整體使用規(guī)劃,在SDRAM中合適的地方設(shè)置棧

? (13)清除bss段,遠跳轉(zhuǎn)到start_armboot執(zhí)行,BL1階段執(zhí)行完

2、BL2階段

start_armboot函數(shù)位于lib_arm/board.c中,是C語言開始的函數(shù),也是BL2階段代碼中C語言的 主函數(shù),同時還是整個u-boot(armboot)的主函數(shù),BL2階段的主要功能如下:

? (1)規(guī)劃uboot的內(nèi)存使用

? (2)遍歷調(diào)用函數(shù)指針數(shù)組init_sequence中的初始化函數(shù)

? (3)初始化uboot的堆管理器mem_malloc_init

? (4)初始化SMDKV210開發(fā)板的SD/MMC控制器mmc_initialize

? (5)環(huán)境變量重定位env_relocate

? (6)將環(huán)境變量中網(wǎng)卡地址賦值給全局變量的開發(fā)板變量

? (7)開發(fā)板硬件設(shè)備的初始化devices_init

? (8)跳轉(zhuǎn)表jumptable_init

? (9)控制臺初始化console_init_r

? (10)網(wǎng)卡芯片初始化eth_initialize

? (11)uboot進入主循環(huán)main_loop

這里主要對第二個階段BL2進行一個分析。

3、start_armboot函數(shù)分析

start_armboot函數(shù)的主要功能如下:

? (1)遍歷調(diào)用函數(shù)指針數(shù)組init_sequence中的初始化函數(shù)

依次遍歷調(diào)用函數(shù)指針數(shù)組init_sequence中的函數(shù),如果有函數(shù)執(zhí)行出錯,則執(zhí)行hang函數(shù),打印出”### ERROR ### Please RESET the board ###”,進入死循環(huán)。

? (2)初始化uboot的堆管理器mem_malloc_init

? (3)初始化SMDKV210的SD/MMC控制器mmc_initialize

? (4)環(huán)境變量重定位env_relocate

? (5)將環(huán)境變量中網(wǎng)卡地址賦值給全局變量的開發(fā)板變量

? (6)開發(fā)板硬件設(shè)備的初始化devices_init

? (7)跳轉(zhuǎn)表jumptable_init

? (8)控制臺初始化console_init_r

? (9)網(wǎng)卡芯片初始化eth_initialize

? (10)uboot進入主循環(huán)main_loop

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

    關(guān)注

    38

    文章

    4392

    瀏覽量

    222797
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4381

    瀏覽量

    64898
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5682

    瀏覽量

    104824
  • Uboot
    +關(guān)注

    關(guān)注

    4

    文章

    129

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    tiny210上uboot啟動分析

    (0xd002_0000處,其中0xd002_0010之前的16字節(jié)儲存BL1的校驗信息和BL1尺寸)中,并對BL1進行校驗,校驗OK轉(zhuǎn)入BL1
    發(fā)表于 06-27 17:04

    【OK210試用體驗】S5PV210 IROM BL0啟動

    ,在啟動引導階段兩個作用:一是IROM運行時使用的數(shù)據(jù)變量所在的區(qū)域,二是IROM,即BL0會將外存中的BL1引導到該區(qū)域中。因為IROM
    發(fā)表于 07-23 15:35

    【OK210試用體驗】+ 《uboot啟動過程分析》

    ,其中0xd002_0010之前的16字節(jié)存儲的的BL1的校驗信息和BL1尺寸)中,并對BL1進行校驗,檢驗OK轉(zhuǎn)入BL1進行執(zhí)行;
    發(fā)表于 08-25 12:36

    【OK210試用體驗】+ 《uboot啟動過程分析》

    (DDR);BL2加載內(nèi)核,把OS在SDRAM中運行起來,最終OS是運行在SDRAM(內(nèi)存)中的。在這個過程中,u-boot需要初始化的硬件是CPU和DDR,所以,這兩個硬件必須在u-boot階段就做
    發(fā)表于 08-26 21:12

    【NanoPi M2試用體驗】+SD卡啟動BL1拷貝BL2到DDR2中運行

    裸機程序SD卡啟動BL1拷貝BL2到DDR2中運行;代碼的拷貝會用到一些指針函數(shù),第一參數(shù)為SD卡存放
    發(fā)表于 06-11 17:03

    S5PV210uboot啟動過程分析

    BL1 尺寸)中,并對 BL1 進行校驗,校驗 OK 轉(zhuǎn)入 BL1 進行執(zhí)行; BL1 繼續(xù)初始化,并將 BL2 復制到 IRAM 中并
    發(fā)表于 11-15 10:50

    自制s5pv210啟動ubootBL1代碼

    自制s5pv210啟動ubootBL1代碼
    發(fā)表于 02-10 23:21

    關(guān)于iTop4412 iROM階段啟動流程簡析

    iTop4412 irom啟動和Exynos4212 iROM Booting Guide是一樣的。iROM階段啟動流程本次介紹如何構(gòu)建Exynos4412中的
    發(fā)表于 04-21 11:45

    TF-A的不同啟動階段有哪些

    不同的啟動階段,按照鏈式結(jié)構(gòu)依次啟動,ATF 代碼啟動流程如圖所示: 當芯片復位以后首先運行 bl1 代碼,
    的頭像 發(fā)表于 09-11 16:54 ?1420次閱讀
    TF-A的不同<b class='flag-5'>啟動</b><b class='flag-5'>階段</b>有哪些

    啟動(Cold boot)流程及階段劃分

    restart--冷啟動 reset--熱啟動 ATF冷啟動實現(xiàn)分為5步驟: ? BL1 - AP Trusted ROM,一般為Boot
    的頭像 發(fā)表于 11-07 15:17 ?3730次閱讀
    冷<b class='flag-5'>啟動</b>(Cold boot)流程及<b class='flag-5'>階段</b>劃分

    code層面 ATF中bl1啟動

    系統(tǒng)上電之后首先會運行ChipRom,之后會跳轉(zhuǎn)到ATF的bl1中繼續(xù)執(zhí)行。bl1主要初始化CPU、設(shè)定異常向量、將bl2的鏡像加載到安全RAM中,然后跳轉(zhuǎn)到bl2中開始運行。
    的頭像 發(fā)表于 11-07 15:53 ?1666次閱讀
    code層面 ATF中<b class='flag-5'>bl1</b>的<b class='flag-5'>啟動</b>

    ATF中bl2啟動

    bl2_entrypoint。該函數(shù)定義在bl2/aarch64/bl2_entrypoint.S文件中。該階段的執(zhí)行流程如圖所示。 bl2
    的頭像 發(fā)表于 11-07 15:59 ?1269次閱讀
    ATF中<b class='flag-5'>bl2</b>的<b class='flag-5'>啟動</b>

    ATF中如何用函數(shù)完成bl2啟動

    bl2_main函數(shù) bl2_main函數(shù)完成了bl2階段的主要操作,包括 ? 對下一階段鏡像
    的頭像 發(fā)表于 11-07 16:04 ?1114次閱讀

    ATF中bl2bl31的跳轉(zhuǎn)介紹

    bl2bl31的跳轉(zhuǎn) 在bl2_main函數(shù)中最終會調(diào)用smc(BL1_SMC_RUN_IMAGE,(unsigned long)next_bl
    的頭像 發(fā)表于 11-07 16:09 ?1444次閱讀

    armv8 u-boot的啟動介紹

    先看arm官網(wǎng)提供的一張圖: 上圖詳細概括了arm官方推薦的armv8的啟動層次結(jié)構(gòu): 官方將啟動分為了BL1,BL2,BL31,
    的頭像 發(fā)表于 12-07 11:09 ?3393次閱讀
    armv8 u-boot的<b class='flag-5'>啟動</b><b class='flag-5'>介紹</b>