* [Buildroot] [PATCH v4 1/2] package/rasdaemon: Add rasdaemon package
2025-12-19 16:30 [Buildroot] [PATCH v4 0/2] package: add rasdaemon support Bastien Curutchet via buildroot
@ 2025-12-19 16:30 ` Bastien Curutchet via buildroot
2025-12-31 9:46 ` Thomas Petazzoni via buildroot
2025-12-19 16:30 ` [Buildroot] [PATCH v4 2/2] support/testing: add rasdaemon tests Bastien Curutchet via buildroot
1 sibling, 1 reply; 5+ messages in thread
From: Bastien Curutchet via buildroot @ 2025-12-19 16:30 UTC (permalink / raw)
To: buildroot; +Cc: Thomas Petazzoni, Fiona Klute, Bastien Curutchet
Rasdaemon is a tool that aims to replace the edac-tool and provide a way
to collect all hardware error events reported by the Linux kernel in a
common framework.
Add a new package to support rasdaemon in the 'Hardware handling'
section. It depends on libtraceevents to detect the ftrace events
generated by the kernel. There is currently a build issue when sqlite
isn't availaible while it's supposed to be an optional dependency. This
build issue is fixed by patch 0001 (which has been also submitted to the
rasdaemon project itself).
Support for the PCIe AER events is optionnal and implies a dependency on
pciutils so also add a dedicated 'sub-option' to enable it.
Add a SYSV init script to start / stop the daemon
Add myself to the DEVELOPERS file.
Reviewed-by: Fiona Klute <fiona.klute@gmx.de>
Signed-off-by: Bastien Curutchet <bastien.curutchet@bootlin.com>
---
DEVELOPERS | 3 ++
package/Config.in | 1 +
...aemon-fix-build-when-sqlite-isn-t-enabled.patch | 46 ++++++++++++++++
package/rasdaemon/Config.in | 26 +++++++++
package/rasdaemon/S95rasdaemon | 63 ++++++++++++++++++++++
package/rasdaemon/rasdaemon.hash | 3 ++
package/rasdaemon/rasdaemon.mk | 40 ++++++++++++++
7 files changed, 182 insertions(+)
diff --git a/DEVELOPERS b/DEVELOPERS
index db001d6bb0707a5877c0849fa85fa736377e60dd..b1ead6d26c4e8ff160bcc7ed85b0945ac5e551dc 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -341,6 +341,9 @@ F: package/tcpdump/
F: package/ti-uim/
F: package/uhubctl/
+N: Bastien Curutchet <bastien.curutchet@bootlin.com>
+F: package/rasdaemon/
+
N: Baxiche Su <baxiche@gmail.com>
F: package/qt6/qt6multimedia/
diff --git a/package/Config.in b/package/Config.in
index 12f327cb273526781d931b834e24d0df5024e80e..1a93cec2fa22e3a6e70acbf799b32b00d5e8b5de 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -584,6 +584,7 @@ endmenu
source "package/pru-software-support/Config.in"
source "package/pulseview/Config.in"
source "package/qoriq-cadence-dp-firmware/Config.in"
+ source "package/rasdaemon/Config.in"
source "package/raspi-gpio/Config.in"
source "package/rdma-core/Config.in"
source "package/read-edid/Config.in"
diff --git a/package/rasdaemon/0001-rasdaemon-fix-build-when-sqlite-isn-t-enabled.patch b/package/rasdaemon/0001-rasdaemon-fix-build-when-sqlite-isn-t-enabled.patch
new file mode 100644
index 0000000000000000000000000000000000000000..2dccbec55f10ee45b4ea1abadda217b9a0f924c1
--- /dev/null
+++ b/package/rasdaemon/0001-rasdaemon-fix-build-when-sqlite-isn-t-enabled.patch
@@ -0,0 +1,46 @@
+From 8eaf25c30554c7cc457406ce5895b8087904cb2b Mon Sep 17 00:00:00 2001
+From: Bastien Curutchet <bastien.curutchet@bootlin.com>
+Date: Wed, 17 Dec 2025 11:38:52 +0100
+Subject: [PATCH] rasdaemon: fix build when sqlite isn't enabled
+
+Build without SQLite enabled through --enable-sqlite3 still fails if
+sqlite isn't available:
+> CC rasdaemon-rasdaemon.o
+> In file included from rasdaemon.c:17:
+> ras-record.h:11:10: fatal error: sqlite3.h: No such file or directory
+> 11 | #include <sqlite3.h>
+> | ^~~~~~~~~~~
+> compilation terminated.
+
+Include the sqlite header only if the SQLite feature is enabled.
+
+Signed-off-by: Bastien Curutchet <bastien.curutchet@bootlin.com>
+Upstream: https://github.com/mchehab/rasdaemon/pull/234
+---
+ ras-record.h | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/ras-record.h b/ras-record.h
+index 21edcd6..cb03f4e 100644
+--- a/ras-record.h
++++ b/ras-record.h
+@@ -8,7 +8,6 @@
+ #ifndef __RAS_RECORD_H
+ #define __RAS_RECORD_H
+
+-#include <sqlite3.h>
+ #include <fcntl.h>
+ #include <stdbool.h>
+ #include <stdint.h>
+@@ -320,6 +319,8 @@ struct ras_cxl_memory_sparing_event;
+
+ #ifdef HAVE_SQLITE3
+
++#include <sqlite3.h>
++
+ struct sqlite3_priv {
+ sqlite3 *db;
+ sqlite3_stmt *stmt_mc_event;
+--
+2.52.0
+
diff --git a/package/rasdaemon/Config.in b/package/rasdaemon/Config.in
new file mode 100644
index 0000000000000000000000000000000000000000..64ae4a82632db12f8915aee9b9d947945762438d
--- /dev/null
+++ b/package/rasdaemon/Config.in
@@ -0,0 +1,26 @@
+config BR2_PACKAGE_RASDAEMON
+ bool "rasdaemon"
+ depends on !BR2_STATIC_LIBS # libtraceevent
+ depends on BR2_TOOLCHAIN_HAS_THREADS
+ select BR2_PACKAGE_LIBTRACEEVENT
+ select BR2_PACKAGE_ARGP_STANDALONE if BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_MUSL
+ help
+ rasdaemon is a tool that collects all hardware error events
+ reported by the Linux Kernel from several sources (EDAC, MCE
+ PCI, ...) into one common framework.
+
+ https://github.com/mchehab/rasdaemon
+
+if BR2_PACKAGE_RASDAEMON
+
+config BR2_PACKAGE_RASDAEMON_AER
+ bool "Enable AER support"
+ select BR2_PACKAGE_PCIUTILS
+ help
+ Enable handling of AER (Advanced Error Reporting) events on
+ PCIe
+
+endif
+
+comment "rasdaemon needs a toolchain w/ threads, dynamic library"
+ depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS
diff --git a/package/rasdaemon/S95rasdaemon b/package/rasdaemon/S95rasdaemon
new file mode 100644
index 0000000000000000000000000000000000000000..390ff9c9029ba9122217f13eb88bac7715c1c05f
--- /dev/null
+++ b/package/rasdaemon/S95rasdaemon
@@ -0,0 +1,63 @@
+#!/bin/sh
+#
+# S95rasdaemon Starts Rasdaemon.
+#
+# shellcheck disable=SC2317 # functions are called via variable
+
+DAEMON="rasdaemon"
+PIDFILE="/var/run/$DAEMON.pid"
+
+start() {
+ printf "Starting %s: " "$DAEMON"
+
+ if ! grep -q debugfs /proc/mounts ; then
+ echo "FAIL : debugfs is missing"
+ return 1
+ fi
+
+ start-stop-daemon --start --pidfile "$PIDFILE" --make-pidfile \
+ --background --exec "/usr/sbin/$DAEMON" -- -f
+ status=$?
+ if [ "$status" -eq 0 ]; then
+ echo "OK"
+ else
+ echo "FAIL"
+ fi
+ return "$status"
+}
+
+stop() {
+ printf "Stopping %s: " "$DAEMON"
+ start-stop-daemon --stop --pidfile "$PIDFILE" --exec "/usr/sbin/$DAEMON"
+ status=$?
+ if [ "$status" -eq 0 ]; then
+ echo "OK"
+ else
+ echo "FAIL"
+ return "$status"
+ fi
+ while start-stop-daemon --stop --test --quiet --pidfile "$PIDFILE" \
+ --exec "/sbin/$DAEMON"; do
+ sleep 0.1
+ done
+ rm -f "$PIDFILE"
+ return "$status"
+}
+
+restart() {
+ stop
+ start
+}
+
+reload() {
+ restart
+}
+
+case "$1" in
+ start|stop|reload|restart)
+ "$1"
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|reload|restart}"
+ exit 1
+esac
diff --git a/package/rasdaemon/rasdaemon.hash b/package/rasdaemon/rasdaemon.hash
new file mode 100644
index 0000000000000000000000000000000000000000..e1b600a4893bef2f58c86f6d742fb7cbcb480fc8
--- /dev/null
+++ b/package/rasdaemon/rasdaemon.hash
@@ -0,0 +1,3 @@
+# Locally calculated
+sha256 7e12459f9477036491ac2b1e4c07cc3e8efea6dcd30525a263ab1f83910b773a rasdaemon-0.8.4.tar.gz
+sha256 39bc367cd7cd291d217447632b28a74be414a52b142b1875ac8789184aeca7b2 COPYING
diff --git a/package/rasdaemon/rasdaemon.mk b/package/rasdaemon/rasdaemon.mk
new file mode 100644
index 0000000000000000000000000000000000000000..a6f53a7b6abc898800d57b75235709875fcde7fa
--- /dev/null
+++ b/package/rasdaemon/rasdaemon.mk
@@ -0,0 +1,40 @@
+################################################################################
+#
+# rasdaemon
+#
+################################################################################
+
+RASDAEMON_VERSION = 0.8.4
+RASDAEMON_SITE = $(call github,mchehab,rasdaemon,v$(RASDAEMON_VERSION))
+RASDAEMON_LICENSE = GPL-2.0+
+RASDAEMON_LICENSE_FILES = COPYING
+RASDAEMON_AUTORECONF = YES
+
+RASDAEMON_DEPENDENCIES = libtraceevent
+# rasdaemon uses argp.h which is not provided by uclibc or musl by default.
+# Use the argp-standalone package to provide this.
+ifeq ($(BR2_PACKAGE_ARGP_STANDALONE),y)
+RASDAEMON_DEPENDENCIES += argp-standalone
+RASDAEMON_CONF_ENV += LIBS="-largp"
+endif
+
+ifeq ($(BR2_PACKAGE_SQLITE),y)
+RASDAEMON_CONF_OPTS += --enable-sqlite3
+RASDAEMON_DEPENDENCIES += sqlite
+else
+RASDAEMON_CONF_OPTS += --disable-sqlite3
+endif
+
+ifeq ($(BR2_PACKAGE_RASDAEMON_AER),y)
+RASDAEMON_DEPENDENCIES += pciutils
+RASDAEMON_CONF_OPTS += --enable-aer
+else
+RASDAEMON_CONF_OPTS += --disable-aer
+endif
+
+define RASDAEMON_INSTALL_INIT_SYSV
+ $(INSTALL) -m 0755 -D package/rasdaemon/S95rasdaemon \
+ $(TARGET_DIR)/etc/init.d/S95rasdaemon
+endef
+
+$(eval $(autotools-package))
--
2.52.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 5+ messages in thread* [Buildroot] [PATCH v4 2/2] support/testing: add rasdaemon tests
2025-12-19 16:30 [Buildroot] [PATCH v4 0/2] package: add rasdaemon support Bastien Curutchet via buildroot
2025-12-19 16:30 ` [Buildroot] [PATCH v4 1/2] package/rasdaemon: Add rasdaemon package Bastien Curutchet via buildroot
@ 2025-12-19 16:30 ` Bastien Curutchet via buildroot
2025-12-31 9:48 ` Thomas Petazzoni via buildroot
1 sibling, 1 reply; 5+ messages in thread
From: Bastien Curutchet via buildroot @ 2025-12-19 16:30 UTC (permalink / raw)
To: buildroot; +Cc: Thomas Petazzoni, Fiona Klute, Bastien Curutchet
Rasdaemon was added in previous patch.
Add a test_rasdaemon that allows to test it.
Test is done on x86. It first checks the daemon's version, then mounts
debugfs and finally ensures that the init script allows to
start/restart/stop the daemon.
Signed-off-by: Bastien Curutchet <bastien.curutchet@bootlin.com>
---
DEVELOPERS | 1 +
support/testing/tests/package/test_rasdaemon.py | 46 ++++++++++++++++++++++
.../package/test_rasdaemon/linux-debugfs.fragment | 8 ++++
3 files changed, 55 insertions(+)
diff --git a/DEVELOPERS b/DEVELOPERS
index b1ead6d26c4e8ff160bcc7ed85b0945ac5e551dc..c9aaa8c9c8aa3d54c930476d9d450e7f990d9aac 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -343,6 +343,7 @@ F: package/uhubctl/
N: Bastien Curutchet <bastien.curutchet@bootlin.com>
F: package/rasdaemon/
+F: support/testing/tests/package/test_rasdaemon.py
N: Baxiche Su <baxiche@gmail.com>
F: package/qt6/qt6multimedia/
diff --git a/support/testing/tests/package/test_rasdaemon.py b/support/testing/tests/package/test_rasdaemon.py
new file mode 100644
index 0000000000000000000000000000000000000000..bc800b6ccbea1c18f4c970d87bea0395c64ad952
--- /dev/null
+++ b/support/testing/tests/package/test_rasdaemon.py
@@ -0,0 +1,46 @@
+import os
+
+import infra.basetest
+
+
+class TestRasdaemon(infra.basetest.BRTest):
+ config = f"""
+ BR2_x86_64=y
+ BR2_x86_corei7=y
+ BR2_INIT_SYSV=y
+ BR2_LINUX_KERNEL=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+ BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.59"
+ BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
+ BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/x86/linux.config"
+ BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="{infra.filepath("tests/package/test_rasdaemon/linux-debugfs.fragment")}"
+ BR2_PACKAGE_RASDAEMON=y
+ BR2_PACKAGE_RASDAEMON_AER=y
+ BR2_PACKAGE_LIBTRACEEVENT=y
+ BR2_PACKAGE_SQLITE=y
+ BR2_PACKAGE_PCIUTILS=y
+ BR2_TARGET_ROOTFS_CPIO=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+
+ def test_run(self):
+ kernel = os.path.join(self.builddir, "images", "bzImage")
+ cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio")
+ self.emulator.boot(
+ arch="x86_64",
+ kernel=kernel,
+ kernel_cmdline=["console=ttyS0"],
+ options=["-cpu", "Nehalem", "-initrd", cpio_file],
+ )
+ self.emulator.login()
+
+ self.assertRunOk("/usr/sbin/rasdaemon --version")
+ self.assertRunOk("mount -t debugfs nodev /sys/kernel/debug")
+ self.assertRunOk("/etc/init.d/S95rasdaemon start")
+ self.assertRunOk("pidof /usr/sbin/rasdaemon")
+ self.assertRunOk("/etc/init.d/S95rasdaemon restart")
+ self.assertRunOk("pidof /usr/sbin/rasdaemon")
+ self.assertRunOk("/etc/init.d/S95rasdaemon stop")
+ _, ret = self.emulator.run("pidof /usr/sbin/rasdaemon")
+ self.assertNotEqual(ret, 0)
diff --git a/support/testing/tests/package/test_rasdaemon/linux-debugfs.fragment b/support/testing/tests/package/test_rasdaemon/linux-debugfs.fragment
new file mode 100644
index 0000000000000000000000000000000000000000..a334bc373179623f3c5b2c3727ee7738a0c2542e
--- /dev/null
+++ b/support/testing/tests/package/test_rasdaemon/linux-debugfs.fragment
@@ -0,0 +1,8 @@
+CONFIG_DEBUG_FS=y
+CONFIG_FTRACE=y
+CONFIG_USER_EVENTS=y
+CONFIG_TRACE_EVENT_INJECT=y
+CONFIG_PCI=y
+CONFIG_PCIEPORTBUS=y
+CONFIG_PCIEAER=y
+CONFIG_MEMORY_FAILURE=y
--
2.52.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 5+ messages in thread