30

我主要来自 x86 系统背景,其中 BIOS(固件)负责从 PowerON 加载引导加载程序(如 GRUB),然后加载操作系统。我现在一直在阅读 ARM 系统上的等效引导序列,似乎网上有文章提到了两个术语:bootrom 和 bootloader。

一些文章提到,从 PowerON 开始,引导加载程序(如 u-boot)是首先执行的,而一些文章说,从 PowerON 开始,首先执行 bootrom(通常在处理器的内部 ROM 上闪烁),然后依次加载引导加载程序(如uboot) 然后加载操作系统。

任何人都可以提供一些关于bootrom vs bootloader的说明吗?另外,我想知道 ARM 系统中通常使用的流行 bootrom 的名称。

4

2 回答 2

55

以下是我对这些条款的理解。

引导程序

Bootrom(或 Boot ROM)是嵌入在处理器芯片中的一小块掩膜 ROM 或写保护闪存。它包含处理器在上电或复位时执行的第一个代码。根据一些带引脚或内部保险丝的配置,它可能决定从哪里加载要执行的下一部分代码以及如何或是否验证它的正确性或有效性。有时它可能包含附加功能,可能在引导期间或之后可由用户代码使用。一些例子:

  • iPhone 启动 ROM。嵌入在掩码 ROM 中,无法修改。从闪存或 USB(在 DFU 模式下)加载下一阶段的引导加载程序,并使用内置的 RSA 实现验证其签名。还为下一阶段的引导加载程序提供加速解密功能。

  • TI 的 OMAP4 引导 ROM。可以从闪存(NOR、NAND、OneNAND)、外部存储器、SD/MMC、USB 或 UART 加载用户代码。引导顺序和选项由带 (SYSBOOT) 引脚设置。为后期阶段提供一些功能(缓存/TLB 管理等)

  • NXP 的 LPCxxxx 系列引导 ROM。放置在内部闪光灯的隐藏部分,开机时映射为 0。实现 CRP(代码读取保护)、ISP(系统内编程),允许通过 UART 上传和刷新新代码。如果有效的用户代码在闪存中(需要有正确的校验和),则将其映射到 0 并跳转到它。bootrom 的一部分仍然映射以提​​供 IAP(应用内编程)和其他一些服务。

引导加载程序

Bootloader 负责查找和加载应该在芯片上运行的最终操作系统或固件。与 bootrom 的一个主要区别是它通常位于可写闪存中,并且可以更换或升级。

有时 bootrom 可以执行引导加载程序的工作。例如,OMAP 的 bootrom 非常复杂(它可以解析 FAT32!),您可能可以让它直接加载并启动 Linux 内核。

但是,在许多情况下,会使用单独的引导加载程序,要么是因为 bootrom 功能不足(或不存在),要么是因为需要额外的灵活性。它可以非常简单(从 RAM 中的固定闪存位置加载内核并跳转到它),也可以更复杂。例如,U-Boot本身就像一个迷你操作系统——它有一个控制台、一些命令,允许你中断引导过程,例如修改内核命令行参数,甚至从不同的位置加载内核(SD/ MMC 或 USB),运行一些测试等等。

当您有一个或多或少复杂的操作系统时,通常会使用引导加载程序,这可能需要一些设置才能启动。像 NXP 的 LPC 系列这样的小型微控制器通常使用单片固件,因此它们可以在没有它的情况下正常运行(但是,它们也可能有定制的引导加载程序)。

在最简单的芯片上可能根本没有引导 ROM 或引导加载程序——它们只是尝试从固定的启动地址获取和执行指令。事实上,迄今为止,大多数 x86 芯片都是这样工作的——它们只是在 FFFFFFF0 开始执行代码,并期望芯片组已将 BIOS 闪存芯片映射到那里。在这里,您可以说 BIOS 是引导加载程序(尽管它也为操作系统提供服务,类似于 bootrom)。

于 2013-03-27T17:59:18.867 回答
-1

ARM CPU 可以具有闪存 ROM,即芯片掩码包含一些用于加载 BIOS 的代码。关于 GPU 执行大部分启动顺序的说法很多,但我有保留意见。GPU 是否运行 ARM 代码?没有。所以,面对正式版的启动顺序,我从原始GPU数据中看到,32K被复制到L2缓存中(因为DRAM还没有打开),从那时起,CPU运行代码到从 SDRAM 加载 BIOS。引导序列中未启用任何 Trustzone 设置。这允许裸机编码器(嵌入式系统)将绝大多数 CPU FlashROM 用作向量表,以便您可以轮询硬件并根据需要设置向量。TZ 的东西没有有用的属性,因为 Smurf Suite 证明它不安全。但是,如果您将该空间用于向量,如果有人重新刷新,操作系统就会死掉。

于 2016-09-05T11:17:17.823 回答