Most embedded Linux systems can be divided into three main software components: The boot loader, the Linux kernel and the file system.  These three components are built separately, usually on a build host using cross-compiling.  They are usually loaded onto the embedded device all at once, sometimes as three separate images stored in three separate locations, and sometimes as a single combined image.  Each component has its own purpose in the operation of an embedded device.

The first software to run at power-up is the boot loader.  Modern processors have embedded instructions that will find and run the bootloader.  The boot loader is small and uses minimal resources.  It should bring up some peripherals, such as the system memory.  Some boot loaders also include network support and a command line interface for loading new software images from over the network.  The main job of the boot loader is to find and run the Linux kernel.

The Linux kernel is loaded and run by the boot loader.  Once its started, the Linux kernel runs continuously as the main process managing everything on the embedded device.  It should have full support for all peripherals.  It runs user-space applications, and provides device drivers that allow user-space applications to use the hardware through generalized APIs.

The file system contains all of the user-space programs and data.  These are the programs that constitute the main functionality of the embedded device.  A Linux filesystem is usually divided into a standard set of folders that each have a standard purpose.  It usually has an init system which is the first user-space program to run on startup and brings up all the rest of the user-space programs.

Software Components of Embedded Linux Systems