Linux
Introduction
From the Linux kernel website (http://www.kernel.org/):
"Linux is a clone of the operating system Unix, written from scratch by Linus Torvalds with assistance from a loosely-knit team of hackers across the Net. It aims towards POSIX and Single UNIX Specification compliance. It has all the features you would expect in a modern fully-fledged Unix, including true multitasking, virtual memory, shared libraries, demand loading, shared copy-on-write executables, proper memory management, and multistack networking including IPv4 and IPv6."
Linux is both open source, and completely free. It is highly customisable and can be run on a wide range of devices from embedded systems, to desktop computers, to servers and mainframes. It has full support for the ARM processors and a large number of technologies used in embedded devices such as: Wi-Fi, Bluetooth, and GPRS.
Development Tools
Unlike Windows CE, there is no standard set of developments tools for Linux. However, there are a number of freely available Integrated Development Environments (IDEs) such as Eclipse (http://www.eclipse.org/) and KDevelop (http://www.kdevelop.org/). The alternative option to using an IDE for Linux development is to use a combination of tools such as a text editor for source editing, GDB for debugging, Qt Designer for GUI development and GCC for compilation. Linux distributions such as Ubuntu (http://www.ubuntu.com/) provide a good platform for embedded Linux development. Ubuntu's apt-get system () allows for easy installation of tools and applications.
Although development tools for Linux are largely free, and have good community support, the lack of integration and standardisation can make Linux more costly to develop for than Windows CE in some cases.
Root File System
Again, unlike Windows CE, Linux does not have a standard core root file system. A number of projects have been developed to simplify the process of creating a root file system for Linux. Some of these include: OpenEmbedded (http://www.openembedded.org/) and T2 SDE (http://www.t2-project.org/). These projects allow a core set of packages to be used as the basis for a root file system, with other packages easily buildable and installable.
Embedded Linux root file systems typically replace some applications with cut-down embedded versions. For example, Busybox (http://www.busybox.net/) replaces many common command line tools, and uClibc (http://www.uclibc.org/) provides a minimal C library implementation.
Graphical Environments
Linux does not have a standard Graphical User Interface (GUI). For many embedded applications such as control and tracking devices, a GUI is not necessary and memory space can be saved by not having one present. For devices such as PDAs, graphical user interfaces are a must. For embedded Linux there are three major graphical environments:
OPIE
The Open Palmtop Integrated Environment () is an open source graphical user environment designed for PDAs and other Linux based embedded devices. OPIE is based on the Qtopia (an embedded version of Qt) graphical environment. It is used by OpenZaurus (http://www.openzaurus.org/) and OpenSIMpad (http://opensimpad.org/). OPIE is either licensed as GPL or under a commercial license. If you develop applications using OPIE and do not want to publish the source code, it is necessary to purchase a license from Trolltech (http://trolltech.com/).
GPE
The GPE Palmtop Enviroment () is an open source graphical user environment similar to OPIE. It is based on the X-Windows system and the GTK+ widget toolkit. GPE is generally regarded as slightly slower, less mature and less polished looking than OPIE, however it does not have the licensing restrictions that OPIE does. Applications developed for GPE may be distributed as closed source without requiring an additional license.
Nano-X
Nano-X Windows (http://www.microwindows.org/), formerly called Microwindows, is a lightweight windowing system for embedded Linux devices. The entire Nano-X system, including all drivers, is typically less than 100kb in size. Nano-X supports a Win32 compatible API which can ease the transition of Windows applications. The development of Nano-X has slowed down considerably in recent years, which may make it a poor choice in terms of support.
Costs and Licensing
Linux is distributed under the GNU Public License (GPL) (http://www.gnu.org/copyleft/gpl.html). This means that the full source code for the Linux kernel, including any changes made in development of an embedded device, must be made freely available to anybody purchasing the device. It is still possible to develop and charge for closed source application level software which runs on top of Linux. There are no upfront or runtime royalty costs for Linux. The source code for Linux is freely downloadable from http://www.kernel.org/. Bluewater System's version of the Linux kernel is available via anonymous FTP from server.bluewatersys.com.
Licensing for the various third party components which run on top of Linux varies. For example, Qt (http://trolltech.com/products/qt), a popular graphical interface toolkit, is subject to a per-device runtime royalty fee for closed source applications developed with it.
Development Process
- Select an appropriate IDE or set of development tools and libraries.
- Select or develop a boot loader suitable for booting Linux.
- Customise the Linux kernel for your needs. Drivers can either be built into the kernel, or as loadable modules.
- Develop any necessary device drivers for your platform.
- Build the kernel and root file system. The root file system can be built using a tool such as OpenEmbedded.
- Purchase any necessary licenses for third party application software.
- Ship the final product.
Bluewater Systems Experience
Linux is the primary operating system used by Bluewater Systems on embedded devices using the ARM 9 (and above) processors. We use a highly customised version of the Linux kernel which has full support for the Snapper and Rig family of products, as well as many peripherals which do not yet have support in the mainline kernel. We use OpenEmbedded as the basis for our root file system. We have developed a simple script for creating a fully bootable root file system for use on embedded devices using our Linux kernel. Bluewater Systems Linux kernel and OpenEmbedded based root file system are freely available via anonymous ftp from server.bluewatersys.com. The Snapper and Rig family of products also come with a support CD which includes our Linux kernel and root file system.
Some of the devices developed by Bluewater Systems using the Linux kernel include:
DDS-XM100 Series
The DDS-XM100 series of data storage units run a modified 2.6.20 Linux kernel, with U-Boot as the boot loader. The application level software has been developed in C and uses the SDL graphics library to create a custom user interface. The DDS-XM100 has a fast boot time, taking just 13 seconds from power on to the device being fully useable. This time includes a full integrity check of the internal RAID NAND flash storage memory.
Linux on Rig 200/Snapper
The Bluewater Systems Linux kernel and root file system have full support for the Rig 200 and Snapper system modules. The Rig 200 is supplied with a support CD containing all of the necessary software for getting started with Linux on the Rig 200. Support for additional devices such as specific USB or compact flash devices can be either compiled into the kernel, or built as additional modules.