【问题标题】:How ARM CPU loading bootloader?ARM CPU如何加载bootloader?
【发布时间】:2017-06-06 14:46:41
【问题描述】:

据我所知,CPU 可以直接访问 RAM。设备 RAM 在启动时为空,CPU 不知道从何处将引导加载程序加载到 RAM 中以执行它。即使它也无能为力,因为我认为调用堆栈也应该是空的。 但是如何将引导加载程序复制到 RAM 中以供进一步执行?

这应该发生在智能手机等嵌入式设备上。据我所知,在 x86 PC 上,BIOS 负责将 MBR 部分从磁盘加载到 RAM。

【问题讨论】:

  • 芯片上有一小块带有硬编码初始引导加载程序的 ROM。这将指示 CPU 将下一阶段的引导加载程序从引导设备(通过上拉/下拉 CPU 引脚配置)加载到片上 SRAM 并运行它。然后第二阶段将初始化更多硬件,例如引导设备的片外 DRAM 和文件系统,并将第三个引导加载程序放入 DRAM 并运行它。在第三阶段之后,CPU 应该能够加载操作系统内核并运行它。有时,在将整个第 3 级加载到 DRAM 之前,需要额外的 2.5 级将部分第 3 级压缩到片上 SRAM 中。
  • 您指的是哪个特定的 ARM 架构?它们并非都以完全相同的方式工作。此外,它通常是特定于供应商的 - 不同的 ARM 许可证持有者有不同的实现。
  • @Clifford 我提到了 ARMv7
  • @Alex : 那可能仍然是指 ARMv7-M、ARMv7E-M、ARMv7-R 或 ARMv7-A。如果您只想要一个一般性的答案,也许没关系。

标签: arm boot bootloader


【解决方案1】:

x86 也有同样的问题。和一般相同的解决方案(与任何其他处理器一样),您将 rom/flash 放在处理器启动和/或其向量表所在的地址空间中。

还有其他一些解决方案,例如具有从某些非易失性存储读取并将其放置在引导/向量空间中的其他逻辑,或为其他处理器/计算机提供接口以将其下载到板/芯片中的其他逻辑,以及然后释放重置。

【讨论】:

    【解决方案2】:

    RAM 中的引导加载程序是辅助引导加载程序;在某种 ROM 中总是有代码,其中包含加载辅助引导程序的主引导程序。通常那个 ROM 是它自己的芯片上的 mask-ROM。

    通常在 ARM 应用处理器(例如 Cortex-A)上,主引导程序会将代码从 NAND 闪存或 SD 卡加载到 RAM。无论如何,ARM Cortex-M 通常直接从 ROM 运行代码。

    【讨论】:

      猜你喜欢
      • 2020-11-18
      • 1970-01-01
      • 2017-01-10
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多