- How to build a kernel module with DKMS on Linux
- Install DKMS on Linux
- Install DKMS on Ubuntu, Debian or or Linux Mint
- Install DKMS on Fedora
- Dynamic Kernel Module Support
- Installation
- Upgrades
- Usage
- List modules
- Rebuild modules
- Remove modules
- DKMS package creation
- Initial ramdisk
- See also
- Dynamic Kernel Module Support (Русский)
- Установка
- Обновления
- Использование
- Список модулей
- Пересборка модулей
- Удаление модулей
- Создание DKMS пакета
- Initial ramdisk
- Смотрите также
- How To Install dkms on Kali Linux
- What is dkms
- Install dkms Using apt-get
- Install dkms Using apt
- Install dkms Using aptitude
- How To Uninstall dkms on Kali Linux
- Uninstall dkms And Its Dependencies
- Remove dkms Configurations and Data
- Remove dkms configuration, data, and all of its dependencies
- References
- Summary
How to build a kernel module with DKMS on Linux
Suppose you wanted to install a device driver for a new graphics card, a WiFi dongle, or a network interface card that you purchased, and for whatever reason (e.g., missing prebuilt driver, outdated driver version, non-common build options), you decided to compile and install the driver module from the source. So you went ahead and downloaded the official source code of the device driver, compiled it against the kernel, installed and activated it. The new hardware is successfully recognized, and everything works fine.
Now think about what will happen to the driver if you upgrade to a newer kernel later. The driver was built outside the stock kernel source tree, so once your system is upgraded to a newer kernel, the driver you built will cease to work properly.
How to solve this problem? Well, you need to re-compile the driver against the newer kernel and re-install it. Obviously it becomes quite cumbersome if you have to re-build the driver manually every time you upgrade your kernel.
This is when dynamic kernel module support (DKMS) comes in handy. The DKMS framework enables you to automatically re-build kernel modules into the current kernel tree as you upgrade your kernel. Hardware vendors often distribute their hardware’s device driver as a DKMS package, so that users can auto-update the installed driver while they upgrade to a newer kernel. As an end-user you can easily configure DKMS to auto-update any custom device driver or kernel module that resides outside the stock kernel tree.
In this tutorial, I will demonstrate how to auto-build a kernel module with DKMS on Linux.
Install DKMS on Linux
You can install DKMS on various Linux distros as follows. As part of DKMS installation, necessary build tools (e.g., gcc , make ) and kernel headers will also be installed by the distro’s package manager.
Install DKMS on Ubuntu, Debian or or Linux Mint
Install DKMS on Fedora
Dynamic Kernel Module Support
Dynamic Kernel Module Support (DKMS) is a program/framework that enables generating Linux kernel modules whose sources generally reside outside the kernel source tree. The concept is to have DKMS modules automatically rebuilt when a new kernel is installed.
This means that a user does not have to wait for a company, project, or package maintainer to release a new version of the module. Since the introduction of pacman hooks, the rebuild of the modules is handled automatically when a kernel is upgraded.
Installation
Install the dkms package and the headers for the target kernel/kernels. For example, for the default linux kernel this would be linux-headers . Other kernels have their own respective headers packages.
A good number of modules that lie outside the kernel source tree have a DKMS variant; a few are hosted in the official repositories, most are found in the AUR.
Upgrades
Though the rebuild of the DKMS modules is usually seamless during a kernel upgrade, it may still happen that the rebuild fails. You should pay extra attention to the pacman output. This applies in particular if the system relies on the DKMS module to boot successfully and/or if you use DKMS with a custom kernel not in the official repositories.
To deal with changes in the kernel, fix bugs, or add necessary features consider upgrading the DKMS package before rebooting.
Usage
Usage for invoking DKMS manually.
Tab-completion is available by doing:
# source /usr/share/bash-completion/completions/dkms
List modules
To list the current status of modules, versions and kernels within the tree:
Rebuild modules
Rebuild all modules for the currently running kernel:
# dkms autoinstall -k 3.16.4-1-ARCH
To build a specific module for the currently running kernel:
# dkms install -m nvidia -v 334.21
To build a module for all kernels:
# dkms install nvidia/334.21 --all
Remove modules
To remove a module (old ones are not automatically removed):
# dkms remove -m nvidia -v 331.49 --all
# dkms remove nvidia/331.49 --all
If the package dkms is removed the information regarding previous module build files is lost. If this is the case, go through /usr/lib/modules/kernel_release and /var/lib/dkms/package_name and delete all files and directories no longer in use.
DKMS package creation
Initial ramdisk
In case you have got any kernel modules installed via DKMS that are used in initial ramdisk, e.g. zfs-dkms AUR , you may want to write a pacman hook to automate the process of regenerating initramfs image(s).
For example, when using linux and mkinitcpio, to update ZFS module after each zfs-dkms AUR upgrade,
/etc/pacman.d/hooks/90-mkinitcpio-dkms-linux.hook
[Trigger] Operation=Install Operation=Upgrade Operation=Remove Type=Package Target=zfs-dkms Target=linux [Action] Description=Update dkms modules in Linux initcpio Depends=mkinitcpio When=PostTransaction NeedsTargets Exec=/bin/sh -c 'while read -r trg; do case $trg in linux) exit 0; esac; done; /usr/bin/mkinitcpio -p linux'
You may add more targets to the hook and make additional copies of the hook if you have installed other kernels. Note the 90- prefix is necessary to make sure it runs after the DKMS hooks.
See also
Dynamic Kernel Module Support (Русский)
Состояние перевода: На этой странице представлен перевод статьи Dynamic Kernel Module Support. Дата последней синхронизации: 2022-02-27. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
Dynamic Kernel Module Support (DKMS) — это фреймворк, который используется для генерации тех модулей ядра Linux, которые в общем случае не включены в дерево исходного кода. DKMS позволяет драйверам устройств автоматически пересобираться, когда ядро уже установлено.
Это означает, что пользователь может не ждать, пока какая-то компания, проект или сопроводитель пакета выпустит новую версию модуля. После введения хуков pacman пересборка модулей осуществляется автоматически во время обновления ядра.
Установка
Установите пакет dkms и заголовочные файлы требуемого ядра/ядер. Например, для ядра по умолчанию linux соответствует linux-headers . Другие ядра имеют собственные пакеты с заголовочными файлами.
Значительное число модулей, не включенных в ядро, имеют DKMS вариант; некоторые из них размещаются в официальных репозиториях, но большинство из них можно найти только в AUR.
Обновления
Обычно пересборка модулей DKMS во время обновления ядра выполняется бесшовно, но что-то может пойти не так. Следует обратить особое внимание на вывод pacman! Это, в частности, относится к тем системам, которым требуется модуль DKMS для успешной загрузки и/или если вы используете DKMS с ядром не из официальных репозиториев.
Для того, чтобы следовать изменениям в ядре, исправить ошибки или добавить необходимый функционал, подумайте об обновлении соответствующего пакета DKMS перед перезагрузкой.
Использование
Использование DKMS вручную.
Автозавершение по Tab будет доступно после выполнения команды:
# source /usr/share/bash-completion/completions/dkms
Список модулей
Чтобы увидеть текущее состояние модулей, версий и ядер внутри дерева, выполните:
Пересборка модулей
Пересборка всех модулей для текущего ядра:
# dkms autoinstall -k 3.16.4-1-ARCH
Сборка конкретного модуля для текущего ядра:
# dkms install -m nvidia -v 334.21
Сборка модуля для всех ядер:
# dkms install nvidia/334.21 --all
Удаление модулей
Удаление модуля (старые автоматически не удаляются):
# dkms remove -m nvidia -v 331.49 --all
# dkms remove nvidia/331.49 --all
Если пакет dkms удален, то теряется информация о предыдущих файлах сборки модуля. В этом случае, перейдите в директорию /usr/lib/modules/kernel_release и /var/lib/dkms/package_name и удалите все файлы и каталоги, которые больше не используются.
Создание DKMS пакета
Initial ramdisk
В случаях для любых модулей, которые были установлены через DKMS и используются в Initrd, например zfs-dkms AUR , может быть полезно написать хук pacman для автоматической пересборки образа(ов) initramfs.
Например, когда используется linux и mkinitcpio, то для обновления модуля ZFS после каждого zfs-dkms AUR апгрейда,
/etc/pacman.d/hooks/90-mkinitcpio-dkms-linux.hook
[Trigger] Operation=Install Operation=Upgrade Operation=Remove Type=Package Target=zfs-dkms Target=linux [Action] Description=Update dkms modules in Linux initcpio Depends=mkinitcpio When=PostTransaction NeedsTargets Exec=/bin/sh -c 'while read -r trg; do case $trg in linux) exit 0; esac; done; /usr/bin/mkinitcpio -p linux'
Вы можете добавить больше таргетов в хук и сделать дополнительные копии хука, если в вашей система установлены другие ядра. Префикс 90- необходим для гарантированного запуска после хуков DPKMS.
Смотрите также
How To Install dkms on Kali Linux
In this tutorial we learn how to install dkms on Kali Linux.
What is dkms
DKMS is a framework designed to allow individual kernel modules to be upgraded without changing the whole kernel. It is also very easy to rebuild modules as you upgrade kernels.
There are three ways to install dkms on Kali Linux . We can use apt-get , apt and aptitude . In the following sections we will describe each method. You can choose one of them.
Install dkms Using apt-get
Update apt database with apt-get using the following command.
After updating apt database, We can install dkms using apt-get by running the following command:
sudo apt-get -y install dkms
Install dkms Using apt
Update apt database with apt using the following command.
After updating apt database, We can install dkms using apt by running the following command:
Install dkms Using aptitude
If you want to follow this method, you might need to install aptitude first since aptitude is usually not installed by default on Kali Linux. Update apt database with aptitude using the following command.
After updating apt database, We can install dkms using aptitude by running the following command:
sudo aptitude -y install dkms
How To Uninstall dkms on Kali Linux
To uninstall only the dkms package we can use the following command:
Uninstall dkms And Its Dependencies
To uninstall dkms and its dependencies that are no longer needed by Kali Linux, we can use the command below:
sudo apt-get -y autoremove dkms
Remove dkms Configurations and Data
To remove dkms configuration and data from Kali Linux we can use the following command:
Remove dkms configuration, data, and all of its dependencies
We can use the following command to remove dkms configurations, data and all of its dependencies, we can use the following command:
sudo apt-get -y autoremove --purge dkms
References
Summary
In this tutorial we learn how to install dkms using different package management tools like apt, apt-get and aptitude.