How to Choose Operating System for ARM CPU

This paper takes the three common used embedded operating systems (uC/OS-II, uCLinux and embedded Linux) for analysis, so as to suggest some factors that should be considered for selecting operating system for ARM based development platform.

Software basis for ARM CPU
     With the development of embedded processor going from the 8bit/16bit sigle chips to ARM CPU represented 32bit processors, embedded operating systems, instead of the traditional hand-coded monitor programs and schedulers, are becoming important basic components of embedded systems. One important advantage of embedded systems is that they can shield applications, make application programmers to develop system-oriented applications, and they are portable between different ARM embedded processors. Embedded operating systems are real-time, easy to be tailored and extended, applicable to various kinds of ARM CPUs ranging from ARM7 to Xscale. In embedded operating systems, we can use kinds of popular ARM developing tools such as SDT/ADS and RealView, developing softwares such as GCC/GDB, KDE and Eclipe development environment, and some special developing tools such as Tornado, mC/View, mC/KA, CODE/Lab,  Metroworks and etc..


uC/OS-II embedded real-time kernel
    Hundreds kinds of devices in the world, including mobil phones, routers, UPSs, areocrafts, medical facilities and  industrial control equipment, are using the uC/OS-II system. uC/OS-II has developed portable versions for various of ARM CPUs such as ARM7TDMI, ARM9, Strong ARM and etc.. It supports ARM kernel based CPUs produced by Atmel, Hynix, Intel, Motorola, Philips, Samsung, Sharp and etc..
     The uC/OS-II does not only obtain the functions that provided by traditional embedded OS kernels (PSOS, VRTX for example), but also supports exclusive semaphore, as VxWorks and VRTXsa do.
     As a preemptive real time kernel, the uC/OS-II kernel provides a performance that is not quite different from that of commercial embedded  real time kernels.
Besides the kernel, uC/OS-II system also embodies commercial file system (mC/FS), graphic system (uC/GUI) and task testing tools (uC/KA and uC/View). While it does not provide TCP/IP protocol system.
     Generally speaking, with simple structure, complete function, powerful real time performance, the uC/OS-II is an easy-to-learn embedded system. It can be used for various kinds of embedded applications  as well as teaching and researching in universities and colleges. Finally, the uC/OS-II is not provided for free, anyone uses uC/OS-II for learning must buy the book named “Embedded Real-time Operating System uC/OS-II”, and those who use uC/OS-II for products must buy producing license, which will come with technical supports and update service.

 

uCLinux Operating System
     uClinux is a derivative of the Linux 2.x kernel intended for microcontrollers without Memory Management Units (MMUs). It is the only choice for those who want to use Linux OS on the ARM7TDMI, ARAM940T CPUs.
     The small size of uCLinux depends on its pruned kernel and library. Only a small part of the conventional Linux kernel is inherated to the uCLinux system while keeping most of the leading freatures  such as stability, powerful network, filesystem support. uCLinux adopted the iCLib library instead of the Glib library in Linux so that the size of application code can be greatly reduced.
     Another difference lies between uCLinux and Standard Linux is that the uCLinux system image and its application code can be can be solidified in the Flash storage medium, they do not need to be copied from Flash to the RAM like that does in Linux. All these factors make the uCLinux system more like a conventional embedded operating system.
     Specially designed and developed for the embedded MMUless processors, the uCLinux has lost the Linux OS features that brought by the MMU (dynamic loading for example). When memory operation is needed, the uCLinux directly operates on the physical memory, therefore any program exception might lead to a breakdown of the kernel. Multithreading is supported in uCLinux, however the child thread has to be in step with the parent thread. Filesystems in uCLinux are oldfangled. uCLinux supported CPUs and referrence designs are of small number. uCLinux community development is imperfect and relatively stagnant. On the uCLinux official website, only 2 or 3 small hardware/solution supplier are listed, while large companies, such as IBM, Intel and etc., are not. All these factors might bring risks to uCLinux-adopted commercial product development.