ARM系统上的Bootrom与bootloader有什么区别

时间:2013-03-27 17:10:35

标签: arm bootloader

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

有些文章提到,从PowerON开始,引导程序(如u-boot)是第一个被执行的东西,而有些文章说来自PowerON,bootrom(通常在处理器的内部ROM上闪存)先被执行,然后加载bootloader(如uboot)然后加载操作系统。

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

2 个答案:

答案 0 :(得分:41)

以下是我对这些术语的理解。

单板大小

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

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

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

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

引导程序

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

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

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

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

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

答案 1 :(得分:-1)

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