© Amit Singh. All Rights Reserved.
Written in Mid 2003
I have dabbled in embedded systems every once in a while. There has been a lot of "mainstream" interest in embedded systems, particularly in ones based on Linux—just look at the number of recent books on the subject.
ELKS (Embeddable Linux Kernel Subset) is a project to build a small kernel subset of Linux, which will provide typical UNIX V7 functionality within the kernel, and is able to run on a system with limited capabilities/resources. It is supposed to run on the 8088, 80188 and 80186 as well. Please refer to the ELKS FAQ for more details.
The source code for ELKS is available under the GPL.
ELKS boots and runs under Virtual PC. You might need to mount the root file system (MINIX) somewhere (say, on Linux, using loopback) and fiddle with the password file to be able to log in once the system is booted.
More details are available on the ELKS home page.
According to the Inferno web site: "Inferno is a compact operating system designed for building distributed and networked systems on a wide variety of devices and platforms ..." Inferno runs both as a user application on top of a host operating system or as a stand alone system on native hardware. Supported host operating systems include FreeBSD, Linux, Mac OS X (4th Edition only), Plan 9, Solaris and Windows.
I have been following Inferno on-and-off ever since its early days at Bell Laboratories, so much so that in early 1998 I wrote an introductory article on Inferno for PC World (published in 1999).
Currently Inferno is developed and marketed solely by Vita Nuova.
Even though Inferno 4th Edition includes Mac OS X as a host system, it has issues on Panther. It is simplest to run it within Linux within Virtual PC within Mac OS X.
LynxOS is a hard real-time operating system that has "Open" APIs and Linux ABI compatibility. This embedded operating system boasts full POSIX conformance and is popular among OEMs. The operating system can be ordered with a comprehensive set of development and debugging tools. I first tried LynxOS on a MIPS board, and have had interest in the system since then. You can buy LynxOS or order an evaluation copy from LynuxWorks.
I tried installing version 4.0 of LynxOS under Virtual PC and ran into a curious problem. The OS CD would boot fine and give me a shell prompt. Thereafter, one is supposed to run the
installit command, which is an installation shell script. After making the appropriate menu choices, the install fails as the script cannot figure out that the CD-ROM is in fact both the root device and the media source, and is already mounted. There is a simple workaround.
- When you run
installit, choose to edit your disk partitioning. Create a tiny partition in addition to the one you would use for LynxOS. This extra partition can be tiny, say, 4MB. If these are the first and the second primary partitions on the primary IDE hard disk (which would normally be the case in Virtual PC), then they would be named
ide.0b. Now bail out of the installer.
- Create a file system on the new partition:
mkfs -b 1024 /dev/ide.0b
- Mount the new tiny partition under
/tmp. It is important that the new partition be mounted under
/tmp: that directory is not used as a mount point during the installation, and
vi would work nicely without setting any environment variables (such as
- Look for the function
determine_available_products(). Remove entirely the first
case block that switches on
$INSTALL_FROM_MEDIA. In its place, insert the following lines:
- Now look for the function
do_real_install(). Locate the
case statement just after the string
"Extracting $product_string ..." is
echoed. Remove this case block and replace it with the following:
- Change directory to
/ and run
/tmp/installit. You will need to make the desired selections. The installation should go through.
- Once the system is installed and booted, you will need to reconfigure the kernel for Virtual PC's network card (I believe you cannot select DEC 21040 as a network card in the installation menu). The steps are as follows:
# Edit the file CONFIG.TBL
# Comment out the existing network card "include" line.
# Uncomment the include line for DEC 21040
# This should place the newly linked kernel as
- The network device is
MenuetOS, according to its web site, "has been written with 32 bit x86 assembly language from the ground up to support 32 bit assembly programming as a platform for faster and smaller system footprint." This is not a Unix-like or Unix-derived system. In fact, it is small enough to fit on a single floppy. It is available under the GPL.
Key features of MenuetOS are (as listed on its web site):
- pre-emptive multitasking, multithreading, ring-3 protection
- GUI with 16 million colors
- TCP/IP stack with PPP and Ethernet drivers
- HTTP, MP3 and Mail servers
- Hard real-time data fetch
MenuetOS does not load under Virtual PC on the Mac. It does work, however, using Bochs.
QNX Neutrino is a microkernel based operating system typically used for fault-resilient, field upgradable system implementations. It also supports multi-processing, including symmetric and clustered. I first tried QNX when the latest version of the RTOS was 4.x. I recently acquired a shrink-wrapped copy of version 4.24, and decided to give that and the newer generation QNX a spin on the PowerBook. Apparently 6.2.x is far more POSIX friendly than 4.x.
In any case, both versions readily install and run under Virtual PC. There is a free evaluation download for hobbyists, which translates to a useful, solid platform for experimenting with microkernel/embedded systems.
RxDOS was described in "Dissecting DOS", by Mike Podanoffsky. It is a DOS compatible operating system with applications in small-footprint, low-power, instant-on and other embedded systems (hand held computers, banking systems/ATMs, consumer electronics and miscellaneous appliances).
Version 6.2 was released in 1999. More details about RxDOS are available on its SourceForge project page.
RxDOS boots and runs fine under Virtual PC.
According to the TSX-32 web site: "TSX-32 is a general purpose multi-user multi-tasking operating system written from the ground up for the Intel platform.". Moreover, the company behind TSX-32 claims it to be "... a viable, stable, and powerful alternative to both Unix and Microsoft operating systems since 1989."
TSX-32, as the name suggests, is a 32-bit operating system, but is compatible with DOS. Minimum requirements include a 386 processor, 8 MB RAM and 20 MB of hard disk space. SCSI disk drives, CD-ROM drives and tape drives are also supported. The TSX-32 features page describes things in more detail.
Quoting further, "TSX-32 is a rock solid operating system, running underneath the hood of systems in Fortune 500 companies, airports, factories, defense, mines, offices -- you name it -- all over the world."
TSX-32 boots and runs fine under Virtual PC.