Xenomai manual installation

From ArmadeusWiki
Jump to: navigation, search
Note Note: Xenomai is now (starting from Armadeus 3.1 release) integrated in our Buildroot. Following instructions are only given as references !

Explanation of the process used to install & deploy Xenomai on Buildroot

The main steps are:

  • Installation of Adeos, an interrupt pipeline
  • Creation of the Xenomai project directories used for this tutorial
  • Downloading of Xenomai, extract & patch the sources
  • Preparation of the Armadeus Linux kernel to support Xenomai
  • Compilation of Xenomai
  • Deployment of the Xenomai user space applications into the target root file system
  • Validation of the installation

Naming conventions : In this document, the following naming conventions will be applied :

  • Xeno or xeno will be used to reference Xenomai
  • $ARMADEUS_ROOT will be used to reference the root directory of the Xenomai project

Install Adeos

First of all, you need to deploy a working Adeos on your board. This can easily be done by following these instructions.

Create your Xenomai project folder architecture

Xenomai will create some files to be deployed. By default, the command make install will copy the files into the following directories :

  • /usr/xenomai/* contain test programs, includes, ...
  • /usr/share/xenomai/* contain the documentation.

To have a clean but integrated folder architecture, we will create some specific directories to install theses files. Later, we will copy them into the board's root filesystem so Xenomai testing programs will be available on the apf.

Also, because Xenomai documentation installed is quite huge (several Mb), we will avoid to copy it on the board.

$ mkdir $ARMADEUS_ROOT/xenomai
$ mkdir $ARMADEUS_ROOT/xenomai/root_dir
$ mkdir $ARMADEUS_ROOT/xenomai/root_dir/xenodoc

$ARMADEUS_ROOT/xenomai/root_dir/usr will contain all Xenomai target specific files. This directory will be transfered to the board.

$ARMADEUS_ROOT/xenomai/root_dir/xenodoc will contain Xenomai documentation that won't be transfered to the board.

Download & patch

Well, let's start by downloading Xenomai sources.

$ cd $ARMADEUS_ROOT/xenomai
$ wget http://download.gna.org/xenomai/stable/xenomai-2.4.3.tar.bz2
$ tar xvjf xenomai-2.4.3.tar.bz2

To compile Xenomai-2.4.3 with the current uClibc used within the Armadeus project (uClibc-0.9.29), we will have to patch :

To patch Xenomai sources :

$ cd $ARMADEUS_ROOT/xenomai/xenomai-2.4.3
$ wget https://mail.gna.org/public/xenomai-help/2008-03/bin5IoYobpAwu.bin
$ patch -p0 < bin5IoYobpAwu.bin
  patching file src/skins/posix/thread.c

To patch uClibc :
This patch has been inserted into the Armadeus project, starting from revision 799. Update your svn tree to make sure it will be applied.


Xenomai kernel space support

Xenomai is a co-kernel cooperating with Linux. This suite is made of two parts :

  • The Xenomai kernel: It is provided as a patch to the regular Linux kernel and can be compiled as a full part of the kernel or as a regular module.
  • Xenomai user space data: This set of file contains:
    • header files used to compile Xenomai applications
    • Binary files to validate and measure the performace of Xenomai

This section describe how to compile the kernel space for Xenomai.

Here we will patch the Armadeus Linux kernel to add Xenomai features. This is automatically done via the Xenomai script prepare-kernel.sh

$ cd $ARMADEUS_ROOT/xenomai/xenomai-2.4.3
$ ./scripts/prepare-kernel.sh --linux=$ARMADEUS_ROOT/buildroot/build_arm/linux- --arch=arm
  • --linux is used to specify which kernel we want to patch
  • --arch is used to specify for which platform we want to patch (arm in our case)

Let's configure the Xenomai kernel :

$ make linux-menuconfig

You should see the new entry :

Real-time sub-system  --->

Enter in it and check the following to compile Xenomai as a part of the Linux kernel :

[*] Xenomai
  <*> Nucleus 
  [*]   Pervasive real-time support in user-space
  [ ]     Interrupt shield support
  [*]     Priority coupling support
  [*]   Optimize as pipeline head
  (32)  Number of pipe devices
  (512) Number of registry slots
  (128) Size of the system heap (Kb)
  (32)  Size of the private stack pool (Kb)
  [*]   Statistics collection
  [ ]   Debug support
  [ ]   Shared interrupts
     Timing  --->
     Scalability  --->
     Machine  --->
     Interfaces  --->
     Drivers  --->

Additionaly, to enable / disable the different available skins, go into "Interfaces --->" :

<*> Native API  --->
<*> POSIX API  --->
< > pSOS+ emulator  --->
< > uITRON API  --->
< > VRTX emulator  --->
< > VxWorks emulator  --->
< > RTAI emulator  --->
<*> Real-Time Driver Model  --->

Finally, compile Xenomai:

$ make

Xenomai User Space support

Because we need to cross compile Xenomai applications for ARM, we will use the cross compilations tools provided by Armadeus/Buildroot.

Let's update our PATH accordingly :

$ export PATH=$ARMADEUS_ROOT/buildroot/build_armv4t/staging_dir/bin:$PATH

We are now ready to start the user space compilation.

First, let's configure Xeno and create the makefiles :

$ cd $ARMADEUS_ROOT/xenomai/xenomai-2.4.3
$ ./configure --enable-arm-mach=imx --host=arm-linux --datarootdir=/xenodoc
  • --enable-arm-mach : We want to build Xeno for the i.MX (ARM) architecture
  • --host : Prefix used for all compilation tools
  • --datarootdir :

Finally, compile user space utilities.

$ make


First, install Xenomai data in $ARMADEUS_ROOT/xenomai/root-dirs/target

$ cd $ARMADEUS_ROOT/xenomai/xenomai-2.4.3
$ make DESTDIR=$ARMADEUS_ROOT/xenomai/root-dir install

This command will install all Xenomai data in $ARMADEUS_ROOT/xenomai/root-dir. Have a look in this directory. Note that it contains two sub directories, xenodoc and usr. xenodoc contains all documentation regarding Xenomai. As said previously, we will not copy xenodoc on the board. Instead, we will only transfert the required files to run Xeno applications on the APF. These files are located under usr/xenomai.

Before modifying the board's root filesystem, we will first make a backup of it.

$ cp -R $ARMADEUS_ROOT/buildroot/project_build_armv4t/apf9328/root $ARMADEUS_ROOT/buildroot/project_build_armv4t/apf9328/root.orig

We can now copy Xeno data to the board's root filesystem:

$ cp -R $ARMADEUS_ROOT/xenomai/root-dir/usr/* $ARMADEUS_ROOT/buildroot/project_build_armv4t/apf9328/root/usr/

And generate the target filesystem

$ make

You can now transfer the rootfs and the kernel on the APF.

Validate the installation

Boot the APF and logon as root.

You can double check Xeno is installed correctly :

$ dmesg | grep Xenomai
 I-pipe: Domain Xenomai registered.
 Xenomai: hal/arm started.
 Xenomai: real-time nucleus v2.4.3 (Back to Shalla-Bal) loaded.
 Xenomai: starting native API services.
 Xenomai: starting POSIX services.
 Xenomai: starting RTDM services.

We will now update our environment to add Xenomai features. On the APF, run the following commands:

$ export LD_LIBRARY_PATH=/usr/xenomai/lib:$LD_LIBRARY_PATH
$ export PATH=/usr/xenomai/bin:$PATH

To make the changes permanent, add /usr/xenomai/lib to $ARMADEUS_ROOT/buildroot/project_build_armv4t/apf9328/root/etc/ld.so.conf

Now we can run the performance test provided by Xenomai:

$ xeno-test