* [PATCH 0/1] libevl: Add debian package config
@ 2026-07-17 20:58 Hannes Diethelm
2026-07-17 20:58 ` [PATCH 1/1] debian: add " Hannes Diethelm
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Hannes Diethelm @ 2026-07-17 20:58 UTC (permalink / raw)
To: xenomai, rpm; +Cc: Hannes Diethelm
This patch adds a debian package config that allows to build a deb's
using dpkg-buildpackage -b -uc.
The packages are libevl / libevl-test similar to[1]. However, latmus
is placed in libevl. One might not need the tests but still want to
use latmus.
Additionally, libevl installs /usr/lib/udev/rules.d/90-libevl.rules which sets all evl
device files to group evl, g+rw. libevl.postinst adds this group and triggers an udev reload.
This allows to use libevl without root. However, using SCHED_FIFO still
needs either root or setcap cap_sys_nice+ep and possibly some other tweaks.
Some tests and my application work with cap_sys_nice+ep. However, for example latmus fails
due to unknown reasons. The debian packages sets no capabilities but this could be added
if desired.
Caveats:
The test ptrace-sync fails with <timeout waiting for gdb>. dh_strip -Xptrace-sync from[1]
does not help and it is not needed: When libevl-test-dbgsym is installed, the symbols are
available but the test still fails. With dh_strip -Xptrace-sync, the symbols are not found:
warning: could not find '.gnu_debugaltlink' file for /usr/libexec/evl/tests/ptrace-sync
If linux-evl is also built and installed as a debian package, linux-libc-dev can not be
installed due to /usr/include/evl/*-abi.h are both installed by libevl and linux-libc-dev
from the kernel build. However, installing linux-libc-dev from debian trixie works fine.
[1] https://gitlab.com/Xenomai/xenomai-images/-/tree/master/recipes-xenomai/libevl/files/debian?ref_type=heads
Hannes Diethelm (1):
debian: add debian package config
debian/README.Debian | 6 ++++
debian/changelog | 5 ++++
debian/control | 33 ++++++++++++++++++++++
debian/copyright | 55 +++++++++++++++++++++++++++++++++++++
debian/libevl-test.install | 2 ++
debian/libevl.install | 11 ++++++++
debian/libevl.postinst | 50 +++++++++++++++++++++++++++++++++
debian/libevl.postrm | 41 +++++++++++++++++++++++++++
debian/rules | 22 +++++++++++++++
debian/source/format | 1 +
debian/udev/90-libevl.rules | 12 ++++++++
11 files changed, 238 insertions(+)
create mode 100644 debian/README.Debian
create mode 100644 debian/changelog
create mode 100644 debian/control
create mode 100644 debian/copyright
create mode 100644 debian/libevl-test.install
create mode 100644 debian/libevl.install
create mode 100644 debian/libevl.postinst
create mode 100644 debian/libevl.postrm
create mode 100755 debian/rules
create mode 100644 debian/source/format
create mode 100644 debian/udev/90-libevl.rules
--
2.47.3
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/1] debian: add debian package config
2026-07-17 20:58 [PATCH 0/1] libevl: Add debian package config Hannes Diethelm
@ 2026-07-17 20:58 ` Hannes Diethelm
2026-07-20 14:30 ` [PATCH 0/1] libevl: Add " Jan Kiszka
` (2 subsequent siblings)
3 siblings, 0 replies; 8+ messages in thread
From: Hannes Diethelm @ 2026-07-17 20:58 UTC (permalink / raw)
To: xenomai, rpm; +Cc: Hannes Diethelm
Signed-off-by: Hannes Diethelm <hannes.diethelm@gmail.com>
---
debian/README.Debian | 6 ++++
debian/changelog | 5 ++++
debian/control | 33 ++++++++++++++++++++++
debian/copyright | 55 +++++++++++++++++++++++++++++++++++++
debian/libevl-test.install | 2 ++
debian/libevl.install | 11 ++++++++
debian/libevl.postinst | 50 +++++++++++++++++++++++++++++++++
debian/libevl.postrm | 41 +++++++++++++++++++++++++++
debian/rules | 22 +++++++++++++++
debian/source/format | 1 +
debian/udev/90-libevl.rules | 12 ++++++++
11 files changed, 238 insertions(+)
create mode 100644 debian/README.Debian
create mode 100644 debian/changelog
create mode 100644 debian/control
create mode 100644 debian/copyright
create mode 100644 debian/libevl-test.install
create mode 100644 debian/libevl.install
create mode 100644 debian/libevl.postinst
create mode 100644 debian/libevl.postrm
create mode 100755 debian/rules
create mode 100644 debian/source/format
create mode 100644 debian/udev/90-libevl.rules
diff --git a/debian/README.Debian b/debian/README.Debian
new file mode 100644
index 0000000..db81e67
--- /dev/null
+++ b/debian/README.Debian
@@ -0,0 +1,6 @@
+libevl for Debian
+----------------
+
+libevl creates an evl group. Members of this group can use the kernel realtime interface.
+
+ -- Hannes Diethelm <hannes.diethelm@gmail.com> Wed, 25 Mar 2026 12:22:44 +0100
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..099e5c0
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,5 @@
+libevl (59) UNRELEASED; urgency=medium
+
+ * Update r59
+
+ -- Hannes Diethelm <hannes.diethelm@gmail.com> Mon, 13 Jul 2026 10:48:21 +0200
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..152b339
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,33 @@
+Source: libevl
+Section: devel
+Priority: extra
+Maintainer: Xenomai <xenomai@lists.linux.dev>
+Rules-Requires-Root: no
+Build-Depends:
+ debhelper-compat (= 13),
+ meson,
+ pkgconf,
+ libbpf-dev,
+ cpio,
+Standards-Version: 4.7.2
+Homepage: https://v4.xenomai.org/
+
+Package: libevl
+Architecture: any
+Depends:
+ ${shlibs:Depends},
+ ${misc:Depends},
+Recommends:
+ udev,
+Description: libevl libraries and tools
+ Xenomai4 EVL userspace libraries and tools
+
+Package: libevl-test
+Architecture: any
+Depends:
+ libevl,
+ gdb,
+ ${shlibs:Depends},
+ ${misc:Depends},
+Description: libevl test suite
+ Xenomai4 EVL test suite
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..31efcd4
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,55 @@
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Source: https://gitlab.com/Xenomai/xenomai4/libevl
+Upstream-Name: libevl
+Upstream-Contact: Xenomai <xenomai@lists.linux.dev>
+
+Files:
+ *
+Copyright:
+ 2018-2021 Philippe Gerum and the libevl contributors.
+License: MIT License
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Files:
+ debian/*
+Copyright:
+ 2026 Hannes Diethelm <hannes.diethelm@gmail.com>
+License: MIT License
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
diff --git a/debian/libevl-test.install b/debian/libevl-test.install
new file mode 100644
index 0000000..f835c51
--- /dev/null
+++ b/debian/libevl-test.install
@@ -0,0 +1,2 @@
+usr/libexec/evl/evl-test
+usr/libexec/evl/tests/*
diff --git a/debian/libevl.install b/debian/libevl.install
new file mode 100644
index 0000000..6014542
--- /dev/null
+++ b/debian/libevl.install
@@ -0,0 +1,11 @@
+usr/bin/evl
+usr/bin/oob-*
+usr/bin/latmus
+usr/include/*
+usr/lib/*/pkgconfig/evl.pc
+usr/lib/*/libevl.a
+usr/lib/*/libevl.so*
+usr/libexec/evl/evl-[!t]*
+usr/libexec/evl/*trace*
+usr/libexec/evl/kconf-checklist.evl
+debian/udev/90-libevl.rules usr/lib/udev/rules.d/
diff --git a/debian/libevl.postinst b/debian/libevl.postinst
new file mode 100644
index 0000000..346e3af
--- /dev/null
+++ b/debian/libevl.postinst
@@ -0,0 +1,50 @@
+#!/bin/sh
+# postinst script for libevl.
+#
+# See: dh_installdeb(1).
+
+set -e
+
+# Summary of how this script can be called:
+# * <postinst> 'configure' <most-recently-configured-version>
+# * <old-postinst> 'abort-upgrade' <new version>
+# * <conflictor's-postinst> 'abort-remove' 'in-favour' <package>
+# <new-version>
+# * <postinst> 'abort-remove'
+# * <deconfigured's-postinst> 'abort-deconfigure' 'in-favour'
+# <failed-install-package> <version> 'removing'
+# <conflicting-package> <version>
+# for details, see https://www.debian.org/doc/debian-policy/ or
+# the debian-policy package.
+
+trigger_udev() {
+ if ! which udevadm >/dev/null 2>&1 ; then
+ return 0;
+ fi
+ udevadm control --reload-rules || true
+ udevadm trigger || true
+}
+
+case "$1" in
+ configure)
+ if ! getent group evl >/dev/null; then
+ addgroup --quiet --system evl
+ fi
+ trigger_udev
+ ;;
+
+ abort-upgrade|abort-remove|abort-deconfigure)
+ ;;
+
+ *)
+ echo "postinst called with unknown argument '$1'" >&2
+ exit 1
+ ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/libevl.postrm b/debian/libevl.postrm
new file mode 100644
index 0000000..dae5827
--- /dev/null
+++ b/debian/libevl.postrm
@@ -0,0 +1,41 @@
+#!/bin/sh
+# postrm script for libevl.
+#
+# See: dh_installdeb(1).
+
+set -e
+
+# Summary of how this script can be called:
+# * <postrm> 'remove'
+# * <postrm> 'purge'
+# * <old-postrm> 'upgrade' <new-version>
+# * <new-postrm> 'failed-upgrade' <old-version>
+# * <new-postrm> 'abort-install'
+# * <new-postrm> 'abort-install' <old-version>
+# * <new-postrm> 'abort-upgrade' <old-version>
+# * <disappearer's-postrm> 'disappear' <overwriter>
+# <overwriter-version>
+# for details, see https://www.debian.org/doc/debian-policy/ or
+# the debian-policy package.
+
+
+case "$1" in
+ purge)
+ delgroup --quiet --system evl > /dev/null || true
+ ;;
+
+ remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
+ ;;
+
+ *)
+ echo "postrm called with unknown argument '$1'" >&2
+ exit 1
+ ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..7028f23
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,22 @@
+#!/usr/bin/make -f
+
+#export DH_VERBOSE = 1
+
+#Default: linux-evl is in same folder
+# Use UAPI=FULL_PATH dpkg-buildpackage ... to specify custom location
+#Not recommended to use /usr/include with debian packages due to:
+# - libevl installs most headers there except asm/evl
+# - linux-libc-dev installs all headers but conflicts with libevl
+# due to some headers are installed at the same location
+UAPI ?= $(CURDIR)/../linux-evl
+
+ifeq ("$(wildcard $(UAPI))","")
+$(error UAPI not found in $(UAPI))
+endif
+
+%:
+ dh $@ --buildsystem=meson
+
+override_dh_auto_configure:
+ dh_auto_configure --buildsystem=meson -- -Duapi=$(UAPI)
+
diff --git a/debian/source/format b/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/debian/udev/90-libevl.rules b/debian/udev/90-libevl.rules
new file mode 100644
index 0000000..2615982
--- /dev/null
+++ b/debian/udev/90-libevl.rules
@@ -0,0 +1,12 @@
+# Xenomai4 EVL devices
+SUBSYSTEM=="evl", MODE="0660", GROUP="evl"
+KERNEL=="realtime", SUBSYSTEM=="clock", MODE="0660", GROUP="evl"
+KERNEL=="monotonic", SUBSYSTEM=="clock", MODE="0660", GROUP="evl"
+KERNEL=="monotonic_raw", SUBSYSTEM=="clock", MODE="0660", GROUP="evl"
+KERNEL=="clone", SUBSYSTEM=="monitor", MODE="0660", GROUP="evl"
+KERNEL=="clone", SUBSYSTEM=="observable", MODE="0660", GROUP="evl"
+KERNEL=="clone", SUBSYSTEM=="proxy", MODE="0660", GROUP="evl"
+KERNEL=="clone", SUBSYSTEM=="thread", MODE="0660", GROUP="evl"
+KERNEL=="clone", SUBSYSTEM=="xbuf", MODE="0660", GROUP="evl"
+KERNEL=="latmus", SUBSYSTEM=="latmus", MODE="0660", GROUP="evl"
+KERNEL=="hectic", SUBSYSTEM=="hectic", MODE="0660", GROUP="evl"
--
2.47.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 0/1] libevl: Add debian package config
2026-07-17 20:58 [PATCH 0/1] libevl: Add debian package config Hannes Diethelm
2026-07-17 20:58 ` [PATCH 1/1] debian: add " Hannes Diethelm
@ 2026-07-20 14:30 ` Jan Kiszka
2026-07-20 22:22 ` Hannes Diethelm
2026-07-20 14:38 ` Philippe Gerum
2026-07-20 15:55 ` Florian Bezdeka
3 siblings, 1 reply; 8+ messages in thread
From: Jan Kiszka @ 2026-07-20 14:30 UTC (permalink / raw)
To: Hannes Diethelm, xenomai, rpm; +Cc: Tobias Schaffner
Hi Hannes,
thanks for carrying this over.
On 17.07.26 22:58, Hannes Diethelm wrote:
> This patch adds a debian package config that allows to build a deb's
> using dpkg-buildpackage -b -uc.
>
> The packages are libevl / libevl-test similar to[1]. However, latmus
> is placed in libevl. One might not need the tests but still want to
> use latmus.
For the purpose of tuning the core, or what is the reasoning here?
>
> Additionally, libevl installs /usr/lib/udev/rules.d/90-libevl.rules which sets all evl
> device files to group evl, g+rw. libevl.postinst adds this group and triggers an udev reload.
>
> This allows to use libevl without root. However, using SCHED_FIFO still
> needs either root or setcap cap_sys_nice+ep and possibly some other tweaks.
> Some tests and my application work with cap_sys_nice+ep. However, for example latmus fails
> due to unknown reasons. The debian packages sets no capabilities but this could be added
> if desired.
>
> Caveats:
>
> The test ptrace-sync fails with <timeout waiting for gdb>. dh_strip -Xptrace-sync from[1]
> does not help and it is not needed: When libevl-test-dbgsym is installed, the symbols are
> available but the test still fails. With dh_strip -Xptrace-sync, the symbols are not found:
> warning: could not find '.gnu_debugaltlink' file for /usr/libexec/evl/tests/ptrace-sync
But the package built by xenomai-images does not have this problem and
runs the ptrace test successfully. Already dug into the key differences?
>
> If linux-evl is also built and installed as a debian package, linux-libc-dev can not be
> installed due to /usr/include/evl/*-abi.h are both installed by libevl and linux-libc-dev
> from the kernel build. However, installing linux-libc-dev from debian trixie works fine.
This looks wrong: The kernel is providing us with a different UAPI, thus
also needs to deliver an alternative linux-libc-dev package. It should
be the role of libevl to deliver those headers as it has no knowledge
about the actual kernel in use here. That's why xenomai-images is
generating a new linux-libc-dev and is not relying on libevl here.
Jan
--
Siemens AG, Foundational Technologies
Linux Expert Center
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/1] libevl: Add debian package config
2026-07-17 20:58 [PATCH 0/1] libevl: Add debian package config Hannes Diethelm
2026-07-17 20:58 ` [PATCH 1/1] debian: add " Hannes Diethelm
2026-07-20 14:30 ` [PATCH 0/1] libevl: Add " Jan Kiszka
@ 2026-07-20 14:38 ` Philippe Gerum
2026-07-20 15:55 ` Florian Bezdeka
3 siblings, 0 replies; 8+ messages in thread
From: Philippe Gerum @ 2026-07-20 14:38 UTC (permalink / raw)
To: Hannes Diethelm; +Cc: xenomai
Hannes Diethelm <hannes.diethelm@gmail.com> writes:
>
> If linux-evl is also built and installed as a debian package, linux-libc-dev can not be
> installed due to /usr/include/evl/*-abi.h are both installed by libevl and linux-libc-dev
> from the kernel build. However, installing linux-libc-dev from debian trixie works fine.
>
If this helps, we can tell libevl not to install the uapi by passing the
-Dinstall-uapi=false switch to meson [setup].
--
Philippe.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/1] libevl: Add debian package config
2026-07-17 20:58 [PATCH 0/1] libevl: Add debian package config Hannes Diethelm
` (2 preceding siblings ...)
2026-07-20 14:38 ` Philippe Gerum
@ 2026-07-20 15:55 ` Florian Bezdeka
3 siblings, 0 replies; 8+ messages in thread
From: Florian Bezdeka @ 2026-07-20 15:55 UTC (permalink / raw)
To: Hannes Diethelm, xenomai, rpm; +Cc: Jan Kiszka
Hi Hannes,
On Fri, 2026-07-17 at 22:58 +0200, Hannes Diethelm wrote:
> This patch adds a debian package config that allows to build a deb's
> using dpkg-buildpackage -b -uc.
>
> The packages are libevl / libevl-test similar to[1]. However, latmus
> is placed in libevl. One might not need the tests but still want to
> use latmus.
We should try to keep the minimum footprint of all runtime packages as
small as possible. I'm quite sure that latmus is not needed / necessary
on all the production images / machines.
Maybe we could introduce something like (lib)evl-tools or (lib)evl-utils
holding latmus - and maybe even more of those tools / validators in the
future?
Florian
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/1] libevl: Add debian package config
2026-07-20 14:30 ` [PATCH 0/1] libevl: Add " Jan Kiszka
@ 2026-07-20 22:22 ` Hannes Diethelm
2026-07-21 8:13 ` Philippe Gerum
2026-07-21 10:37 ` Jan Kiszka
0 siblings, 2 replies; 8+ messages in thread
From: Hannes Diethelm @ 2026-07-20 22:22 UTC (permalink / raw)
To: Jan Kiszka, xenomai, rpm; +Cc: Tobias Schaffner, Florian Bezdeka
Am 20.07.26 um 16:30 schrieb Jan Kiszka:
> Hi Hannes,
>
> thanks for carrying this over.
Thanks for all the feedback.
>
> On 17.07.26 22:58, Hannes Diethelm wrote:
>> This patch adds a debian package config that allows to build a deb's
>> using dpkg-buildpackage -b -uc.
>>
>> The packages are libevl / libevl-test similar to[1]. However, latmus
>> is placed in libevl. One might not need the tests but still want to
>> use latmus.
>
> For the purpose of tuning the core, or what is the reasoning here?
Yes exactly. One might need latmus but won't care about the tests.
Based on the comment from Florian, it would probably make more sense to create more packages:
- libevl (only library)
- libevl-bin (evl / latmus / oob-* tidbits)
- libevl-test (tests)
- libevl-dev (headers / libevl.a)
>
>>
>> Additionally, libevl installs /usr/lib/udev/rules.d/90-libevl.rules which sets all evl
>> device files to group evl, g+rw. libevl.postinst adds this group and triggers an udev reload.
>>
>> This allows to use libevl without root. However, using SCHED_FIFO still
>> needs either root or setcap cap_sys_nice+ep and possibly some other tweaks.
>> Some tests and my application work with cap_sys_nice+ep. However, for example latmus fails
>> due to unknown reasons. The debian packages sets no capabilities but this could be added
>> if desired.
>>
>> Caveats:
>>
>> The test ptrace-sync fails with <timeout waiting for gdb>. dh_strip -Xptrace-sync from[1]
>> does not help and it is not needed: When libevl-test-dbgsym is installed, the symbols are
>> available but the test still fails. With dh_strip -Xptrace-sync, the symbols are not found:
>> warning: could not find '.gnu_debugaltlink' file for /usr/libexec/evl/tests/ptrace-sync
>
> But the package built by xenomai-images does not have this problem and
> runs the ptrace test successfully. Already dug into the key differences?
Not yet. Might be just a different gdb version or path issue. I am using Debian Trixie.
Is there a way to download this images? I've seen there is a way to build them locally, i can also try this.
>
>>
>> If linux-evl is also built and installed as a debian package, linux-libc-dev can not be
>> installed due to /usr/include/evl/*-abi.h are both installed by libevl and linux-libc-dev
>> from the kernel build. However, installing linux-libc-dev from debian trixie works fine.
>
> This looks wrong: The kernel is providing us with a different UAPI, thus
> also needs to deliver an alternative linux-libc-dev package. It should
> be the role of libevl to deliver those headers as it has no knowledge
> about the actual kernel in use here. That's why xenomai-images is
> generating a new linux-libc-dev and is not relying on libevl here.
>
Yes, Philippe sent me the hint with the -Dinstall-uapi=false switch, thanks.
One remaining issue is the versioning / dependency's. For now, to keep it simple, I just used the libevl tag
as the version. And it doesn't recommend a xenomai4 kernel.
For now, the packages are:
libevl_59_amd64.deb
libevl-test_59_amd64.deb dep libevl >= 59
linux-image-6.12.90-cip24-xenomai4-r59_6.12.90-3_amd64.deb (Withouth PREEMT_RT)
linux-image-6.12.90-cip24-xenomai4-r59-rt_6.12.90-3_amd64.deb (With PREEMT_RT)
I am working here [1] on creating Debian xenomai4 packages for linuxcnc. Not perfect but does the job. It's still WIP
but a few people got this already working without knowledge how to build kernels.
I did not yet push the latest version and I have to change from pushing the binary's to github releases.
With the uapi installed with linux-libc-dev, libevl has to depend on the right linux-libc-dev.
Version 59 is not really correct. The kernel has EVL ABI 45. Libevl has API 36, needs API >= 45.
For kernel dependency's, the ABI version is important, right?
For libevl, it could be either the API = 36 / dso_version = 8.0.0 / version = 0.59.
Variant with API/ABI as version:
- libevl 36 recommends linux-image-xenomai4 >= 45 or linux-image-xenomai4-rt >= 45
- libevl-bin 36 dep libevl >= 36
- libevl-test 36 dep libevl >= 36
- libevl-dev 36 dep libevl >= 36 linux-libc-dev >= 1:45
Dependency packages, needed to convert the ABI versioning into kernel versioning:
- linux-image-xenomai4 45 dep linux-image-6.12.90-cip24-xenomai4-45 or other kernel versions
- linux-image-xenomai4-rt 45 dep linux-image-6.12.90-cip24-xenomai4-rt-45 or other kernel versions
- linux-libc-dev 1:45 dep linux-libc-dev-xenomai4-45
Kernel packages:
- linux-image-6.12.90-cip24-xenomai4-45 6.12.90
- linux-image-6.12.90-cip24-xenomai4-rt-45 6.12.90
- linux-libc-dev-xenomai4-45 6.12.90
To create a linux-libc-dev-xenomai4-45 package, I would have to add a patch for linux-evl, the standard
kernel debian package system doesn't support custom names for linux-libc-dev. But this should be not to
complicated.
It's the first Debian package I am working on that's not only for me. I have to read a bit more in the
doc's how this dependency's are normally created properly.
Also linux-libc-dev 1:45 is a bit dirty: Using the epoch to replace the standard linux-libc-dev by a dependency
package that will not be replaced by the latest stock one. It should work tough.
Alternatives:
-Install the abi with libevl
-Create a linux-libc-dev-xenomai4 package from linux-evl and depend on that / remove the evl headers from linux-libc-dev
so linux-libc-dev stock can be installed together with linux-libc-dev-xenomai4. I compared the content, most evl related files
are new, only fnctl.h has
#define O_OOB 010000000000
added. However, I don't see any usage in libevl. So this should work.
-Leave the dependency's on the kernel packages away and solve this by documentation
However, you would have to place a hold on linux-libc-dev so it doesn't get replaced as soon as your OS has a newer kernel.
Do you have other ideas how to solve the version / dependency's / linux-libc-dev issue?
For now I named the kernel packages -xenomai4 but I am thinking about changing to -evl or xenomai-evl. What is more appropriate?
> Jan
>
[1] https://github.com/hdiethelm/xenomai4-linuxcnc
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/1] libevl: Add debian package config
2026-07-20 22:22 ` Hannes Diethelm
@ 2026-07-21 8:13 ` Philippe Gerum
2026-07-21 10:37 ` Jan Kiszka
1 sibling, 0 replies; 8+ messages in thread
From: Philippe Gerum @ 2026-07-21 8:13 UTC (permalink / raw)
To: Hannes Diethelm; +Cc: Jan Kiszka, xenomai, Tobias Schaffner, Florian Bezdeka
Hannes Diethelm <hannes.diethelm@gmail.com> writes:
>
> Version 59 is not really correct. The kernel has EVL ABI 45. Libevl has API 36, needs API >= 45.
> For kernel dependency's, the ABI version is important, right?
We have two distinct revision levels:
- the ABI level between kernel and userland (syscalls and definitions).
- the API level which is specific to libevl, allowing apps to determine
whether some feature/routine/behavior is present or not. This is more
of a source-level thing. Multiple API revisions may be compatible with
a single ABI revision, and conversely.
You will find EVL_ABI_PREREQ in include/evl/version.h, this is the
minimum ABI revision which that particular instance of libevl can work
with. This is what you need to keep in sync with the core available from
the kernel part.
--
Philippe.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/1] libevl: Add debian package config
2026-07-20 22:22 ` Hannes Diethelm
2026-07-21 8:13 ` Philippe Gerum
@ 2026-07-21 10:37 ` Jan Kiszka
1 sibling, 0 replies; 8+ messages in thread
From: Jan Kiszka @ 2026-07-21 10:37 UTC (permalink / raw)
To: Hannes Diethelm, xenomai, rpm; +Cc: Tobias Schaffner, Florian Bezdeka
On 21.07.26 00:22, Hannes Diethelm wrote:
> Am 20.07.26 um 16:30 schrieb Jan Kiszka:
>> Hi Hannes,
>>
>> thanks for carrying this over.
>
> Thanks for all the feedback.
>
>>
>> On 17.07.26 22:58, Hannes Diethelm wrote:
>>> This patch adds a debian package config that allows to build a deb's
>>> using dpkg-buildpackage -b -uc.
>>>
>>> The packages are libevl / libevl-test similar to[1]. However, latmus
>>> is placed in libevl. One might not need the tests but still want to
>>> use latmus.
>>
>> For the purpose of tuning the core, or what is the reasoning here?
>
> Yes exactly. One might need latmus but won't care about the tests.
>
> Based on the comment from Florian, it would probably make more sense to
> create more packages:
>
> - libevl (only library)
> - libevl-bin (evl / latmus / oob-* tidbits)
> - libevl-test (tests)
> - libevl-dev (headers / libevl.a)
>
Alternatively, maybe there is a way to split off the tuning feature from
latmus tool, like we have with autotune in xenomai3.
>>
>>>
>>> Additionally, libevl installs /usr/lib/udev/rules.d/90-libevl.rules
>>> which sets all evl
>>> device files to group evl, g+rw. libevl.postinst adds this group and
>>> triggers an udev reload.
>>>
>>> This allows to use libevl without root. However, using SCHED_FIFO still
>>> needs either root or setcap cap_sys_nice+ep and possibly some other
>>> tweaks.
>>> Some tests and my application work with cap_sys_nice+ep. However, for
>>> example latmus fails
>>> due to unknown reasons. The debian packages sets no capabilities but
>>> this could be added
>>> if desired.
>>>
>>> Caveats:
>>>
>>> The test ptrace-sync fails with <timeout waiting for gdb>. dh_strip -
>>> Xptrace-sync from[1]
>>> does not help and it is not needed: When libevl-test-dbgsym is
>>> installed, the symbols are
>>> available but the test still fails. With dh_strip -Xptrace-sync, the
>>> symbols are not found:
>>> warning: could not find '.gnu_debugaltlink' file for /usr/libexec/
>>> evl/tests/ptrace-sync
>>
>> But the package built by xenomai-images does not have this problem and
>> runs the ptrace test successfully. Already dug into the key differences?
>
> Not yet. Might be just a different gdb version or path issue. I am using
> Debian Trixie.
>
> Is there a way to download this images? I've seen there is a way to
> build them locally, i can also try this.
>
We do not ship pre-built images, you would have to build your own image
here.
>>
>>>
>>> If linux-evl is also built and installed as a debian package, linux-
>>> libc-dev can not be
>>> installed due to /usr/include/evl/*-abi.h are both installed by
>>> libevl and linux-libc-dev
>>> from the kernel build. However, installing linux-libc-dev from debian
>>> trixie works fine.
>>
>> This looks wrong: The kernel is providing us with a different UAPI, thus
>> also needs to deliver an alternative linux-libc-dev package. It should
>> be the role of libevl to deliver those headers as it has no knowledge
>> about the actual kernel in use here. That's why xenomai-images is
>> generating a new linux-libc-dev and is not relying on libevl here.
>>
>
> Yes, Philippe sent me the hint with the -Dinstall-uapi=false switch,
> thanks.
>
> One remaining issue is the versioning / dependency's. For now, to keep
> it simple, I just used the libevl tag
> as the version. And it doesn't recommend a xenomai4 kernel.
>
> For now, the packages are:
> libevl_59_amd64.deb
> libevl-test_59_amd64.deb dep libevl >= 59
> linux-image-6.12.90-cip24-xenomai4-r59_6.12.90-3_amd64.deb (Withouth
> PREEMT_RT)
> linux-image-6.12.90-cip24-xenomai4-r59-rt_6.12.90-3_amd64.deb (With
> PREEMT_RT)
>
> I am working here [1] on creating Debian xenomai4 packages for linuxcnc.
> Not perfect but does the job. It's still WIP
> but a few people got this already working without knowledge how to build
> kernels.
> I did not yet push the latest version and I have to change from pushing
> the binary's to github releases.
>
> With the uapi installed with linux-libc-dev, libevl has to depend on the
> right linux-libc-dev.
>
> Version 59 is not really correct. The kernel has EVL ABI 45. Libevl has
> API 36, needs API >= 45.
> For kernel dependency's, the ABI version is important, right?
>
> For libevl, it could be either the API = 36 / dso_version = 8.0.0 /
> version = 0.59.
>
> Variant with API/ABI as version:
> - libevl 36 recommends linux-image-xenomai4 >= 45 or linux-image-
> xenomai4-rt >= 45
> - libevl-bin 36 dep libevl >= 36
> - libevl-test 36 dep libevl >= 36
> - libevl-dev 36 dep libevl >= 36 linux-libc-dev >= 1:45
>
> Dependency packages, needed to convert the ABI versioning into kernel
> versioning:
> - linux-image-xenomai4 45 dep linux-image-6.12.90-cip24-xenomai4-45 or
> other kernel versions
> - linux-image-xenomai4-rt 45 dep linux-image-6.12.90-cip24-xenomai4-
> rt-45 or other kernel versions
> - linux-libc-dev 1:45 dep linux-libc-dev-xenomai4-45
>
> Kernel packages:
> - linux-image-6.12.90-cip24-xenomai4-45 6.12.90
> - linux-image-6.12.90-cip24-xenomai4-rt-45 6.12.90
> - linux-libc-dev-xenomai4-45 6.12.90
>
> To create a linux-libc-dev-xenomai4-45 package, I would have to add a
> patch for linux-evl, the standard
> kernel debian package system doesn't support custom names for linux-
> libc-dev. But this should be not to
> complicated.
>
> It's the first Debian package I am working on that's not only for me. I
> have to read a bit more in the
> doc's how this dependency's are normally created properly.
>
> Also linux-libc-dev 1:45 is a bit dirty: Using the epoch to replace the
> standard linux-libc-dev by a dependency
> package that will not be replaced by the latest stock one. It should
> work tough.
>
> Alternatives:
> -Install the abi with libevl
> -Create a linux-libc-dev-xenomai4 package from linux-evl and depend on
> that / remove the evl headers from linux-libc-dev
> so linux-libc-dev stock can be installed together with linux-libc-dev-
> xenomai4. I compared the content, most evl related files
> are new, only fnctl.h has
> #define O_OOB 010000000000
> added. However, I don't see any usage in libevl. So this should work.
> -Leave the dependency's on the kernel packages away and solve this by
> documentation
> However, you would have to place a hold on linux-libc-dev so it doesn't
> get replaced as soon as your OS has a newer kernel.
>
> Do you have other ideas how to solve the version / dependency's / linux-
> libc-dev issue?
>
> For now I named the kernel packages -xenomai4 but I am thinking about
> changing to -evl or xenomai-evl. What is more appropriate?
The topic is complicated because neither Debian nor other packaging
systems I know allow to express this two-dimensional version dependency
(>= ABI version X, latest kernel Y). If you encode the ABI into the
package version as well, you are folding that version matrix into a
single version number (>= abi-X-kernel-Y, or >= kernel-Y-ABI-X) - none
is perfect.
If your target audience for those packages primarily consists of
beginners, it will be best to model it via a lock-step between libevl
and some kernel package that carries a specific ABI version in its name
(linux-image-evlX_kernel-ver-Y etc.). This implies creating a
linux-libc-dev flavor as well (linux-libc-dev-evlX or so). That package
should carry Provides:, Conflicts:, and Replaces: for linux-libc-dev in
its metadata.
We side-step all these issues in xenomai-images by generating and
installing a set of custom packages in a curated environment where
upstream will not be able to replace the self-build xenomai packages
(preferences are set accordingly for local repo with those packages).
Jan
--
Siemens AG, Foundational Technologies
Linux Expert Center
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-07-21 10:37 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-17 20:58 [PATCH 0/1] libevl: Add debian package config Hannes Diethelm
2026-07-17 20:58 ` [PATCH 1/1] debian: add " Hannes Diethelm
2026-07-20 14:30 ` [PATCH 0/1] libevl: Add " Jan Kiszka
2026-07-20 22:22 ` Hannes Diethelm
2026-07-21 8:13 ` Philippe Gerum
2026-07-21 10:37 ` Jan Kiszka
2026-07-20 14:38 ` Philippe Gerum
2026-07-20 15:55 ` Florian Bezdeka
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.