我主要来自 x86 系统背景,其中 BIOS(固件)负责从 PowerON 加载引导加载程序(如 GRUB),进而加载操作系统。我现在一直在阅读 ARM 系统上的等效启动顺序,网上似乎有文章提到了两个术语:bootrom 和 bootloader。
有些文章提到,从 PowerON 开始,引导加载程序(如 u-boot)是首先执行的,而有些文章则说,从 PowerON 开始,首先执行 bootrom(通常在处理器的内部 ROM 上闪存),然后依次加载引导加载程序(如uboot)然后加载操作系统。
有人可以对 bootrom 与 bootloader 进行一些澄清吗?另外,我想知道 ARM 系统中通常使用的流行 bootrom 的名称。
以下是我对这些术语的理解。
Bootrom
Bootrom(或 Boot ROM)是嵌入处理器芯片内部的一小块掩模 ROM 或写保护闪存。它包含处理器在加电或重置时执行的第一个代码。根据某些带引脚或内部保险丝的配置,它可以决定从哪里加载要执行的下一部分代码以及如何或是否验证其正确性或有效性。有时它可能包含附加功能,可能在启动期间或启动后由用户代码使用。一些例子:
iPhone 启动 ROM。嵌入掩膜ROM中,无法修改。从闪存或 USB(在 DFU 模式下)加载下一阶段引导加载程序,并使用内置 RSA 实现验证其签名。还为下一阶段的bootloader提供加速解密功能。
TI 的 OMAP4 启动 ROM。可以从闪存(NOR、NAND、OneNAND)、外部存储器、SD/MMC、USB 或 UART 加载用户代码。引导顺序和选项由带 (SYSBOOT) 引脚设置。为后期提供一些功能(缓存/TLB管理等)
NXP的LPCxxxx系列Boot ROM。放置在内部闪存的隐藏部分,开机时映射为 0。实现 CRP(代码读取保护)、ISP(系统内编程),允许通过 UART 上传和刷新新代码。如果有效的用户代码在闪存中(需要有正确的校验和),则将其映射到 0 并跳转到它。 bootrom 的一部分仍然被映射以提供 IAP(应用内编程)和一些其他服务。
引导装载程序
引导加载程序负责查找并加载应该在芯片上运行的最终操作系统或固件。与 bootrom 的一个主要区别是它通常位于可写闪存中,并且可以更换或升级。
有时 bootrom 可以执行引导加载程序的工作。例如,OMAP 的 bootrom 足够复杂(它可以解析 FAT32!),您可以直接加载并启动 Linux 内核。
然而,在许多情况下,会使用单独的引导加载程序,要么是因为 bootrom 功能不够(或不存在),要么是因为需要额外的灵活性。它可以非常简单(从 RAM 中的固定闪存位置加载内核并跳转到该位置),也可以非常复杂。例如,U-Boot http://www.denx.de/wiki/U-Boot本身就像一个迷你操作系统 - 它有一个控制台,一些命令,允许您中断启动过程,例如修改内核命令行参数,甚至从不同位置(SD/MMC 或 USB)加载内核,运行一些测试等。
当您有一个或多或少复杂的操作系统时,通常会使用引导加载程序,该操作系统可能需要一些设置才能启动。像 NXP 的 LPC 系列这样的小型微控制器通常使用单片固件,这样它们就可以在没有它的情况下运行(但是,可能有自定义引导加载程序 http://www.lpcware.com/content/nxpfile/an10866-lpc1700-secondary-usb-bootloader对他们来说也是如此)。
在最简单的芯片上,可能根本没有引导 ROM 或引导加载程序 - 它们只是尝试从固定的启动地址获取并执行指令。事实上,迄今为止,大多数 x86 芯片都是这样工作的 - 它们只是开始在 FFFFFFF0 处执行代码,并期望芯片组已将 BIOS 闪存芯片映射到此处。在这里,您可以说 BIOS 是引导加载程序(尽管它也向操作系统提供服务,类似于 bootrom)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)