What is dkms linux

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).

Читайте также:  Узнать пользователей системы linux

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 и удалите все файлы и каталоги, которые больше не используются.

Читайте также:  Центр сертификации linux gui

Создание 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.

Смотрите также

Источник

DKMS

This DKMS (Dynamic Kernel Module Support) package (http://linux.dell.com/dkms/) provides support for installing supplementary versions of kernel modules. The package compiles and installs into the kernel tree. Uninstalling restores the previous modules. By default, installation is into the current kernel tree, but any kernel tree can be selected with command-line options. Furthermore, DKMS is called automatically upon installation of new Ubuntu kernel-image packages, and therefore modules added to DKMS will be automatically carried across updates.

Overview

To use a module with DKMS, one places the module installation files (could be source code or binary) in /usr/src/- , along with a configuration file dkms.conf that tells DKMS how to build/configure the module and what its name is. Under more advanced scenarios, conditional build instructions and patching can be done by the dkms system, but considering on your case this may not be necessary.

Walk-through

Let's say you want to install a module for your fancy "Awesome Adaptor." You are given a source tarball awesome-20091211-v1.1.tgz.

Without DKMS, you would unpack the module and read the README to figure out how to compile and install the module.

# tar -xzf awesome-20091211-v1.1.tgz # cd awesome-20091211-v1.1/ # ls README lib src

A typical README will have you do something like this:

# cd src # ls Makefile awesome.c # make building awesome.ko # ls Makefile awesome.c awesome.ko awesome.o # # sudo make install copying awesome.ko to current kernel tree. rebuilding initrd.

With DKMS, we tell DKMS how to do that for you by creating a dkms.conf file with the appropriate entries. For example, after we've unpacked the tarball:

# cd awesome-20091211-v1.1/ # touch dkms.conf #create dkms.conf file # texteditorofyourchoice dkms.conf

Inside dkms.conf, we might add the lines:

MAKE="make -C src/ KERNELDIR=/lib/modules/$/build" CLEAN="make -C src/ clean" BUILT_MODULE_NAME=awesome BUILT_MODULE_LOCATION=src/ PACKAGE_NAME=awesome PACKAGE_VERSION=1.1 REMAKE_INITRD=yes
  • The command to build the module (run make in the directory src/). You should look at your Makefile and determine any environment variables that need to be set to the appropriate kernel-specific directory. Many packages will build by default against the currently running kernel, but you want dkms to be able to build against a different kernel that may be specified to it on the command line, the version of which is held in the "$kernelver" variable. The environment variable "KERNELVERSION=$" is automatically appended to the make line by dkms at runtime, but this variable may not be the one used by your Makefile. Another common environment variable is "INCLUDEDIR=/lib/modules/$/build/include."
  • The command to clean the source tree (run make clean in the directory src/).
  • The name of the module without the .o or .ko extension. This may actually be an array of modules if multiple modules are built, see man dkms.
  • Where DKMS can find the built module.
  • The name and version DKMS should associate with the module(s).
  • To remake the initrd image after installing the module.
Читайте также:  Linux для java программиста

You can also add options to call scripts before or after build or install, provide additional (conditional) make commands, patch commands, etc. The dkms.conf is in fact sourced into a shell script, so a fair amount of trickery can be done if necessary. These options and more are described in the dkms.conf section in man dkms.

Next, we install the module into DKMS by copying the module installation files into the kernel source tree /usr/src/- and tell DKMS about the new module:

# ls README dkms.conf lib src # sudo cp -R . /usr/src/awesome-1.1 # sudo dkms add -m awesome -v 1.1 dkms does its thing.

That's it! DKMS has now added our module to its list of modules to build for future kernel installations. To make sure it works and to install the module into our current kernel, we can instruct dkms to build and install the module:

# sudo dkms build -m awesome -v 1.1 dkms does its thing. watch for build errors. you may need to tweak dkms.conf # sudo dkms install -m awesome -v 1.1 dkms does its thing. module is copied into current kernel module tree

With some luck, your module will be installed and reinstalled into future kernel updates.

Examples

DKMS (последним исправлял пользователь 171 2012-03-18 11:26:44)

The material on this wiki is available under a free license, see Copyright / License for details
You can contribute to this wiki, see Wiki Guide for details

Источник

Оцените статью
Adblock
detector