Boot ROM
Boot ROM is a piece of read-only memory that is used for booting a computer system. It contains instructions that are run after the CPU is reset to the reset vector, and it typically loads a bootloader. There are two types of boot ROM: a mask boot ROM that cannot be changed afterwards, and a writable boot ROM such as an EEPROM or a flash memory chip.
Purpose
Upon power up, hardware usually starts uninitialized. To continue booting, the system may need to read a bootloader from some peripheral device, usually a data storage device. It is often easier to implement routines for reading from external storage devices in software than in hardware. A boot ROM provides a place to store this initial loading code, at a fixed location immediately available to the processor when execution starts.Operation
The boot ROM is mapped into memory at a fixed location, and the processor is designed to start executing from this location after reset, according to the processor's reset vector. The boot ROM is either placed on the same die as the CPU or is an external ROM chip. On modern systems, the boot ROM usually uses NOR flash, which supports execute in place.The boot ROM will then initialize the hardware busses and peripherals needed to boot. In some cases, the boot ROM is capable of initializing DRAM, and in other cases it is up to the bootloader to do that. On some modern ARM CPUs, the boot ROM integrated in CPU will initializes DRAM and then loads a bootloader; but after a bootloader is loaded, the bootloader may reinitializes DRAM, for fix bug and reduce cost purposes.
At the end of the hardware initialization, the boot ROM will try to load a bootloader from external peripheral or through specific protocol on a communications port.
In many systems on a chip, the peripherals or buses from which the boot ROM tries to load the bootloader, and the order in which they are loaded, can be configured. This configuration can be done by blowing some electronic fuses inside the system on a chip to encode that information, or by having specific pins or jumpers of the system on a chip high or low.
Some boot ROMs are capable of checking the digital signature of the bootloader and will refuse to run the bootloader and stop the boot if the signature is not valid or has not been signed with an authorized key. With some boot ROMs, the hash of the public key needed to verify the signatures is encoded in OTP electronic fuses inside the SoC. Some systems on a chip boot ROMs also support a public key infrastructure and the hash of the certificate authority public key is encoded in the electronic fuses instead, and the boot ROM will then be able to check if the bootloader is signed by an authorized key by verifying that key with the CA public key.
That feature can then be used to implement security features or used as a hardware root of trust in a chain of trust, but once configured, users are denied the freedom to replace the bootloader with the one they want without the use of boot ROM exploits. Because of this, the feature has raised strong concerns from the free software community.
Just before jumping to the bootloader, some systems on a chip also remove the boot ROM from the memory mapping, while others do not, making it possible to dump the boot ROM for later analysis. If the boot ROM is still accessible, bootloaders can also call the code of the boot ROM.
Suspend to RAM
When a system on a chip enters suspend-to-RAM mode, in many cases, the processor is completely off while the RAM is put in self-refresh mode. At resume, the boot ROM is executed again and many boot ROMs are able to detect that the SoC was in suspend-to-RAM mode and can resume by jumping directly to the kernel which then takes care of powering on again the peripherals which were off and restoring the state that the computer was in before.Specific implementations
Allwinner
On many Allwinner systems on a chip, the boot ROM either waits for a bootloader to be loaded through USB or tries to boot on several peripherals in a fixed order.Some Allwinner systems on a chip can verify the signature of the booloaders. But most devices being manufactured are not configured for that. This has enabled free and open-source software to add support for many Allwinner systems on a chip and devices using them in bootloaders like U-Boot.
Apple
On iPhone, iPad, Apple Watch, iPod Touch, and Apple TV devices, the boot ROM is called "SecureROM" It is a stripped-down version of iBoot. It provides a Device Firmware Upgrade mechanism, which can be activated using a special button combination.NXP
The boot ROM of NXP systems on a chip support configuring the peripherals through specific pins of the system on a chip. On the i.MX6 family it also supports configuring the boot order through eFuses.The boot ROM of several NXP SoCs have many ways to load the first stage bootloader.
Several NXP SoCs can be configured to verify the signature of the bootloaders. Many devices with such SoCs were sold without that verification configured and on those devices users can install the bootloader they want, including several free and open-source software bootloaders like Das U-Boot and Barebox.
Texas Instruments
The boot ROMs of several Texas Instruments systems on a chip support configuring the peripherals through specific pins of the system on a chip. They have many ways to load the first stage bootloader :- It can be loaded from various storage devices.
- With MMC/SD/eMMC, it can be loaded directly from card sectors or from a FAT12/16/32 partition.
- It can also be loaded from USB or UART.
The OMAP and AM335x systems on a chip can be configured to verify the signature of the bootloaders. Many devices with such system on a chip were sold without verification configured and on those devices users can install the bootloader they want, including several free and open-source software bootloaders like Das U-Boot and Coreboot and Barebox.