Are there any booting standards for ARM-based computers?

Solution 1:

There used to be a multi-paged document on "Booting ARM Linux". Unfortunately the web link to that document is now broken, but a copy seems to be here. That doc however did not specify or advise a specific bootloader or any file/data organization on boot media.

Items that I recall were things like the kernel should be linked to execute at the start of physical main memory + 0x8000.

ARM Linux also requires a list of various memory, board and machine parameters (known as ARM Tags or ATAG list) to be passed in a memory buffer to the kernel on boot. The bootloader would be responsible for constructing the ATAGs and the kernel command line in memory buffers. ATAGs apparently has been deprecated, and replaced by the Device Tree in newer Linux kernel versions.

The bootloader was also expected to setup and initialize RAM (which implies setup of clocks/oscillators), initialize one serial port or console, and detect the ARM machine type.

Note that most ARM SoCs employ a multistage boot sequence, and the bootloader that actually loads the Linux kernel is sometimes the third-stage bootloader.

Solution 2:

As of 2020, Arm SystemReady is the name of the overarching set of standards meant to “enable generic off-the-shelf operating systems”. For the booting standard specifically, that is the UEFI based Base Boot Requirements (BBR).

Arm SystemReady is a compliance certification program based on a set of hardware and firmware standards. These standards include the Base System Architecture (BSA) and Base Boot Requirements (BBR) specifications, and market-specific supplements.

Arm SystemReady replaces the successful Arm ServerReady compliance program and extends it to a broader set of devices.

The certification program comes in 4 variants (presumably for those “market specific supplements”):

  1. SystemReady SR (formerly Arm ServerReady)
    • This is where the previous standards SBSA and SBBR come from. These are still relevant, but supplemented by BSA and BBR.
  2. SystemReady ES (Embedded ServerReady)
  3. SystemReady IR (IoT Ready)
  4. SystemReady LS (LinuxBoot ServerReady)