理解bootloader序列需要帮助

时间:2015-06-06 20:15:28

标签: arm bootloader u-boot

我正在进行第一阶段的引导加载程序。我对此有一些疑问。首先,复位后的引导顺序如下:

  1. 将CPU设置为超级用户模式
  2. 使L1指令,数据缓存和转换无效 缓冲区(紧密耦合的内存,如果有的话)
  3. 禁用MMU和缓存
  4. 设置堆栈大小
  5. 启用指令和数据缓存以及MMU
  6. 遵循Nand Flash Controller的初始时钟配置和设置时钟。

    我的问题是

    1. 我们已经使L1指令/数据缓存和TLB(这是MMU的一部分)无效,但为什么我们需要再次禁用MMU和缓存。
    2. 请帮助理解它。另外,请提供任何能够更好地理解启动顺序的链接。

      非常感谢您的支持。

1 个答案:

答案 0 :(得分:0)

MMU将在启动时被禁用,因此第3步看起来是多余的。基于有限的信息,我将尝试证明逻辑:

在主引导加载程序执行结束时,代码将跳转到辅助引导加载程序。如果未提供辅助引导加载程序,或者辅助引导加载程序在设置新异常向量之前混淆了某些内容;如果指令效果为mov pc,则会发生#0(跳转到空函数指针);然后主引导加载程序将从步骤1重新启动。

缓存可能已损坏,MMU可能已开启,此时无法猜测。因此,如果引导加载程序现在必须开始清理,则需要执行步骤1 - 3以确保环境是干净的以执行。这看起来像是一种必要的预防措施。

Bootloader在功能和架构方面有很大差异。没有真正标准化的方法来做到这一点。所以唯一真正的选择是阅读代码并提出问题。