ES: Hardware Requirements for Embedded Linux

Running Linux on embedded hardware requires a minimum set of hardware capabilities — a supported CPU architecture, sufficient RAM and Flash, and a debug interface. When real hardware is unavailable, QEMU provides a powerful machine emulator to develop and test embedded Linux systems.

Linux is not software that runs on arbitrary hardware. It has minimum requirements that the target platform must meet. Understanding these requirements helps you select appropriate hardware and configure your development environment correctly.


Hardware Requirements for Embedded Linux

1. CPU Architecture

The CPU must be supported by the Linux kernel. The kernel currently supports approximately 30 architectures, each represented by a subdirectory under arch/ in the kernel source tree.

All supported architectures are 32-bit or 64-bit:

  • ARM — the most common in embedded Linux (Cortex-A series)
  • MIPS — common in networking equipment
  • PowerPC — used in industrial and automotive systems
  • RISC-V — growing rapidly in new designs
  • x86 — used in industrial PCs and gateways

md
Kernel Architecture Support:
linux/
└── arch/
    ├── arm/        (32-bit ARM)
    ├── arm64/      (64-bit ARM / AArch64)
    ├── mips/
    ├── powerpc/
    ├── riscv/
    └── x86/

Most architectures require a Memory Management Unit (MMU). Without an MMU, a subset of Linux called uClinux (microcontroller Linux) can run. Architectures without MMU support include ARC, Blackfin, Microblaze, and Nios.


2. RAM

Linux requires a reasonable amount of RAM to operate. The general minimum is:

Use CaseMinimum RAM
Very simple device (webcam, router)16 MiB
Console-based system32–64 MiB
Graphical system128 MiB+

RAM is used for:

  • Kernel code and data structures
  • User-space processes
  • Filesystem buffers and caches
  • Stack and heap for running programs

3. Flash Memory

Non-volatile storage holds the bootloader, kernel, device tree, and root filesystem. The minimum for a simple device is approximately 8 MiB.

Linux supports a wide range of storage types:

Storage TypeDescription
NOR FlashExecute-in-place, byte-addressable, slower writes
NAND FlashHigh density, block-erase, faster writes
SD CardManaged flash, removable
eMMCEmbedded managed flash, soldered on board
USB FlashExternal, used in some gateways and industrial devices

4. Debug Port

A debug interface is not strictly required to run Linux, but it is essential for development and board bring-up.

Common debug interfaces:

  • RS-232 / UART serial port — console access, boot log output
  • JTAG — low-level CPU debugging, memory inspection, flashing

Without a debug port, diagnosing boot failures and driver issues becomes extremely difficult.

md
Debug Setup:
+------------------+        Serial Cable        +------------------+
|  Host Machine    | <------------------------> |  Target Hardware |
|  (Terminal)      |        JTAG / UART         |  (Serial Console)|
+------------------+                            +------------------+


Machine Emulation with QEMU

When physical hardware is unavailable or inconvenient for development, QEMU is the standard solution. QEMU is a machine emulator that can simulate complete hardware platforms — including CPU, RAM, peripherals, and storage.

QEMU comes in multiple flavours, each emulating a different processor architecture:

CommandArchitecture
qemu-system-armARM (32-bit)
qemu-system-aarch64ARM (64-bit)
qemu-system-mipsMIPS
qemu-system-ppcPowerPC
qemu-system-x86_64x86 64-bit

Listing Supported Machines

bash
qemu-system-arm -machine help

This lists all boards that QEMU can emulate for the ARM architecture, including Versatile Express, BeagleBone, and many more.


QEMU Example: ARM Versatile Express

The following command launches a full ARM embedded Linux emulation:

bash
qemu-system-arm -machine vexpress-a9 \
-m 256M \
-drive file=rootfs.ext4,sd \
-kernel zImage \
-dtb vexpress-v2p-ca9.dtb \
-append "console=ttyAMA0,115200 root=/dev/mmcblk0" \
-serial stdio \
-net nic \
-net nic,model=lan9118 \
-net tap,ifname=tap0

Parameter Reference

ParameterDescription
-machine vexpress-a9Emulate ARM Versatile Express with Cortex-A9
-m 256MProvide 256 MiB of RAM
-drive file=rootfs.ext4,sdConnect SD interface to root filesystem image
-kernel zImageLoad Linux kernel binary
-dtb vexpress-v2p-ca9.dtbLoad device tree blob
-append "..."Pass kernel command-line arguments
-serial stdioConnect serial port to the host terminal
-net nic,model=lan9118Create a network interface
-net tap,ifname=tap0Connect to host virtual network interface

Setting Up Virtual Networking for QEMU

To enable full network access from the QEMU guest, the host needs a virtual network interface configured with tunctl.

Install the User Mode Linux utilities:

bash
sudo apt install uml-utilities

Create a virtual tap network interface:

bash
sudo tunctl -u $(whoami) -t tap0

This creates tap0 on the host, which QEMU connects to via the -net tap,ifname=tap0 argument. You can then configure IP addresses and routing between the host and the emulated target.


Hardware Selection Summary

md
Embedded Linux Hardware Checklist:
+----------------------------------+
| CPU with MMU support             |  ARM Cortex-A, MIPS, PPC
| Minimum 16 MiB RAM               |  More is better
| Minimum 8 MiB Flash              |  NOR, NAND, eMMC, SD
| Serial/JTAG debug interface      |  Essential for development
+----------------------------------+

OR use QEMU for development without hardware

Understanding your hardware platform — its architecture, memory map, and peripheral layout — is the starting point for every embedded Linux project.