This is RTLGnat version 1.0 Copyright (c) OCERA Consortium. Dec, 2002. Please, read the license terms and conditions in the accompanying file: COPYRIGHT.txt Authors: Miguel Masmano-Tello Jorge Real-Sáez Real-Time Systems Group Department of Computer Engineering (DISCA) Technical University of Valencia, Spain Introduction ============ RTLGnat is a port of the GNAT Ada compiler for the Real-Time Linux operating system. An Ada program can be compiled as a Linux loadable kernel module, where the program's tasks run as RTLinux threads. As a result, the Ada program is run in the Kernel space with more priority than any other running Linux application, therefore achieving Real-Time performance UNDER CERTAIN CONDITIONS that will be explained in more detail in section "Real-Time performance". Features ======== The current version of RTLGnat implements the core language and the Real-Time Systems Annex (annex D). Requirements ============ A PC machine with: Linux Kernel 2.4.18 or later for the i386 or above. Earlier versions of the kernel will probably do as well, but we have not tested this point. The Linux Kernel is available from http://www.kernel.org GNAT 3.14p or 3.15p Ada compiler for Linux. Most Linux distributions include an "unofficial" version of the GNAT compiler as an optional package, but only the official distribution of the compiler should be used with RTLGnat. The official site for the GNAT compiler is ftp://cs.nyu.edu/pub/gnat/ The "bigphysarea" patch for the kernel. Available from http://www.polyware.nl/~middelink/En/hob-v4l.html Real-Time Linux 3.1, 3.2pre1, 3.2pre2 or later (as long as the POSIX interface is preserved). RTLinux is available from ftp://www.rtlinux-gpl.org/pub/rtlinux Real-Time performance ===================== The goal of RTLGnat is to be able to run concurrent real-time applications with real-time guarantees. The RTLGNAT approach is to run the run-time system and the hard real-time tasks as a kernel module, therefore avoiding the interference from other processes. The way the operating system (RTLinux) provides this guarantee is basically by virtualizing the interrupts for Linux. When an interrupt occurs, it is RTLinux who captures it first. If necessary, RTLinux reissues the interrupt to Linux after it has been captured (and possibly processed) by itself. This scheme allows to run the real-time tasks in an Ada program with a higher priority than Linux. Nevertheless, there are still some factors that may affect this ideal scenario. One of them is caching. This is not a problem of RTLGnat, but you must take the effects of cache faults into account in your application analysis in order to achieve a deterministic behaviour. Another source of indeterminism, and this is more problematic, is the fact that some applications and drivers may violate the RTLinux scheme for enabling and disabling interrupts. These applications enable and disable interrupts by means of the assembly cli and sti instructions, instead of using the RTLinux macros STI and CLI. Therefore, they actually (not virtually) enable and disable interrupts. This may occur at any time, which makes the system unpredictable. Known examples of such applications are the XWindows system and some commercial driver modules. Unfortunately, we do not have a list of such applications, but you can guess whether a program executes the actual "cli" instruction with this simple command: objdump -S | grep cli (thanks to Juan Zamorano for the fun about this command ;-) Known problems and limitations ============================== The limitations imposed by version 0.1 of RTLGnat have been removed. See section "Version history" for more details. Compilation notes ================= Please, note that makefiles must be called with -j1 flag during the installation of RTLGnat 1.0, to avoid parallel execution of several compilations in multiprocessor platforms. This is the default behaviour. Version history =============== 1.0 Second release. September 2003. - More exhaustive coverage of the run-time system. - Works with both GNAT 3.14p and 3.15p. - The RTGL layer has been reimplemented. Now the code is better organised and there is added support for hardware exception handling. - Full Ada.Text_IO support (for the virtual files supported by RTLinux.) - Problems with floating point conversions in RTLGnat 0.1 have been solved. 0.1 First release. April 2003. Main sites ========== You can download RTLGNAT 0.1a from the following URL: http://rtportal.upv.es/ http://www.ocera.org/ ------------------------------------------------------------------------- This product is part of the European project "Open Components For Embeded Real-Time Applications" (OCERA), IST-35102. Developed at the Universidad Politécnica de Valencia (UPVLC). Project manager: Alfons Crespo Parner manager: Ismael Ripoll