🦴 What Is the BeagleBone Black?

The BeagleBone Black (BBB) is a small, affordable single-board computer β€” think of it like a tiny PC on a single circuit board. At its heart is a System on Chip (SoC) called the AM3358, which contains an ARM Cortex-A8 processor.

The board also comes equipped with:

Component Purpose
DDR RAMTemporary working memory
eMMCBuilt-in storage (like a tiny SSD)
uSD slotMicroSD card slot
USB HostConnect USB devices
HDMIDisplay output
4x LEDsStatus indicators

To run Linux on this board, you need to understand how it wakes up β€” this is called the boot process.

πŸš€ Why Does Booting Need Multiple Steps?

Think of booting like starting a car engine on a cold morning:

  • You can't jump straight to "drive 100 mph"
  • You start small β†’ turn the key β†’ engine warms up β†’ then you go

The BBB follows the same idea. Linux is a large, complex system that needs DDR RAM fully initialized before it can run. But when the board first powers on, nothing is ready yet β€” so we use 4 progressively smarter software stages to get there.

πŸ”’ The 4 Boot Stages

Stage 1 β€” ROM Bootloader (Built-in, Can't Be Changed)

πŸ”’ This lives permanently inside the SoC chip itself.

The moment you press reset or power on the BBB, the ROM bootloader is the very first code that runs. It's baked into silicon β€” you cannot modify or replace it.

Its main job? Decide where to look for the next piece of software. This decision is controlled by hardware pins called SYSBOOT[4:0] β€” essentially tiny switches on the board that tell the ROM: "Check these storage locations, in this order."

Example boot orders:

Scenario SYSBOOT[4:0] Boot Order
Generic example00011bUART β†’ SPI0 β†’ XIP β†’ MMC0
S2 button held down11000bSPI0 β†’ MMC0 (uSD) β†’ USB0 β†’ UART0
S2 button released (default)11100bMMC1 (eMMC) β†’ MMC0 (uSD) β†’ UART0 β†’ USB0

πŸ’‘ Key insight: When you hold the BOOT button (S2) while powering on, you force the board to skip the eMMC and boot from your microSD card instead β€” super useful for loading a new OS!

eMMC is checked first by default because it's soldered directly onto the board β€” making it the fastest and most reliable boot source.

Stage 2 β€” SPL / MLO (Secondary Program Loader)

The ROM bootloader finds and loads a small file called MLO (Memory Loader) β€” also known as the SPL (Secondary Program Loader).

Think of MLO as a setup crew:

  • It fits in a very small space (the ROM can only load so much)
  • Its one critical job is to initialize the DDR RAM
  • Without this step, there's nowhere to load the bigger software that follows

Stage 3 β€” U-Boot (Universal Bootloader)

Now that RAM is ready, SPL loads U-Boot into it. U-Boot is a powerful, full-featured bootloader used across thousands of embedded devices.

It's like a smart assistant that:

  • πŸ—ΊοΈ Reads configuration to know where the Linux kernel is stored
  • πŸ“¦ Loads the Linux kernel into RAM
  • πŸ› οΈ Sets up parameters to pass to the kernel
  • ▢️ Hands off control to Linux

U-Boot also gives you an interactive console (via UART) where you can manually enter boot commands β€” very handy for debugging!

Stage 4 β€” Linux Kernel + Root Filesystem

This is the finish line 🏁

The Linux kernel is now loaded into DDR RAM and takes full control of the hardware. It:

  1. Initializes all hardware drivers (USB, HDMI, network, etc.)
  2. Mounts the Root Filesystem β€” the collection of files and programs Linux needs to operate
  3. Starts user-space processes

The root filesystem can live on the eMMC, a microSD card, or even be loaded over a network β€” giving you a lot of flexibility.

πŸ—ΊοΈ Boot Flow β€” The Big Picture

Power ON / Reset
      β”‚
      β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  ROM Bootloader   β”‚  (fixed in silicon, reads SYSBOOT[4:0])
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
      β”‚
      β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   SPL / MLO       β”‚  (initializes DDR RAM)
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
      β”‚
      β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      U-Boot        β”‚  (loads kernel, sets boot params)
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
      β”‚
      β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Linux Kernel      β”‚  (mounts rootfs, starts userspace)
β”‚  + Root Filesystem  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Each stage exists because the one before it wasn't powerful enough yet. ROM can only read simple formats and has no RAM to work with. MLO's only job is to fix that. U-Boot then uses that RAM to load a full OS. And Linux takes it from there.

My take: once you understand this 4-stage handoff, boot failures stop feeling like a black box. A dead board almost always means one specific stage failed β€” and now you know exactly where to start looking.

Where to Go Next

If you've ever wondered why your BBB's SD card needs two separate partitions to boot at all, that's a direct consequence of Stage 1 β€” the ROM bootloader can only read FAT, not EXT4. I cover that setup step by step in this companion post.