Learn through the super-clean Baeldung Pro experience:
>> Membership and Baeldung Pro.
No ads, dark-mode and 6 months free of IntelliJ Idea Ultimate to start with.
Last updated: May 4, 2024
The Linux kernel is the most crucial component of the Linux operating system and what actually defines it. On the other hand, kernel modules are additional, often pluggable, pieces of code that extend the functionality of the kernel. These modules, usually for hardware drivers, can come from various sources. Some are included directly in the kernel source tree, while others come from an external source, such as a hardware vendor.
The process of installing and managing external kernel modules can be tricky. This is exactly where DKMS (Dynamic Kernel Module Support) steps in. It’s a framework that simplifies the installation and management of these modules.
In this tutorial, we’ll discuss DKMS in detail and learn how to install a module with it.
DKMS is a framework that enables us to manage and build kernel modules whose source code resides outside the main kernel source tree. These external modules often come from hardware vendors and don’t exist in the standard kernel distribution.
This framework also monitors the system for kernel updates and automatically triggers a rebuild of the external modules whenever we install a new kernel. This rebuild process utilizes the latest kernel headers to ensure compatibility with the new kernel release.
There are advantages and drawbacks to all systems and DKMS isn’t an exception in this case.
To begin with, let’s go through the benefits of this framework that make it a valuable tool for managing and installing external kernel modules:
DKMS also has some cons that make it a bit tricky to use:
The next section discusses the process that we can follow to use DKMS on a Linux distribution.
After understanding the basic idea of DKMS, let’s go through its practical usage.
The first step is to check if the system includes dkms as an installed utility:
$ dkms --version
dkms:2.8
Evidently, the DKMS version that’s on the system is 2.8.
If we don’t get an output like the above, then it might indicate that we don’t have the DKMS tool on the system. In this case, we go ahead and install it, most often via a local package manager such as apt:
$ sudo apt install dkms
Once the installation is complete, we download the required external module.
Usually, we get modules from verified sources on the Web in the form of a .tar archive. Let’s assume that we downloaded a module named mod-v2.3.tar.gz, which we want to install on the machine using DKMS.
Now, let’s navigate to the directory where the archive is stored and extract the contents of the archive using the tar command:
$ cd /usr/lib
$ tar -xf mod-v2.3.tar.gz
The -f option specifies the archive we want to extract, i.e., mod-v2.3.tar.gz, while the -x option instructs tar to extract the contents of the archive to the current directory.
Now, let’s navigate to the extracted directory:
$ cd mod-v2.3
Then, let’s create the dkms.conf file in the directory:
$ touch dkms.conf
This file specifies the process of building and installing a particular module.
The next step is to open the file and insert some necessary information about the process of building and installing the mod-v2.3 module:
$ cat dkms.conf
PACKAGE_NAME="mod"
PACKAGE_VERSION="2.3"
MAKE="make --uname_r=$kernelver"
CLEAN="make clean"
BUILT_MODULE_NAME="$mod"
DEST_MODULE_LOCATION="/kernel/drivers"
REMAKE_INITRD="yes"
AUTOINSTALL="yes
After saving the file, let’s proceed to the next step.
To begin with, let’s use dkms to add the module to the DKMS tree:
$ dkms add -m mod -v 2.3
In particular, the -m option specifies the module to be added, i.e., mod. On the other hand, the -v option indicates the module version, i.e., 2.3.
Next, let’s leverage the dkms to build the module with respect to the currently running kernel version:
$ dkms build -m mod -v 2.3 -k 6.4.16-33
The -k option specifies the kernel version that we’re currently operating on, i.e., 6.4.16-33.
Finally, we utilize dkms to install the module on the system:
$ dkms install -m mod -v 2.3
After this point, there should be no need to rebuild this module manually after each kernel update, as DKMS should automatically rebuild it whenever we upgrade to a newer version.
In this article, we had a detailed discussion about DKMS, its pros and cons, and the step-by-step process of using this framework on a Linux distribution.
In general, DKMS is a valuable tool for Linux users who rely on external kernel modules. It automates updates and offers flexibility, but it’s not without limitations. If we’re comfortable with the command line and understand the potential risks involved, DKMS can be a great way to manage our external modules.