[Buildroot] [PATCH v2 1/2] package/ndctl: new package

cp0613
2026-03-10T08:19:27Z

A "device memory" enabling project encompassing tools and
libraries for CXL, NVDIMMs, DAX, memory tiering and other
platform memory device topics.

Signed-off-by: Chen Pei <cp0613@linux.alibaba.com>
---
package/Config.in | 1 +
package/ndctl/Config.in | 25 ++++++++++++++++++++
package/ndctl/ndctl.hash | 7 ++++++
package/ndctl/ndctl.mk | 51 ++++++++++++++++++++++++++++++++++++++++
4 files changed, 84 insertions(+)
create mode 100644 package/ndctl/Config.in
create mode 100644 package/ndctl/ndctl.hash
create mode 100644 package/ndctl/ndctl.mk

diff --git a/package/Config.in b/package/Config.in
index fab482c52f..d56b882db5 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -2836,6 +2836,7 @@ menu "System tools"
source "package/monit/Config.in"
source "package/multipath-tools/Config.in"
source "package/ncdu/Config.in"
+ source "package/ndctl/Config.in"
source "package/nerdctl/Config.in"
source "package/netifrc/Config.in"
source "package/numactl/Config.in"
diff --git a/package/ndctl/Config.in b/package/ndctl/Config.in
new file mode 100644
index 0000000000..ef7cec6962
--- /dev/null
+++ b/package/ndctl/Config.in
@@ -0,0 +1,25 @@
+config BR2_PACKAGE_NDCTL
+ bool "ndctl"
+ depends on BR2_PACKAGE_HAS_UDEV
+ depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_16
+ depends on BR2_TOOLCHAIN_HAS_THREADS
+ depends on BR2_USE_MMU
+ select BR2_PACKAGE_INIPARSER
+ select BR2_PACKAGE_JSON_C
+ select BR2_PACKAGE_KEYUTILS
+ select BR2_PACKAGE_KMOD
+ select BR2_PACKAGE_UTIL_LINUX
+ select BR2_PACKAGE_UTIL_LINUX_LIBS
+ select BR2_PACKAGE_UTIL_LINUX_LIBUUID
+ help
+ A "device memory" enabling project encompassing tools and
+ libraries for CXL, NVDIMMs, DAX, memory tiering and other
+ platform memory device topics.
+
+ https://github.com/pmem/ndctl
+
+comment "ndctl needs udev /dev management, a toolchain headers >= 5.16"
+ depends on BR2_USE_MMU
+ depends on !BR2_PACKAGE_HAS_UDEV \
+ || !BR2_TOOLCHAIN_HAS_THREADS \
+ || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_16
diff --git a/package/ndctl/ndctl.hash b/package/ndctl/ndctl.hash
new file mode 100644
index 0000000000..f731fb7263
--- /dev/null
+++ b/package/ndctl/ndctl.hash
@@ -0,0 +1,7 @@
+# locally computed
+sha256 dd4b9b9a9dc0a15e980670b6f889e910a80ad60f2309e03bfd9cc6071d14dd30 ndctl-83.tar.gz
+sha256 1334f22048052d69647860fe9fb24997dc3b33737cb494297d68949f589fa1cf COPYING
+sha256 5c37e41135091a39821cfb306ad8516625b0bb49510ce56ad85c347bbc46df29 LICENSES/other/CC0-1.0
+sha256 89807acf2309bd285f033404ee78581602f3cd9b819a16ac2f0e5f60ff4a473e LICENSES/other/MIT
+sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 LICENSES/preferred/GPL-2.0
+sha256 9397d01be0ec93d29384447ba18e532ab7b01af8c8b582ece9f10ad45b9568db LICENSES/preferred/LGPL-2.1
diff --git a/package/ndctl/ndctl.mk b/package/ndctl/ndctl.mk
new file mode 100644
index 0000000000..2f631c946c
--- /dev/null
+++ b/package/ndctl/ndctl.mk
@@ -0,0 +1,51 @@
+################################################################################
+#
+# ndctl
+#
+################################################################################
+
+NDCTL_VERSION = 83
+NDCTL_SITE = $(call github,pmem,ndctl,v$(NDCTL_VERSION))
+NDCTL_LICENSE = \
+ CC0-1.0 (helper routines), \
+ GPL-2.0+ (tools), \
+ LGPL-2.1+ (libraries), \
+ MIT (helper routines)
+NDCTL_LICENSE_FILES = \
+ COPYING \
+ LICENSES/other/CC0-1.0 \
+ LICENSES/other/MIT \
+ LICENSES/preferred/GPL-2.0 \
+ LICENSES/preferred/LGPL-2.1
+
+NDCTL_DEPENDENCIES = \
+ iniparser \
+ json-c \
+ keyutils \
+ kmod \
+ udev \
+ util-linux-libs
+
+# Currently, disabling keyutils or fwctl support will cause builds to
+# fail. Therefore, always pass the -Dfwctl=enabled and -Dkeyutils=enabled.
+NDCTL_CONF_OPTS = \
+ -Ddocs=disabled \
+ -Dfwctl=enabled \
+ -Dkeyutils=enabled \
+ -Diniparserdir=$(STAGING_DIR)/usr/include/iniparser
+
+ifeq ($(BR2_PACKAGE_SYSTEMD),y)
+NDCTL_CONF_OPTS += -Dsystemd=enabled
+NDCTL_DEPENDENCIES += systemd
+else
+NDCTL_CONF_OPTS += -Dsystemd=disabled
+endif
+
+ifeq ($(BR2_PACKAGE_LIBTRACEFS)$(BR2_PACKAGE_LIBTRACEEVENT),yy)
+NDCTL_CONF_OPTS += -Dlibtracefs=enabled
+NDCTL_DEPENDENCIES += libtraceevent libtracefs
+else
+NDCTL_CONF_OPTS += -Dlibtracefs=disabled
+endif
+
+$(eval $(meson-package))