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
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 Case | Minimum RAM |
|---|---|
| Very simple device (webcam, router) | 16 MiB |
| Console-based system | 32–64 MiB |
| Graphical system | 128 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 Type | Description |
|---|---|
| NOR Flash | Execute-in-place, byte-addressable, slower writes |
| NAND Flash | High density, block-erase, faster writes |
| SD Card | Managed flash, removable |
| eMMC | Embedded managed flash, soldered on board |
| USB Flash | External, 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.
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:
| Command | Architecture |
|---|---|
qemu-system-arm | ARM (32-bit) |
qemu-system-aarch64 | ARM (64-bit) |
qemu-system-mips | MIPS |
qemu-system-ppc | PowerPC |
qemu-system-x86_64 | x86 64-bit |
Listing Supported Machines
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:
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
| Parameter | Description |
|---|---|
-machine vexpress-a9 | Emulate ARM Versatile Express with Cortex-A9 |
-m 256M | Provide 256 MiB of RAM |
-drive file=rootfs.ext4,sd | Connect SD interface to root filesystem image |
-kernel zImage | Load Linux kernel binary |
-dtb vexpress-v2p-ca9.dtb | Load device tree blob |
-append "..." | Pass kernel command-line arguments |
-serial stdio | Connect serial port to the host terminal |
-net nic,model=lan9118 | Create a network interface |
-net tap,ifname=tap0 | Connect 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:
sudo apt install uml-utilities
Create a virtual tap network interface:
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
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.