[bootlin/training-materials updates] master: labs/sysdev-real-time: re-enable rt-tests (289a1a74)

Thomas Petazzoni thomas.petazzoni at bootlin.com
Sun Apr 18 18:34:03 CEST 2021


Repository : https://github.com/bootlin/training-materials
On branch  : master
Link       : https://github.com/bootlin/training-materials/commit/289a1a745f76924b1252d32dec7e59e580f44464

>---------------------------------------------------------------

commit 289a1a745f76924b1252d32dec7e59e580f44464
Author: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
Date:   Sun Apr 18 18:33:07 2021 +0200

    labs/sysdev-real-time: re-enable rt-tests
    
    Without rt-tests, there's no hackbench on the target, making our
    doload script mostly useless, and generating only very little load on
    the system.
    
    This commit adds a Buildroot patch that fixes this issue, and adjusts
    the lab instructions accordingly.
    
    Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>


>---------------------------------------------------------------

289a1a745f76924b1252d32dec7e59e580f44464
 ...mactl-make-available-on-all-architectures.patch | 131 +++++++++++++++++++++
 labs/sysdev-real-time/sysdev-real-time.tex         |   6 +-
 2 files changed, 136 insertions(+), 1 deletion(-)

diff --git a/lab-data/embedded-linux/realtime/data/0001-package-numactl-make-available-on-all-architectures.patch b/lab-data/embedded-linux/realtime/data/0001-package-numactl-make-available-on-all-architectures.patch
new file mode 100644
index 00000000..234c577a
--- /dev/null
+++ b/lab-data/embedded-linux/realtime/data/0001-package-numactl-make-available-on-all-architectures.patch
@@ -0,0 +1,131 @@
+From 93ef17284ff71e627f2f3e790761f3e2a826b9e7 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
+Date: Wed, 14 Apr 2021 20:57:50 +0200
+Subject: [PATCH] package/numactl: make available on all architectures
+
+Since its introduction in commit
+b05e74ff92b6728369e1540fc0a2bd60025f2146 in 2013, numactl has had an
+explicit list of architectures that it supports. Interestingly, this
+list does not include ARM, and now that rt-tests unconditionally needs
+numactl, it meant the rt-tests package was no longer available on ARM.
+
+Further investigation revealed that there is nothing in recent
+versions of numactl that appears to be architecture-specific. It does
+build with all of Buildroot toolchains currently used in the
+autobuilders.
+
+The only necessary changes are:
+
+ * Exclude no-MMU architectures, as madvise() is used in the code
+   base, and this is not available on no-MMU architectures.
+
+ * Make sure to use -latomic when needed, as some atomic operations
+   are used.
+
+ * Backport a patch that fixes the .symver usage, which only affects
+   really old gcc versions: only the old ARM Sourcery toolchain was
+   affected by this. Newer gcc versions support the gcc "symver"
+   attribute, so that the code that directly emits the assembly
+   .symver directive is not invoked.
+
+With these changes, numactl builds successfully on all our supported
+toolchains.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
+---
+ ...0001-Do-not-stringify-SYMVER-symbols.patch | 25 +++++++++++++++++++
+ package/numactl/Config.in                     | 11 +-------
+ package/numactl/numactl.mk                    |  4 +++
+ package/rt-tests/Config.in                    |  4 +--
+ 4 files changed, 31 insertions(+), 13 deletions(-)
+ create mode 100644 package/numactl/0001-Do-not-stringify-SYMVER-symbols.patch
+
+diff --git a/package/numactl/0001-Do-not-stringify-SYMVER-symbols.patch b/package/numactl/0001-Do-not-stringify-SYMVER-symbols.patch
+new file mode 100644
+index 0000000000..c6981aaf73
+--- /dev/null
++++ b/package/numactl/0001-Do-not-stringify-SYMVER-symbols.patch
+@@ -0,0 +1,25 @@
++From f96c96af7fbf2779b15f66f03b10315a24fb4f5a Mon Sep 17 00:00:00 2001
++From: Scott McMillan <smcmillan at nvidia.com>
++Date: Fri, 9 Oct 2020 08:56:52 -0500
++Subject: [PATCH] Do not stringify SYMVER symbols
++
++Upstream: f96c96af7fbf2779b15f66f03b10315a24fb4f5a
++Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
++---
++ util.h | 2 +-
++ 1 file changed, 1 insertion(+), 1 deletion(-)
++
++diff --git a/util.h b/util.h
++index 99ada33..f2a20ac 100644
++--- a/util.h
+++++ b/util.h
++@@ -22,5 +22,5 @@ extern char *policy_name(int policy);
++ #if HAVE_ATTRIBUTE_SYMVER
++ #define SYMVER(a,b) __attribute__ ((symver (b)))
++ #else
++-#define SYMVER(a,b) __asm__ (".symver " #a "," #b);
+++#define SYMVER(a,b) __asm__ (".symver " a "," b);
++ #endif
++-- 
++2.30.2
++
+diff --git a/package/numactl/Config.in b/package/numactl/Config.in
+index cd47f2f9a9..23cf7facb0 100644
+--- a/package/numactl/Config.in
++++ b/package/numactl/Config.in
+@@ -1,15 +1,6 @@
+-config BR2_PACKAGE_NUMACTL_ARCH_SUPPORTS
+-	bool
+-	# numactl uses some system calls that are not available on all
+-	# architectures.
+-	default y if BR2_aarch64
+-	default y if BR2_i386 || BR2_x86_64
+-	default y if BR2_mips || BR2_mipsel ||  BR2_mips64 || BR2_mips64el
+-	default y if BR2_powerpc
+-
+ config BR2_PACKAGE_NUMACTL
+ 	bool "numactl"
+-	depends on BR2_PACKAGE_NUMACTL_ARCH_SUPPORTS
++	depends on BR2_USE_MMU # madvise()
+ 	help
+ 	  numactl allows you to run your application on specific cpus
+ 	  and memory nodes. It does this by supplying a NUMA memory
+diff --git a/package/numactl/numactl.mk b/package/numactl/numactl.mk
+index cf9c759693..3364f6c5c3 100644
+--- a/package/numactl/numactl.mk
++++ b/package/numactl/numactl.mk
+@@ -12,4 +12,8 @@ NUMACTL_INSTALL_STAGING = YES
+ NUMACTL_AUTORECONF = YES
+ NUMACTL_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -fPIC"
+ 
++ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y)
++NUMACTL_CONF_ENV += LDFLAGS="$(TARGET_LDFLAGS) -latomic"
++endif
++
+ $(eval $(autotools-package))
+diff --git a/package/rt-tests/Config.in b/package/rt-tests/Config.in
+index cc9b14dccb..477fa288d7 100644
+--- a/package/rt-tests/Config.in
++++ b/package/rt-tests/Config.in
+@@ -2,10 +2,9 @@ config BR2_PACKAGE_RT_TESTS
+ 	bool "rt-tests"
+ 	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
+ 	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14 # deadline scheduler syscall
+-	depends on BR2_USE_MMU # fork()
++	depends on BR2_USE_MMU # fork(), numactl
+ 	depends on !BR2_STATIC_LIBS # dlopen
+ 	depends on !BR2_TOOLCHAIN_USES_MUSL # cyclictest
+-	depends on BR2_PACKAGE_NUMACTL_ARCH_SUPPORTS
+ 	select BR2_PACKAGE_NUMACTL
+ 	help
+ 	  Set of utilities for testing the real-time behaviour of a
+@@ -34,4 +33,3 @@ comment "rt-tests needs a uClibc or glibc toolchain w/ NPTL, headers >= 3.14, dy
+ 	depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS \
+ 		|| BR2_TOOLCHAIN_USES_MUSL || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14
+ 	depends on BR2_USE_MMU
+-	depends on BR2_PACKAGE_NUMACTL_ARCH_SUPPORTS
+-- 
+2.30.2
+
diff --git a/labs/sysdev-real-time/sysdev-real-time.tex b/labs/sysdev-real-time/sysdev-real-time.tex
index 8adb7afe..9c4d74bf 100644
--- a/labs/sysdev-real-time/sysdev-real-time.tex
+++ b/labs/sysdev-real-time/sysdev-real-time.tex
@@ -41,7 +41,10 @@ To compare real-time latency between standard Linux and Xenomai, we
 are going to need a root filesystem and a build environment that
 supports Xenomai. Let's build this with Buildroot.
 
-Download and extract the latest Buildroot 2021.02.X sources.
+Download and extract the latest Buildroot 2021.02.x sources, and apply
+the patch
+\code{data/0001-package-numactl-make-available-on-all-architectures.patch}. This
+patch fixes an issue that prevented from building {\em rt-tests} on ARM.
 
 Configure Buildroot with the following settings,
 using the \code{/} command in \code{make
@@ -68,6 +71,7 @@ menuconfig} to find parameters by their name:
    \item Enable \code{Show packages that are also provided by busybox}.
          We need this to build the standard \code{netcat} command, not
          provided in the default BusyBox configuration.
+   \item In \code{Debugging, profiling and benchmark}, enable \code{rt-tests}
    \item In \code{Networking applications}, enable \code{netcat}
    \end{itemize}
 \end{itemize}




More information about the training-materials-updates mailing list