MaRTE OS ---------- Minimal Real Time Operating System for Embedded Applications Version 1.8 - May 2008 Copyright (C) 2003 Universidad de Cantabria, SPAIN Authors: Mario Aldea Rivas aldeam@unican.es Michael Gonzalez Harbour mgh@unican.es Introduction ============ MaRTE OS is a real-time kernel for embedded applications that follows the Minimal Real-Time POSIX.13 [POSIX] subset. Most of its code is written in Ada with some C and assembler parts. It allows software cross-development of Ada and C applications using the GNU compilers Gnat and Gcc. In particular in the case of Gnat the Run-Time Library (GNARL) has been adapted to run on our kernel. Remote debugging of applications is also possible using the GNU debugger gdb. The MaRTE OS cross environment is formed by a PC running Linux as "Host" and a bare 386 PC as "Target", both systems connected by and Ethernet LAN (for application booting) and a serial line (for remote debugging). MaRTE OS is been developed in the Group of "Computadores y Tiempo Real" of the Department of "Electronica y Computadores" of the University of Cantabria. It is not a finished product, but we share it hopping it can be useful for educational or experimental purposes. MaRTE OS is available under the GNU General Public License. Functionality Implemented ========================= MaRTE OS implements the following POSIX functionality: - Pthread Management (creation, finalization, attributes, ...). - Priority scheduling (FIFO, Round-Robin and Sporadic Server scheduling policies supported). - Mutexes and Condition Variables. - Semaphores. - Signals (partially implemented). - Clocks (monotonic and real time) and Timers. - CPU time Clocks and Timers. - Console I/O. - Time Services: absolute and relative tasks and Pthreads suspension. - Dynamic Memory Management. This POSIX functionality support the whole gnat run time library, so the current MaRTE OS implementation allows running complex C and Ada applications which do not use a file system (limitation imposed by the Minimal Real-Time POSIX.13 subset). Apart from the POSIX standard functionality supported, in MaRTE OS we have implemented some other features we consider very interesting for real-time systems programmers: - Application-Defined Scheduling: MaRTE OS includes application program interfaces (API) that enables Ada and C applications to use application-defined scheduling algorithms in a way compatible with the scheduling algorithms defined in POSIX and in the Ada 95 Real-Time Systems Annex. Several application-defined schedulers, implemented as special user tasks, can coexist in the system in a predictable way. - Interrupts Management at Application Level: MaRTE OS offers to Ada and C programmers an API that allows dealing with hardware interrupts in an easy way. Basically this API offers operations to: enable and disable hardware interrupts, install interrupt handler procedures and put tasks or threads waiting for a hardware interrupt. - Addings to POSIX: Ada binding for CPU-Time clocks and access to the thread-specific data form a thread different from the owner. Development Environment ======================= MaRTE OS works in a cross development environment: Host Target +-------------------+ Ethernet +-----------------+ | Linux |--------------------------------| | | Gnat 3.14p | (For booting purposes, | i386 or above | | gcc 2.8.1 | involves dhcpd and nfsd) | Floppy Disk | | gdb | | | | MaRTE OS | | Doesn't need HD | | dhcpd (or bootpd) | RS-232 | Doesn't need OS | | nfsd |--------------------------------| | +-------------------+ (For debugging purposes, +-----------------+ gdb is used) Distribution Directory Overview =============================== This is the top level of the MaRTE OS directory structure. The following is a description of the files and directories you will find in it: - INSTALL: Installation instructions. - README: This file. - drivers/: code for some device drivers. - examples/: some simple program examples. - gpl.txt: GNU GENERAL PUBLIC LICENSE - include/: POSIX C header files. - kernel/ : source code for the hardware independent part of the kernel. - lib/: libraries. - libmc/: libc implementation (code taken from the OSKit [OSKit]) with slight modifications. - libmgnat/: Gnat packages modified for MaRTE OS. - marte_ug.txt: MaRTE OS User's Guide. - minstall: main installation script. - misc/: miscellany of utility packages. - netboot/: netboot programs for some common Ethernet cards. - posix5/: POSIX.5 packages (POSIX Ada bindings). Based on the Florist [Florist] implementation. - sll/: singly linked lists used by the kernel. - tasks_inspector/: a tool to analyze graphically the execution flow of a finished application. - utils/: compilation utilities. - x86/: source code for the hardware dependent part of the kernel (implementation for an 386 PC or above). - x86/boot/: bootstrap and PC initialization code (taken with some modifications from the OSKit library [OSKit]). References ========== [POSIX] IEEE Std. 1003.13-1998. Information Technology -Standardized Application Environment Profile- POSIX Realtime Application Support (AEP). The Institute of Electrical and Electronics Engineers, 1998. [OSKit] http://www.cs.utah.edu/flux/oskit/ [Florist] http://www.cs.fsu.edu/~baker/florist.html -------------------------------------------------------------------------- Contact Address: MaRTE OS Internet site: aldeam@unican.es http://marte.unican.es Department of Electronica y Computadores Group of Computadores y Tiempo Real University of Cantabria --------------------------------------------------------------------------