How does an embedded Linux rootfs differ from a desktop Linux installation?
An embedded Linux root filesystem is radically stripped down compared to a desktop distribution. A desktop Ubuntu installation might occupy 5-10 GB with thousands of packages; an embedded rootfs can be as small as 2-8 MB. The goal is to include only what the product needs — the init system, core utilities, shared libraries, and the application — nothing more. Every unnecessary binary wastes flash space, increases the attack surface, and slows boot time.
The core utilities (ls, cp, mount, ifconfig) are typically provided by BusyBox, a single statically-linked binary that implements hundreds of standard Unix commands in roughly 1 MB. The C library is often musl or uClibc-ng instead of glibc, saving several megabytes of flash and RAM. Many embedded rootfs images have no package manager, no man pages, no compiler toolchain, and no graphical desktop — they are headless systems controlled via serial console, SSH, or a custom protocol.
The filesystem layout still follows the Filesystem Hierarchy Standard (FHS) with /bin, /etc, /lib, /dev, /proc, /sys, /tmp, but many directories are nearly empty. /dev is populated dynamically by mdev (BusyBox) or udev. /proc and /sys are virtual filesystems mounted at boot. Configuration files in /etc are minimal. The entire rootfs may be mounted read-only to prevent corruption from unexpected power loss, with a small writable partition (or tmpfs) for runtime data like logs and configuration changes.
Source: Embedded Linux Q&A
