Что делает DKMS? Как мне это использовать?

23

Недавно я видел несколько упоминаний о DKMS, но не совсем понятно, что на самом деле он делает в моей системе.

Что на самом деле делает DKMS и как мне его использовать?

user238204
источник

Ответы:

25

Пакет DKMS (поддержка динамического модуля ядра) ( http://linux.dell.com/dkms/ ) обеспечивает поддержку установки дополнительных версий модулей ядра. Пакет компилируется и устанавливается в дерево ядра. Удаление восстанавливает предыдущие модули. По умолчанию установка выполняется в текущем дереве ядра, но любое дерево ядра можно выбрать с помощью параметров командной строки. Кроме того, DKMS вызывается автоматически при установке новых пакетов образа ядра Ubuntu, и поэтому модули, добавленные в DKMS, будут автоматически переноситься через обновления.

обзор

Чтобы использовать модуль с DKMS, нужно поместить установочные файлы модуля (могут быть исходный код или двоичный файл) в / usr / src / - вместе с файлом конфигурации dkms.conf, который сообщает DKMS, как построить / настроить модуль и как его имя это. В более сложных сценариях система dkms может выполнять инструкции условного построения и исправления, но, учитывая ваш случай, это может не потребоваться.

Прохождение

Допустим, вы хотите установить модуль для своего модного «Awesome Adapter». Вам дан источник tarball awesome-20091211-v1.1.tgz.

В DKMS мы сообщаем DKMS, как это сделать, создав файл dkms.conf с соответствующими записями. Например, после того, как мы распаковали архив:

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

Внутри dkms.confмы могли бы добавить строки:

MAKE="make -C src/ KERNELDIR=/lib/modules/${kernelver}/build"
CLEAN="make -C src/ clean"
BUILT_MODULE_NAME=awesome
BUILT_MODULE_LOCATION=src/
PACKAGE_NAME=awesome
PACKAGE_VERSION=1.1
REMAKE_INITRD=yes

Все каталоги соответствуют местоположению файла dkms.conf. Это говорит DKMS

  1. Команда для сборки модуля (запустите make в каталоге src /).
  2. Команда для очистки исходного дерева (запустите make clean в каталоге src /).
  3. Название модуля без расширения .o или .ko. На самом деле это может быть массив модулей, если построено несколько модулей, см. Man dkms.
  4. Где DKMS может найти встроенный модуль.
  5. Имя и версия DKMS должны ассоциироваться с модулями.
  6. Переделать образ initrd после установки модуля.

Вы также можете добавить опции для вызова сценариев до или после сборки или установки, предоставить дополнительные (условные) команды make, команды patch и т. Д. Файл dkms.conf фактически поставляется в виде сценария оболочки, так что можно сделать немало хитростей. если необходимо. Эти и другие параметры описаны в разделе dkms.conf в man dkms.

Затем мы устанавливаем модуль в DKMS, копируя установочные файлы модуля в дерево исходных кодов ядра / usr / src / - и сообщаем DKMS о новом модуле:

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

Это оно! DKMS теперь добавил наш модуль в свой список модулей для сборки для будущих установок ядра. Чтобы убедиться, что он работает и установить модуль в наше текущее ядро, мы можем дать команду dkms для сборки и установки модуля:

# 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

Если повезет, ваш модуль будет установлен и переустановлен в будущих обновлениях ядра.

Примеры

Страница людей DKMS имеет полезную информацию о настройке вашего любимого модуля ядра для использования с DKMS. Это не полная документация, но она ответит на множество вопросов. Это может помочь вам отметить следующие примеры, даже если используемые модули не являются теми, которые вы хотите установить:

  • RocketRaid - два примера того, как настроить драйверы Highpoint RocketRaid RR26xx и RR62x с DKMS.

От: help.ubuntu.com

Более подробную информацию можно найти здесь:

Rinzwind
источник
2
Кстати, у проекта DKMS появился новый дом на Github github.com/dell/dkms
DDay