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.
Install the package and the headers for the target kernel/kernels. For example, for the default kernel this would be . Other kernels have their own respective headers packages.
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 for invoking DKMS manually.
Tab-completion is available by doing:
# source /usr/share/bash-completion/completions/dkms
To list the current status of modules, versions and kernels within the tree:
# dkms status
Rebuild all modules for the currently running kernel:
# dkms autoinstall
or for a specific 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
# dkms install nvidia/334.21
To build a module for all kernels:
# dkms install nvidia/334.21 --all
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
/var/lib/dkms/package_name and delete all files and directories no longer in use.
DKMS package creation
[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.