Bootloader启动流程分析

本文详细分析了Bootloader的启动流程,分为stage1和stage2两个阶段。stage1包括硬件初始化、RAM准备、stage2拷贝及堆栈设置;stage2涉及C语言实现的main入口、硬件设备初始化、内存映射检测、内核加载和参数设置。同时介绍了U-Boot的目录结构,如board、common、cpu等,以及其在不同硬件平台上的支持。
摘要由CSDN通过智能技术生成

Bootloader的启动流程一般分为两个阶段:stage1和stage2,下面分别对这两个阶段进行讲解:

1.stage1

(1)完成基本的硬件初始化。初始化的工作主要包括屏蔽所有的中断、设置CPU的速度和时钟频率、RAM初始化、初始化LED、关闭CPU内部指令和数据cache等。

(2)为加载stage2准备RAM空间。为了更快执行速度,通常把stage2加载到RAM空间中来执行,因此必须为加载Bootloader的stage2准备一段可用的RAM空间范围。

(3)拷贝stage2到RAM中。确定stage2的可执行映像在固态存储设备的存放起始地址和终止地址以及RAM空间的起始地址。

(4)设置堆栈指针sp。这是为执行stage2的C语言代码做好准备。

 

2.stage2

(1)用汇编语言跳转到main入口函数

(2)为了实现更复杂的功能和取得更好的代码可读性和可移植性,stage2的代码通常用C语言来实现。在编译和链接bootloader时,不能使用glibc库中的任何支持函数。

(3)初始化串口、初始化计时器等硬件设备。在初始化这些设备之前、可以输出一些打印信息。

(4)检测系统的内存映射,所谓内存映射就是指在整个4GB物理地址空间中有指出哪些地址范围被分配用来寻址系统的RAM单元。

(5)加载内核映像和根文件系统映像,这里包括规划内存占用的布局和从Flash上拷贝数据。

(6)设置内核的启动参数。

 

U-Boot的目录及存放原则

board

和一些已有开发板有关的文件,比如Makefile和U-Boot.lds等都和具体开发板的硬件和地址分配有关。

 

common

与体系结构无关的文件,实现各种命令的C文件

 

cpu

CPU相关的文件,其中的子

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值