𦴠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 RAM | Temporary working memory |
| eMMC | Built-in storage (like a tiny SSD) |
| uSD slot | MicroSD card slot |
| USB Host | Connect USB devices |
| HDMI | Display output |
| 4x LEDs | Status 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 example | 00011b | UART β SPI0 β XIP β MMC0 |
| S2 button held down | 11000b | SPI0 β MMC0 (uSD) β USB0 β UART0 |
| S2 button released (default) | 11100b | MMC1 (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:
- Initializes all hardware drivers (USB, HDMI, network, etc.)
- Mounts the Root Filesystem β the collection of files and programs Linux needs to operate
- 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.