Building NDCTL Utilities from Source: A Comprehensive Guide

Building NDCTL Utilities from Source: A Comprehensive Guide

Building NDCTL with Meson on Ubuntu 24.04

The NDCTL package includes the cxl, daxctl, and ndctl utilities. It uses the Meson build system for streamlined compilation. This guide reflects the modern build process for managing NVDIMMs, CXL, and PMEM on Ubuntu 24.04.

If you do not install a more recent Kernel than the one provided by the distro, then it is not recommended to compile these utilities from source code. If you have installed a mainline Kernel, then you will likely require a newer version of these utilities that are compatible with your Kernel. See the NDCTL Releases as the Kernel support information is provided there.

Here is the support matrix as of ndctl Version 81 and Kernel 6.14:

NDCTL VersionLinux Kernel Version
v816.14
v806.11
v796.9
v786.5
v776.3
v76.16.2
v766.2
v756.1
v74.16.0
v735.19
v72.15.17

Prerequisites

Use the following steps to install the prerequisite packages before we start the build and compile phase.

  1. System Update:

    sudo  apt update && sudo apt upgrade -y
    
  2. Core Build Tools:

    sudo  apt install -y git meson ninja-build pkg-config automake autoconf
    
  3. Libraries and Tools:

    sudo  apt install -y  asciidoc asciidoctor ruby-asciidoctor xmlto libtool  libkmod-dev libsystemd-dev libudev0 libudev-dev uuid-dev libjson-c-dev libkeyutils-dev libinih-dev bash-completion keyutils libkeyutils-dev libiniparser-dev libtraceevent-dev libtracefs-dev
    

Step 1: Clone the Repository

git clone https://github.com/pmem/ndctl.git && cd ndctl

Step 2: Configure with Meson

Create a build directory and configure:

meson setup build

Step 3: Compile the Code

Build using Ninja (Meson’s backend):

meson compile -C build

Step 4: Install Binaries (Optional)

sudo meson install -C build

If you choose not to install the binaries, the individual commands can be found in the ndctl/build/<cmd> directory, ie:

  • cxl: ~/ndctl/build/cxl/cxl
  • ndctl: ~/ndctl/build/ndctl/ndctl
  • daxctl: ~/ndctl/build/daxctl/daxctl

Step 5: Verify Installation

cxl --version

Troubleshooting

Build Errors:

Should you encounter any issues during the configure or build processes, you clean and rebuild using rm -rf build && meson setup build.

The Library Landscape: Why Build Another One?

The Library Landscape: Why Build Another One?

Series: Building lib3mf-rs

This post is part of a 5-part series on building a comprehensive 3MF library in Rust:

  1. Part 1: My Journey Building a 3MF Native Rust Library from Scratch
  2. Part 2: The Library Landscape - Why Build Another One?
  3. Part 3: Into the 3MF Specification Wilderness - Reading 1000+ Pages of Specifications
  4. Part 4: Design for Developers - Features, Flags, and the CLI
  5. Part 5: Reflections and What’s Next - Lessons from Building lib3mf-rs

“Why not just use the existing library?”

It’s a fair question. One I asked myself many times during the early days of this project. The 3MF Consortium maintains lib3MF , a comprehensive C++ implementation used by major companies in additive manufacturing. Why build another one?

Read More

How To Install a Mainline Linux Kernel in Ubuntu

Note: This article was updated on Thursday, July 31st, 2025 and will work with newer Ubuntu releases.

By default, Ubuntu systems run with the Ubuntu kernels provided by the Ubuntu repositories. To get unmodified upstream kernels that have new features or to confirm that upstream has fixed a specific issue, we often need to install the mainline Kernel. The mainline kernel is the most recent version of the Linux kernel released by the Linux Kernel Organization. It undergoes several stages of development, including merge windows, release candidates, and final releases. Mainline kernels are designed to offer the latest features and improvements, making them attractive to developers and power users. Kernel.org lists the available Kernel versions.

Read More
Linux Kernel 6.14 is Released: This is What's New for Compute Express Link (CXL)

Linux Kernel 6.14 is Released: This is What's New for Compute Express Link (CXL)

The Linux Kernel 6.14 release brings several improvements and additions related to Compute Express Link (CXL) technology.

Here is the detailed list of all commits merged into the 6.14 Kernel for CXL and DAX. This list was generated by the Linux Kernel CXL Feature Tracker .

Read More