I am thinking about how to separate kernel modules source 
packages, libraries packages and development packages.
Below are more precise proposals and questions.
Tell me what you think about it.

The one big problem is that we must completly separate 
user-space-related packages and kernel modules source packages.
I have identified the following user-space packages for Xenomai:

- libxenomai: the user-space libraries, for *all* the skins, i.e. 
basically only the content of PREFIX/lib (only *.so and *.la 

- libxenomai-dev: the include files, for *all* the skins (i.e. 
the content of PREFIX/include EXCEPT xeno_config.h) + 
PREFIX/lib/*.a + the manpage for xeno-config (BUT NOT the 
xeno-config script, since it depends on kernel-modules-specific 
configuration, see below)

- libxenomai-tools: two scripts (xeno-info, xeno-load), and 
manpages (xeno-info, xeno-load and runinfo)

- libxenomai-test: the xeno-test script and its manpage + the 
binaries and .runinfo for latency, klatency, cruncher and switch 
(BUT NOT the klatency_rt.ko module for klatency, since it is not 
a user-space thing)

- libxenomai-doc: the content of share/doc/xenomai*

The key problem is that those binary user-space packages must be 
independent from the configuration of the kernel modules 
(basically, what is in xeno_config.h).
Can someone confirm this?!
If this is not true, we are in BIG troubles for packaging, and 
this must be fixed.

I am not taking into account the problem that could arise if a 
user explicitly chooses not to compile the kernel module for a 
skin: we can tolerate this, in this case user-space apps that 
use the skin will crash, but this is the responsability of the 

Here are the kernel module source packages I propose:

- xenomai-source: the source of the kernel modules for all skins 
+ a kernel-modules-only configuration mechanism + the 
xeno-config script skeleton

- xenomai-test-source: the source of the klatency_rt module used 
by the klatency test program. i.e. this package should mainly 
contain latency-module.c and latency.h

Those module source packages will be used to generate module 
binary packages (using make-kpkg or module-assistant), e.g. if 
compiled for a 2.6.13 kernel :

- xenomai-modules-2.6.13-1-686: the binary module files installed 
into /lib/modules/2.6.13-1-686/... + the 
xeno_config-2.6.13-1-686.h include file (where to install it???) 
+ the corresponding xeno-config-2.6.13-1-686 script (which 
option --config would return the path to the 
xeno_config-2.6.13-1-686.h config file)

- xenomai-test-modules-2.6.13-1-686: the binary klatency_rt 
module installed into /lib/modules/2.6.13-1-686/...

This split packaging allows to have multiple kernel packages 
installed, with corresponding multiple xenomai-modules-* modules 
packages installed. The user-space packages (libxenomai*) must 
be usable with any of those module packages, without rebuilding.

For compiling application modules for one or the other 
xenomai-modules-* module package, users will have to choose the 
right xeno-config-* script to execute, that would each return 
the path to a different xeno-config-*.h file.
This would be very much like Debian's packaging of kernels: each 
kernel package installs a /boot/config-* file that corresponds 
to the kernel compilation configuration.
It will be able to configure one xeno-config script to be the 
"default" on the system, using Debian's alternatives mechanism.

But to be able to make such a split packaging, I have a number of 
questions and requests:

- Could someone separate the configuration mechanism for 
kernel-space and user-space? currently when one executes
make *config, we have both user-space and kernel-space 
configuration options. This configuration mechanism cannot be 
reused as-is as the configuration mechanism for the 
xenomai-source package.

- I really don't know what to do with the simulator. Could it be 
packaged separately, as additional packages to all the the other 
ones above? Is it purely user-space? Does it build libraries 
which names clash with those of Xenomai? For instance, could a 
libxenomai-sim be a drop-in replacement for a libxenomai 
I have not been able to build it, so I don't know (I am too lazy 
to download a GCC 2.95 tarball for I don't know why).

- What could be a reasonable (i.e. safe, but not necessarily with 
the lowest latency) default kernel module configuration with all 
skins enabled? I mean, what about the SMI workaround, FPU 
support, etc. by default?

- I really don't like the idea of having ALL the include files 
include the xeno_config.h file, which is kernel-space specific, 
even when compiling only for user-space. This implicitly makes 
the compilation of user-space programs look like it depends on 
specific kernel configuration options.
The problem is: since we must be able to install multiple binary 
module packages in the same system, how to choose the right 
xeno_config.h file that comes with each package?!
And NO, installing all the include files multiple times in 
different directories is not a good solution, nor would be a 
limitation to install at most one module package (hence only one 
xeno_config.h) a good solution.

As a conclusion, I believe that the current code organization of 
Xenomai ("split the skins") is not appropriate for packaging 
("split between kernel- and user-space").

Romain Lenglet

Reply via email to