韦东山 jz2440 学习笔记 —— uboot(三)—— uboot源码分析之 start.S

uboot 的工作流程

上篇文章可以看出,start.S 是uboot的第一段程序。因此可以从start.S 开始分析uboot 的工作流程。

1. uboot 第一阶段:硬件相关初始化

该阶段基本都是用汇编实现的,主要流程在start.S 中实现。对于jz2440,有如下配置过程:

  1. 设置cpu为管理模式,svc模式
  2. 关看门狗
  3. 屏蔽中断
  4. 初始化SDRAM
  5. 设置栈
  6. 配置时钟
  7. 将代码从flash 拷贝到SDRAM(???啥意思,uboot这不已经运行了,还把谁拷贝到RAM?
  8. 清bss 段
  9. 调用c 函数 _start_armboot

2. uboot 第二阶段:

该阶段主要都用c 语言实现,主要都在_start_armboot 函数中实现。

  1. 从flash 读出内核,包括识别flash 是nor flash,还是nand flash,识别方法见注1。识别成功后初始化flash。
  2. 启动内核或者执行uboot串口交互菜单。

uboot 的核心就是“命令”。命令的实现见下篇博客。


  1. 从nor flash启动时,0地址在nor flash 上,nor flash不可写;从nand flash启动时,0地址在RAM上,RAM是可以写的。因此可以根据0地址是否可写就能判断flash的类型。代码实现如下 ↩︎

你可能感兴趣的:(uboot,linux,嵌入式,uboot)