This is RTLGNAT version 0.1 Copyright (c) OCERA Consortium. Dec, 2002. Please, read the license terms and conditions in the accompanying file: COPYRIGHT Authors: Miguel Masmano Tello Jorge Real Saez Real-Time Systems Group Universidad Politecnica de Valencia Introduction ============ RTLGNAT is a port of the GNAT Ada compiler for the Real-Time Linux operating system. The Ada program is compiled into an RTLinux loadable kernel module, where the program's tasks will run as threads. To start running the Ada program, the generated module must be inserted by means of the Linux service "insmod". 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 RTGNAT only implements the core language (up to where we have tested) and the Real-Time Systems Annex (annex D). Requirements ============ A PC machine with: A Pentium or later (or equivalent) processor. Linux Kernel 2.4.18 or later. Earlier versions of the kernel will probably do as well, but we can't promise. Kernel is available from http://www.kernel.org GNAT 3.14p Ada compiler for Linux. Most Linux distributions include the GNAT compiler as an optional package located in the development section. The original site for the GNAT compiler is ftp://cs.nyu.edu/pub/gnat/3.14p/ The "bigphysarea" patch for the kernel. Available from http://www.polyware.nl/~middelink/En/hob-v4l.html Real-Time Linux 3.1 or later (as long as the POSIX interface is preserved). RTLinux is available from http://www.rtlinux-gpl.org 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 we know that they must execute with root permissions and one of the services they may invoke is "iopl". Known problems and limitations ============================== 1.- Floating point to string conversion doesn't work, E.g. you can not Put(Float'Image(A_Float_Number)). Future versions will eventually solve this problem. 2.- The package Ada.Text_IO is not implemented (due to lack of standard io support in RTLinux). We provide a simple output package called RTL_IO which provides simple Put procedures (Please, see the rtlinux/rtl_io.ads package specification) Compilation notes ================= Please, note that makefiles must be called with -j1 flag to avoid parallel execution of several compilation. Version history =============== 0.1 First release. Main sites ========== You can download RTLGNAT 0.1a from the following URL's: http://bernia.disca.upv.es/rtportal/ http://www.ocera.org/ ---------------------------------------------------------------------- This porting 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).