UBOOT启动流程中的BL0,BL1,BL2

系列文章目录



前言


一、什么是BootLoader?

在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行,是嵌入式系统开发过程中不可逾越的一步。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由Boo Loader来完成。 uboot就是bootloader的一种,全称Universal Boot Loader。

第一阶段使用汇编来实现,它完成初始化的CPU体系结构,并调用第二阶段的代码;
第二阶段则通常使用C语言实现,这样可以实现更复杂的功能,而且代码会有更好的可读性和可移植性
Make menuconfig图形化界面配置内核,把编译后的uboot烧写到SD卡,插到板子上,和主机交互。只有BL2是可以改变的,我们写的裸机代码放到BL2这部分.

二、BL0的作用

芯片上电后肯定会从0x0这个地址开始跑
M3芯片它开始跑程序的时候是直接从 main开始跑吗?先跑的启动文件(start.s)
exynos芯片的0地址对应的IROM64KB IROM是掉电不丢失的存储介质 这里面的这个存储空间是用户不能访问的空间
这个64KB的空间存储的有一定的程序
三星提供了IROM里面的代码(不开源你看不到的)
这段代码干嘛用的呢?
1:判断硬件的启动方式
2:去不同的启动方式的启动设备里面加载BL1

三、BL1的作用

1、BL1的说明

BL1存放在外部的存储介质的
说白点BL1需要我们下载存储介质里面
BL1干的事情比较多也比较复杂
这一部分代码是三星提供的二进制文件
它是不开源的
只有二进制文件

2、BL1的作用

  1. 硬件设备初始化
  2. 使ARM芯片进入超级管理权限SVC
  3. 关闭中断,关看门狗
  4. 设置CPU的速度、时钟频率及终端控制寄存器
  5. 复制BL2到RAM空间中
  6. 分配堆栈空间,设置堆栈指针;
  7. 清零 BSS 数据段
  8. 跳转到第二阶段代码的C入口函数。

四、BL2的作用

1、BL2的说明

BL2这个阶段可以是用户写的代码
BL2两种情况:
	1:小于14KB的时候
		BL2全部加载到256KB SRAM
	2: 当BL2大于14KB的时候
		BL2会把前14KB放到	 256KB SRAM
		BL2会把 14KB之后的内容全部搬运
							1GB的DDR3-RAM

2、BL2的作用

  1. 重新进入SVC模式
  2. 初始化本阶段要使用的硬件设备
  3. 检测系统内存映射
  4. 将内核映像和根文件系统映像从FLASH上读到RAM空间中
  5. 为内核设置启动参数

总结

BL0 BL1 我们动不了,改不了。
BL2 我们可以动

普及:ARM的启动过程

  1. 向量表定义
  2. 地址重映射及中断向量表的转移
  3. 堆栈初始化
  4. 设置系统时钟频率
  5. 中断寄存器的初始化
  6. 进入C应用程序
  • 1
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值