【问题标题】:Need Help in understanding bootloader sequence在理解引导加载程序序列方面需要帮助
【发布时间】:2015-06-06 20:15:28
【问题描述】:

我正在通过第一阶段引导加载程序。我对此有一些疑问。首先reset后的开机顺序如下:

  1. 将 CPU 设置为超级用户模式
  2. 使 L1 指令、数据缓存和转换无效 缓冲区(如果有紧耦合内存)
  3. 禁用 MMU 和缓存
  4. 设置堆栈大小
  5. 启用指令和数据缓存以及 MMU

遵循 Nand Flash 控制器的初始时钟配置和设置时钟。

我的问题是

  1. 我们已经使 L1 指令/数据缓存和 TLB(它是 MMU 的一部分)失效,但为什么我们需要再次禁用 MMU 和缓存。

请帮助理解它。还请提供任何可以更好地理解引导顺序的链接。

非常感谢您的支持。

【问题讨论】:

  • 第 1 阶段引导加载程序? CPU 本身在 MMU 和缓存关闭的情况下启动。

标签: arm bootloader u-boot


【解决方案1】:

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

在主引导加载程序执行结束时,代码将跳转到辅助引导加载程序。如果没有提供辅助引导加载程序,或者辅助引导加载程序在设置新的异常向量之前出现问题;如果出现 mov pc,#0(跳转到空函数指针)的指令;然后主引导加载程序将从步骤 1 重新启动。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-09
    • 2011-08-06
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 2015-05-21
    相关资源
    最近更新 更多