1_5.1.3_U-boot分析与使用_u-boot分析之源码第1阶段_P

我们以前写裸机程序时:

  1. 初始化:关看门狗,初始化时钟,初始化SDRAM;
  2. 把程序从nand拷贝到SDRAM;
  3. 设置sp,调用C语言函数;
  4. 继续执行…

uboot作为一个裸机程序的集大成者,这些都会做,而且还要读出内核并启动内核。

之前分析过,uboot上电会先调用cpu/arm920t/start.S,我们就从这个文件来入手分析。

首先会跳到reset段。
在这里插入图片描述然后将CPU设为SVC32模式(管理模式)并关闭看门狗。
在这里插入图片描述
在这里插入图片描述第四步设置时钟,视频里面是用了函数调用,但是我本地打完补丁使用的是汇编,这里不做深究,理解为主。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从这里,我们就可以看到栈是怎么划分的,从0x33F80000开始,依次是堆,bdinfo,中断使用的栈,3字节中断栈。其中,0x33F80000到0x34000000这片内存放的是uboot,有512字节。

在这里插入图片描述然后是调用时钟初始化函数。
在这里插入图片描述
在这里插入图片描述然后把代码重定位到链接地址去。
在这里插入图片描述最后,调用start_armboot函数,该函数为一个C语言函数,更复杂的功能就在这里面实现。
在这里插入图片描述

从上到下分析,start.S做了这些操作:

  1. 设为SVC模式;
  2. 关看门狗;
  3. 屏蔽中断;
  4. 初始化SDRAM;
  5. 设置栈;
  6. 时钟配置;
  7. 重定位,代码从Flash拷到SDRAM;
  8. 清bss段(初始值为0或未初始化的全局变量和静态变量);
  9. 调用start_armboot;

上面都是硬件相关的初始化,最后一步是一个C函数,更复杂的功能就在这个函数中实现,1到8称为第一阶段,start_armboot之后的就是第二阶段。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值