A lot of development is happening on embedded systems with many development platforms, environments, and operating systems being created to help with this process. We present two popular initiatives.
Inferno.
Inferno was developed by Computing Science Research Center of Bell Labs. Its core feature is a virtual machine called Dis which makes it portable across various platforms, including Intel x86, Sun Sparc, MIPS, and PowerPC. So it can be used across all the major OSs like Windows (NT and 95), and many flavors of Unix including Linux. Inferno runs as a service under these OSs. It also has its own microkernel, so it can be deployed on embedded devices without a native operating system underneath.
Inferno’s memory requirements are as low as 1 MB–possible due to its modular architecture. All user applications as well as core services of Inferno are available as modules that can be dynamically loaded into the memory when required. Likewise, they can also be unloaded and the memory area reclaimed for subsequent use by a service called Garbage Collector that continuously runs in the background.
Inferno can be used in a distributed environment, a necessary feature so that all the intelligent gadgets can communicate with each other. It uses a communication protocol called Styx, which runs above the transport layer and is independent of transport layer protocols like TCP and UDP. Styx has built-in security using Public Key Cryptography for communication.
Under Inferno, all services like network services are represented as files, which can be written (inputs) and read (outputs). For example a DNS service represented in a file named /net/dns can be written with a FQDN (Fully Qualified Domain Name) like www.yahoo.com and when read, this file would yield the corresponding IP address (216.115.108.243). The same scheme is adopted to represent I/O devices attached to the gadgets, which can use a variety of input and output devices ranging from simple keypads, touch screens to radio wave based I/O. The interface to all these devices is also represented as files. This makes it easy for developers, as they can be read or written without worrying about the complexity (or simplicity) of the device.
A new programming language called Limbo is used to develop Inferno applications. Limbo borrows its syntax from C and Pascal, and is ideal for coding multitasking applications. The library functions that can be used while programming are also available as modules. Limbo programs when compiled result in byte codes which are instructions to the virtual machine Dis. At runtime, Dis translates the byte code instructions to those of the native operating system of the embedded device. An on-the-fly compiler is also available which converts byte codes directly into native instructions thus boosting the execution speeds.
Chai
This development environment (runtime and compile time) provides tools to develop applications for embedded devices. It is based on Java technology and consists of the following components:
- ChaiVM: The Chai virtual machine
- ChaiAWT: Graphics library for coding GUI components
- ChaiServer: For intercommunication and remote configuration of Chai applications
- ChaiAppliance Plug and Play: an open-standard technology for automatic and transparent connectivity between embedded devices
- Chai/E-speak: Libraries which enables Chai applications to act as e-services
- Chai/OpenView: Enables management of Chai application by HP’s OpenView Network Node Manager.
- ChaiFarer: A web browser for embedded devices.
- Oracle 8i lite: Database for embedded devices
The core of this technology is also a virtual machine called ChaiVM, which runs on top of an embedded device’s hardware and native operating system. The memory requirements of ChaiVM can be reduced to as low as 228 kB by selecting only those components (class libraries, data structure), which are required on a particular embedded device.
ChaiFreezeDry, a part of ChaiVM, is a class loader, which converts the Java class bytes (resulting from compilation of a Java program) into a compact format, before loading them onto the VM. It is claimed that this saves about 50 percent usage of primary memory.ChaiAWT is a set of Java class libraries (similar to Java AWT libraries) and native methods that enables coding GUI interfaces for embedded devices. This library supports monochrome, grayscale and colored displays, a must for embedded devices with different display capabilities. Chai Appliance PnP (Plug and Play) technology makes Chai applications Universal PnP ready. Universal PnP is a specification in which new devices can announce their presence to other devices, and get auto-configured when plugged into a network. Chai Appliance PnP uses Java implementation of Universal PnP.
A 200 kB web server called ChaiServer provides a web-based interface to access and configure Chai applications. It also facilitates inter-communication between Chai applications running on different gadgets via web protocols like HTTP.
Complementing the web server is the ChaiFarer Web browser, with a small memory footprint (about 220 kB). Apart from HTML including CSS (Cascading Style Sheets), it also supports XML (eXtensible Markup Language).
Chai/E-Speak enables Chai applications to be exposed as reusable e-services across the local network the Internet. HP’s OpenView Network Node Manager (NNM) is a network management tool, which provides a graphical map of the devices connected to a network. Using Chai/Openview component, Chai applications running on embedded devices become visible to the OpenView Network Node Manager. This allows their discovery and management using the
NNM.
The Chai Appliance Platform integrates Oracle 8i Lite, a database for embedded devices. This DBMS supports ODBC, JDBC and SQLJ. With ODBC, virtually data in any database can be accessed by any application using the so-called ODBC drivers. JDBC is similar to ODBC but specific to Java applications. SQLJ specifications allow SQL statements to be embedded in Java programs. Oracle 8i Lite includes iConnect technology, which facilitates secure data synchronization from other systems using HTTP or other file transfer protocols like Oracle’s Net8.
A suite of development tools is provided to help with coding for the Chai Appliance platform. This includes separate corresponding tools for each of its components like ChaiVM toolkit, ChaiServer toolkit, Chai/E-speak toolkit and a Chai/OpenView toolkit. Add to these a TurboChai compiler, which can translate the Java class bytes to the native instructions of the embedded device and the performance is increased.
Shekhar Govindarajan