0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

uboot的启动BL1和BL2两个阶段介绍

麦辣鸡腿堡 来源:TrustZone 作者:Hcoco 2023-12-04 17:53 次阅读

之前对这个uboot的源码了解有些许遗忘。最近做AVB校验,需要uboot到kernel的这个过程。这里再复习一下。

与大多数BootLoader一样,uboot的启动过程分为BL1和BL2两个阶段。

BL1阶段通常是开发板的配置等设备初始化代码,需要依赖依赖于SoC体系结构,通常用汇编语言来实现;

BL2阶段主要是对外部设备如网卡、Flash等的初始化以及uboot命令集等的自身实现,通常用C语言来实现。

1、BL1阶段

uboot的BL1阶段代码通常放在start.s文件中,用汇编语言实现,其主要代码功能如下:

• (1) 指定uboot的入口。在链接脚本uboot.lds中指定uboot的入口为start.S中的_start。

• (2)设置异常向量(exception vector)

• (3)关闭IRQ、FIQ,设置SVC模式

• (4)关闭L1 cache、设置L2 cache、关闭MMU

• (5)根据OM引脚确定启动方式

• (6)在SoC内部SRAM中设置栈

• (7)lowlevel_init(主要初始化系统时钟SDRAM初始化、串口初始化等)

• (8)设置开发板供电锁存

• (9)设置SDRAM中的栈

• (10)将uboot从SD卡拷贝到SDRAM中

• (11)设置并开启MMU

• (12)通过对SDRAM整体使用规划,在SDRAM中合适的地方设置栈

• (13)清除bss段,远跳转到start_armboot执行,BL1阶段执行完

2、BL2阶段

start_armboot函数位于lib_arm/board.c中,是C语言开始的函数,也是BL2阶段代码中C语言的 主函数,同时还是整个u-boot(armboot)的主函数,BL2阶段的主要功能如下:

• (1)规划uboot的内存使用

• (2)遍历调用函数指针数组init_sequence中的初始化函数

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

• (4)初始化SMDKV210开发板的SD/MMC控制器mmc_initialize

• (5)环境变量重定位env_relocate

• (6)将环境变量中网卡地址赋值给全局变量的开发板变量

• (7)开发板硬件设备的初始化devices_init

• (8)跳转表jumptable_init

• (9)控制台初始化console_init_r

• (10)网卡芯片初始化eth_initialize

• (11)uboot进入主循环main_loop

这里主要对第二个阶段BL2进行一个分析。

3、start_armboot函数分析

start_armboot函数的主要功能如下:

• (1)遍历调用函数指针数组init_sequence中的初始化函数

依次遍历调用函数指针数组init_sequence中的函数,如果有函数执行出错,则执行hang函数,打印出”### ERROR ### Please RESET the board ###”,进入死循环。

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

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

• (4)环境变量重定位env_relocate

• (5)将环境变量中网卡地址赋值给全局变量的开发板变量

• (6)开发板硬件设备的初始化devices_init

• (7)跳转表jumptable_init

• (8)控制台初始化console_init_r

• (9)网卡芯片初始化eth_initialize

• (10)uboot进入主循环main_loop

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • soc
    soc
    +关注

    关注

    38

    文章

    4165

    浏览量

    218239
  • 函数
    +关注

    关注

    3

    文章

    4331

    浏览量

    62604
  • 开发板
    +关注

    关注

    25

    文章

    5050

    浏览量

    97456
  • Uboot
    +关注

    关注

    4

    文章

    125

    浏览量

    28229
