-Compilation
-===========
+* FRSH/FORB FRAMEWORK
-1. Download ulut (from
- http://sourceforge.net/project/showfiles.php?group_id=118937&package_id=130840)
- and create symlink named ulut in the forb directory. Then follow
- these steps:
+ FRSH/FORB is a contract-based resource reservation framework for
+ distributed real-time applications. In general, it provides timing
+ isolation between applications, i.e. multiple applications can use
+ the same resources such as CPU, networks, etc., without influencing
+ timing of the other applications. The main principle is that
+ application developers use FRSH API to specify their resource
+ requirements needed to achieve desired timeliness and the framework
+ uses schedulability analysis to check these requirements. If the
+ check is successful an application is granted a "virtual resource"
+ which allow the application to use the requested resource while
+ enforcing the application not to use more than requested.
-2. Download fosa and create symlink named fosa pointing to it
+ The development of the framework begun in FRESCOR project
+ (http://frescor.org) and now it is developed as a stand-alone
+ project on SourceForge (http://frsh-forb.sf.net).
-3. Configure the sources:
- make default-config
+* BUILDING FRSH/FORB FRAMEWORK
-4. Compile IDL compilator:
- make -C forb-idl
+1) Install prerequisites. On Debian/Ubuntu:
-5. Compile the rest:
- make
-
+ apt-get install libidl-dev libcpufreq-dev libacpi-dev \
+ libcgroup-dev libncurses5-dev
+
+ To build camera demo, you need to:
+
+ apt-get install freeglut3-dev
+
+2) Go to build directory and configure the build:
+
+ cd build/aquosa
+ make default-config
+
+ If you are not satisfied with configuration found in
+ config.omk-default or config.target, you can override it in
+ config.omk.
+
+ To be able to use CPU reservations AQuoSA
+ (http://aquosa.sourceforge.net) has to be installed. If you cannot
+ use AQuoSA, the framework can also be compiled without CPU support
+ (echo CONFIG_AQUOSA=n >> config.omk) or can use cgroups (echo
+ CONFIG_CPUCG=y >> config.omk). Note, that cgroups support is not
+ well tested, but we plan to work on it.
+
+3) Compile it:
+
+ make
+
+4) Test it:
+
+ make test
+
+* DIRECTORY STRUCTURE
+
+ * build/* - configuration for different build targets
+
+ * build/aquosa - default build for linux
+
+ * build/marte - build for MarteOS. Not completely supported now.
+
+ * src - all sources
+
+ * src/forb - CORBA-like middle for interprocess and inter-node
+ communication.
+
+ * src/frsh - The core of resource reservation framework.
+
+ * src/frsh-include - FRSH API headers from FRESCOR project. Our FRSH
+ framework implements this API.
+
+ * src/fosa - Operating system adaptation layer
+
+ * src/ulut - library providing generic data types and algorithms
+ (AVL trees etc.).
+
+ * src/fna - Network adaptation layer = unified API for plugging in
+ different network protocols.
+
+ * src/fwp - Communication protocol and resource management for WiFi
+ (also works with Ethernet).
+
+* MISCELLANEOUS
+
+** Advantages of OMK make system
+
+ * It is not easy to test FRSH/FORB simultaneously on multiple
+ platforms. With OMK, you can have the same sources compiled for
+ multiple platforms/targets at the same time because it uses out
+ of source directory compilation.
+ * Automatic handling of dependencies. When a file is changed,
+ only the files dependent on it are rebuilt. Developers don't
+ have to care about this.
+ * With OMK it is easy to combine multiple components/libraries (from
+ different developers) together and compile them with the same
+ configuration (e.g. PLATFORM variable). The structure of leaf
+ makefiles (Makefile for every component) is very simple and *well
+ specified*. Because of this it is easy to combine components from
+ multiple developers.
+ * OMK already supports compilation for user-space
+ programs/libraries, Linux and RTLinux modules, RTEMS and
+ several other platforms. Now we have also added support for
+ Marte. OMK works under MinGW and Cygwin, so it can be used to
+ compile for OSE. In Pisa, they already use OMK for Aquosa.
+
+** Further remarks
+
+- If you are not interested in compilation of some component (e.g .
+ because it is currently in uncompilable state), you can simply
+ delete the link to it.
+
+- It might be possible that you will need to change some configuration
+ value from config.target. You can override any variable declared
+ there in config.omk - just create it and put variable definitions to
+ it. For example, if you have MARTE installed in a different
+ directory that the one specified in config.target, you can put the
+ following in config.omk:
+
+ MARTE_PATH=/path/to/marte/
+
+- FRSH/FORB support for Marte OS is not maintained. However, if you
+ want to try it, it is not necessary to set PATH variable to GNAT
+ compiler since OMK uses full paths to call the compiler.
+
+- Since we don't want to modify the Makefiles developed for Marte OS,
+ in order to compile only a part of the tree, you cannot simply run
+ make in the desired directory, but you have to specify -f flag with
+ the path to Makefile.rules. For this reason, we recommend using omk
+ script instead of make. The script can be obtained from
+ http://rtime.felk.cvut.cz/gitweb/omk.git/blob_plain/HEAD:/omk.
+
+** FAQ
+
+- How do I debug my Makefile.omk set-up ?
+
+ Just activate verbose compilation (V=1 or V=2):
+
+ make V=1
+
+ or
+
+ make -f /path/to/Makefile.rules binary-pass V=1
+
+- How do I get back syntax highlighting in Emacs while editing .omk files ?
+
+ Just add these lines to your $(HOME)/.emacs:
+
+ (setq auto-mode-alist
+ (append '(("\.omk$" . makefile-mode))
+ auto-mode-alist))