uboot启动过程

1、Bootloader中典型分区结图

    Bootloader上电后的第一个程序。
    Boot parameteres分区中可设置的参数(IP,串口,传递给内核的命令行参数)。
    DTB设备数文件

   uImage系统镜像
    Rootfs文件系统

2.Bootloader启动流程

Bootloader的启动流程一般分两个阶段:

Stage1(阶段一主要通过汇编语言实现,依赖cpu体系结构初始化

    进行硬件的初始化(watchdog,ram初始化)。
    为Stage2加载代码准备RAM空间。
    复制Stage2阶段代码到RAM空间。
    设置好栈。
    跳转到第二阶段代码的入口点。

Stage2(阶段2主要通过c语言实现,具有好的可读性和移植性)

    初始化该阶段所用到的硬件设备。
    检测系统内存映射。
    将uImage ,Rootfs,dtb文件从flash读取到RAM内存中。
    设置内核启动参数。(如通过寄存器传递设备树文件的内存地址)


3、uboot具体启动过程:

  • a.处理器上电后,当选择从 IROM 中启动时,会运行片内 rom 中由芯片厂商固化好的程序 BL0
  • b.片内 Rom 中的程序 BL0 会根据处理器特定引脚的状态去判断处理器的启动设备是什么,例如 flash,sd 卡等
  • c.接着会将启动设备中前 4Kb 大小的代码拷贝到内部 sram 中即 steppingstone 中,所拷贝的这段代码称为 BL1
  • d.当 BL0 拷贝 BL1 到 steppingstone 之后,便会跳转到 steppingstone 中去执行 BL1 的代码
  • e.BL1 中的代码最大只有 4KB,而一般的 bootloader 大小都超过了 4KB,因此 BL1 中的代码需要将剩余的 bootloader 代码(被称为 BL2)拷贝搬移到内存中
  • f.完成搬移之后就会跳转到内存中的 BL2 执行后续代码

4、疑问

要经过两个重定位,而不直接把uboot代码复制到DDR的高位是什么原因?是为了合理使用内存,不空闲浪费片内RAM?还是因为在最开始阶段必须在stage阶段才能执行程序,使用位置无关的指令,等待设置好临时堆栈之后才能转到片外DDR执行,所以必须先把uboot代码复制到片内RAM的第一次重定位?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值