This whitepaper by Greg Haerr (CEO of Century Software
and founder of the Microwindows and ViewML projects) provides an
introduction to the use of Linux as an embedded operating system.
Haerr reviews the benefits of Linux to embedded applications,
explains the basics of graphical windowing system technologies, and
provides a technical and architectural overview of both
Microwindows (a windowing system for embedded devices) and ViewML
(an embeddable web browser).
...As mentioned previously, the Linux kernel provides support
for memory management, process and thread creation, interprocess
communications mechanisms, interrupt handling, execute-in-place ROM
filesystems, RAM filesystems, flash management, and TCP/IP
networking. The Linux kernel provides a POSIX-compliant API to
these services. The directory structure of the kernel source tree
separates architecture-dependent code out from the core kernel
services, allowing greater reliability with known-working core
algorithms, with calls to machine-specific code added for
particular platforms. Thus, adding support for specific device
features is fairly straightforward. This implementation methodology
is also followed for memory management, i/o, and driver designs,
where the core kernel code abstracts a model that allows
implementation on differing architectures.
The kernel provides complete modern virtual memory services to
applications programs, including support for large address spaces,
protection, demand paging, memory mapping and shared virtual
memory. While support for large address spaces or demand paging may
not seem important for embedded systems designs, all of the modern
32-bit processor architectures support these features, and Linux
will allow growth in application complexity as hardware costs are
reduced without redesign or reimplementation. Memory protection
allows building systems that allow user-upgradeable or third-party
applications to be added to the system, without compromising the
entire system. Shared virtual memory support allows multiple copies
of application's code segments to be shared across the system using
less physical memory, as well as implementation of more
sophisticated schemes like high-speed direct application
framebuffer access for MPEG digital video players, for
instance."