Uboot启动流程

Uboot启动流程

首先我们将uboot文件需要拷到外部设备中,该设备可以是U盘,SD卡等,uboot文件不能直接装在内存和cpu的RAM和ROM寄存器中,原因在于,内存不能永久保存,主要内存一掉电,会直接清空,RAM和ROM寄存器的空间太小不足以装下uboot的文件。

1. Uboot存放的位置:

uboot既然不会直接存放在CPU和内存中,那么我们就需要一个容量足够大的东西来装uboot文件,我们一般采用SD卡的方式存储,在每一块板子上面的SD卡启动方式可能有所不同,所以我们需要根据自己手中的开发板来设置。
在uboot启动后会被自动搬运到内存中,然后在内核启动起来之前uboot都会存放在内存的最末尾的位置。

2. Uboot加载的步骤:

(1)首先CPU的RAM会从SD卡中读取一部分文件,该文件的作用在于初始化内存。
(2)然后uboot把自己搬到内存的开头位置,uboot在内存的开头位置将自己需要的内存空间给展开,然后计算内存条的大小和自身展开的大小,计算完之后方便将自己移到内存的尾部,把前面位置腾出来运行内核系统。
注:最后uboot会移到内存的末尾,那么为什么不一开始就移到末尾呢?
原因在于uboot在编译的时候声明的静态数据和全局数据会被存放在数据区,数据区又分成了已初始化和未初始化的区域,已初始化的区域需要编译的时候开辟要求大小的空间,而未定义的初始化在运行时才会开辟需要的大小空间,所以uboot需要在开头的位置把自己撑开,好计算自己的身长,方便移动和位置重定向。
(3)在移动后,由于之前的代码跳转指令是针对具体的地址进行跳转的,如果整体向末尾移动了那么跳转的地址也需要改变,所以还有一步重定向地址的步骤,这样才能确保uboot运行无误。

图示:

在这里插入图片描述

如图所见 :
  第一步取出SPl代码段,该代码段存在于uboot的前半部分,主要做了时钟,看门狗,中断,SDRAM,等外设的初始化,SD卡初始化意见内存初始化等操作。
  第二步剩下的uboot自搬移到内存条的前半部分,然后运行时开辟所需的空间
  第三步在搬移到内存条的末尾,计算指令的准确地址,重定向地址以确保程序准确运行

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值