收藏 人收藏

    评论

    相关推荐

    tiny210上uboot启动分析

    (0xd002_0000处,其中0xd002_0010之前的16字节储存BL1的校验信息和BL1尺寸)中,并对BL1进行校验,校验OK转入BL1
    发表于 06-27 17:04

    【OK210试用体验】S5PV210 IROM BL0启动

    ,在启动引导阶段两个作用:一是IROM运行时使用的数据变量所在的区域,二是IROM,即BL0会将外存中的BL1引导到该区域中。因为IROM
    发表于 07-23 15:35

    【OK210试用体验】+ 《uboot启动过程分析》

    ,其中0xd002_0010之前的16字节存储的的BL1的校验信息和BL1尺寸)中,并对BL1进行校验,检验OK转入BL1进行执行;
    发表于 08-25 12:36

    【OK210试用体验】+ 《uboot启动过程分析》

    (DDR);BL2加载内核,把OS在SDRAM中运行起来,最终OS是运行在SDRAM(内存)中的。在这个过程中,u-boot需要初始化的硬件是CPU和DDR,所以,这两个硬件必须在u-boot阶段就做
    发表于 08-26 21:12

    【NanoPi M2试用体验】+SD卡启动BL1拷贝BL2到DDR2中运行

    裸机程序SD卡启动BL1拷贝BL2到DDR2中运行;代码的拷贝会用到一些指针函数,第一参数为SD卡存放
    发表于 06-11 17:03

    S5PV210uboot启动过程分析

    BL1 尺寸)中,并对 BL1 进行校验,校验 OK 转入 BL1 进行执行; BL1 继续初始化,并将 BL2 复制到 IRAM 中并
    发表于 11-15 10:50

    自制s5pv210启动ubootBL1代码

    自制s5pv210启动ubootBL1代码
    发表于 02-10 23:21

    关于iTop4412 iROM阶段启动流程简析

    iTop4412 irom启动和Exynos4212 iROM Booting Guide是一样的。iROM阶段启动流程本次介绍如何构建Exynos4412中的
    发表于 04-21 11:45

    TF-A的不同启动阶段有哪些

    不同的启动阶段,按照链式结构依次启动,ATF 代码启动流程如图所示: 当芯片复位以后首先运行 bl1 代码,
    的头像 发表于 09-11 16:54 925次阅读
    TF-A的不同<b class='flag-5'>启动</b><b class='flag-5'>阶段</b>有哪些

    启动(Cold boot)流程及阶段划分

    restart--冷启动 reset--热启动 ATF冷启动实现分为5步骤: • BL1 - AP Trusted ROM,一般为Boot
    的头像 发表于 11-07 15:17 2364次阅读
    冷<b class='flag-5'>启动</b>(Cold boot)流程及<b class='flag-5'>阶段</b>划分

    code层面 ATF中bl1启动

    系统上电之后首先会运行ChipRom,之后会跳转到ATF的bl1中继续执行。bl1主要初始化CPU、设定异常向量、将bl2的镜像加载到安全RAM中,然后跳转到bl2中开始运行。
    的头像 发表于 11-07 15:53 1078次阅读
    code层面 ATF中<b class='flag-5'>bl1</b>的<b class='flag-5'>启动</b>

    ATF中bl2启动

    bl2_entrypoint。该函数定义在bl2/aarch64/bl2_entrypoint.S文件中。该阶段的执行流程如图所示。 bl2
    的头像 发表于 11-07 15:59 818次阅读
    ATF中<b class='flag-5'>bl2</b>的<b class='flag-5'>启动</b>

    ATF中如何用函数完成bl2启动

    bl2_main函数 bl2_main函数完成了bl2阶段的主要操作,包括 • 对下一阶段镜像
    的头像 发表于 11-07 16:04 702次阅读

    ATF中bl2bl31的跳转介绍

    bl2bl31的跳转 在bl2_main函数中最终会调用smc(BL1_SMC_RUN_IMAGE,(unsigned long)next_bl
    的头像 发表于 11-07 16:09 961次阅读

    armv8 u-boot的启动介绍

    先看arm官网提供的一张图: 上图详细概括了arm官方推荐的armv8的启动层次结构: 官方将启动分为了BL1BL2BL31,
    的头像 发表于 12-07 11:09 2210次阅读
    armv8 u-boot的<b class='flag-5'>启动</b><b class='flag-5'>介绍</b>