Версия: 3.0.13
Dynamic Kernel Module Support (DKMS) - это фреймворк, который позволяет динамически создавать модули ядра для каждого ядра системы упрощенным и организованным образом.
Контактная информация:
Проект GitHub
Лицензия:
GPL2
Синтаксис:
/usr/bin/dkms [action] [options]
Действия:
Действие | Описание |
---|---|
add | Добавляет комбинацию модуля и версии модуля в дерево для сборки и установки. Если указаны модуль/версия, -m модуль/версия или -m модуль -v версия, эта команда требует наличие исходников в /usr/src/<module>-<module-version>/ и правильно отформатированного файла dkms.conf. Если указан путь /path/to/source-tree, и в нем есть файл dkms.conf, он будет скопирован в /usr/src/module-module-version. Если указан путь к tarball, команда работает как ldtarball. |
remove | Удаляет комбинацию модуля/версии или модуля/версии/ядра/архитектуры из дерева. Если модуль установлен, сначала выполняется его удаление, а затем, если необходимо, заменяется на original_module. Использование опции --all удаляет все экземпляры для каждого ядра сразу. |
build | Собирает указанную комбинацию модуля и версии для заданного ядра и архитектуры. Если не указан параметр -k, сборка производится для текущего ядра и архитектуры. Все сборки выполняются в каталоге /var/lib/dkms/<module>/<module-version>/build/. Если комбинация модуля и версии еще не добавлена, dkms попытается добавить её, и в этом случае сборка может принимать те же аргументы, что и add. |
unbuild | Отменяет сборку модуля. |
install | Устанавливает собранный модуль для соответствующего ядра. Если не указан параметр -k, модуль устанавливается для текущего ядра. Если модуль не был собран, dkms попытается его собрать. Если модуль не был добавлен, dkms попытается его добавить. При передаче файла .rpm dkms попытается установить его с помощью rpm -Uvh, и если RPM будет установлен успешно, выполнится команда autoinstall для подтверждения сборки для текущего ядра. |
uninstall | Удаляет установленный модуль/версию модуля для указанного ядра/архитектуры, или для текущего ядра, если параметр -k не указан. После удаления драйвер будет оставаться в состоянии сборки. Для полного удаления драйвера следует использовать команду remove. |
match | Устанавливает модули для указанного ядра, проверяя конфигурацию указанного шаблонного ядра. Каждый модуль, установленный для templatekernel, будет установлен и на указанное ядро. |
autoinstall | Попытка установить последнюю версию всех модулей, которые были установлены для других версий ядра. Используется команда dkms_autoinstaller для выполнения этой работы. |
mktarball | Создает архив tarball для указанного модуля и версии, включая исходные файлы и собранные модули для указанных ядер. Можно указать конкретное ядро или несколько ядер для архивации. При необходимости можно использовать --archive для указания файла, в который будет сохранен архив. Также можно использовать --binaries-only или --source-only для создания архива без исходных файлов или без предсобранных бинарных файлов. |
ldtarball | Загружает tarball, созданный с помощью mktarball, в дерево DKMS. Новые модули будут оставаться в состоянии сборки, после чего следует использовать команду dkms install для их установки. Если файлы уже существуют, будет выведено предупреждение, и файлы не будут заменены. Для замены используйте опцию --force. |
status | Возвращает текущий статус модулей, версий и ядер в дереве, а также информацию о том, были ли они добавлены, собраны или установлены. Статус можно вывести для определенного модуля, ядра или комбинации модуля и ядра. |
Опции:
Опция | Описание |
---|---|
-m module | Имя модуля и версия модуля, с которым необходимо работать. Часть опции -m является необязательной и может быть опущена в большинстве случаев. |
-v module-version | Версия модуля, для которой нужно выполнить указанное действие. Эта опция требуется только в случае, если используется опция -m без указания компонента <module-version>. |
-k kernel-version | Версия ядра и архитектура, для которых должно быть выполнено действие. Можно указать несколько пар "версия ядра/архитектура" в командной строке, повторяя аргумент -k с различными версиями ядра и архитектурами. Однако не все действия поддерживают работу с несколькими версиями ядра (в таком случае будет выдана ошибка). Часть "arch" может быть опущена, и DKMS автоматически примет, что используется архитектура текущей запущенной системы. |
-a arch | Архитектура системы, для которой выполняется действие. Указание этого параметра необязательно, если он уже задан в опции -k. Если архитектура не указана, DKMS предполагает, что используется архитектура текущей запущенной системы (результат команды uname -m). Можно указать несколько архитектур в одной командной строке, повторяя аргумент -a с различными именами архитектур. При указании нескольких архитектур должна соблюдаться связь 1:1 между аргументами -k и -a. DKMS будет предполагать, что первый аргумент -a относится к первому ядру -k, второй — ко второму, и так далее. Например, если указать: -k kernel1 -k kernel2 -a i386 -k kernel3 -a i686 -a x86_64 DKMS обработает это как: kernel1-i386, kernel2-i686, kernel3-x86_64 |
-c dkms.conf-location | Местоположение файла dkms.conf. Этот параметр необходим для действия add. Если местоположение не указано, по умолчанию предполагается, что файл находится в каталоге /usr/src/<module>-<module-version>/. |
-q | Тихий режим. |
--force | Этот параметр можно использовать вместе с ldtarball, чтобы принудительно заменить существующие файлы. |
--all | Этот параметр можно использовать для автоматического указания всех соответствующих ядер/архитектур для модуля/версии модуля. Это полезно для таких действий, как remove, mktarball и других. Это избавляет от необходимости указывать -k kernel1 -a arch1 -k kernel2 -a arch2 для каждого ядра, для которого был собран модуль. |
--templatekernel=kernel | Этот параметр требуется для действия match. Команда match будет смотреть на указанный templatekernel и установит все те же комбинации модулей/версий на другие ядра. |
--directive='cli-directive=cli-value' | С помощью этого параметра можно указать дополнительные директивы из командной строки. Опцию --directive можно использовать несколько раз в одной командной строке для указания нескольких дополнительных директив. |
--config=kernel-.config-location | Этот параметр используется во время сборки для указания альтернативного местоположения файла .config ядра, который использовался для компиляции этого ядра. Обычно dkms использует стандартное местоположение и имена файлов конфигураций в директории /usr/src/linux-<kernel>/configs/. Если конфигурация для ядра, для которого собирается модуль, не находится здесь или не имеет ожидаемого имени в этом месте, нужно указать dkms, где можно найти необходимый файл .config, чтобы ядро было правильно подготовлено для сборки модуля. |
--archive=tarball-location | Этот параметр используется во время действия ldtarball для указания местоположения архива tarball, который необходимо загрузить в дерево DKMS. Указывать параметр --archive нужно только в случае, если <tarball-location> еще не существует как файл. |
--kernelsourcedir=source-location | Этот параметр позволяет указать местоположение каталога исходных кодов ядра. Обычно не нужно задавать этот параметр, если исходные коды ядра доступны через /lib/modules/$kernel_version/build. |
--rpm_safe_upgrade | Этот флаг следует использовать при упаковке модулей с поддержкой DKMS в RPM. Он должен быть указан как при добавлении, так и при удалении в спецификации RPM, чтобы обеспечить правильное поведение DKMS и RPM в различных сценариях при обновлении между версиями пакетов RPM с поддержкой DKMS. |
--dkmstree path | Указывает целевое дерево для сборки и установки модулей. Полезно в случаях, когда не нужно изменять систему, используя её исключительно для сборки. |
--sourcetree path | Указывает расположение для сборки пакета DKMS. Полезно для систем, где нет прав root, но все равно необходимо иметь возможность собирать пакеты DKMS. |
--installtree path | Указывает место для установки модулей, когда выполняется команда dkms install. |
--binaries-only | Эта опция используется вместе с командой mktarball для создания DKMS-архива, который не содержит исходный код модуля. Это полезно для уменьшения размера архива, если на системе, куда он будет загружен, уже установлен исходный код. Для загрузки архива, созданного с опцией binaries-only, исходный код модуля должен быть уже в DKMS-дереве этой системы. В противном случае DKMS откажется загрузить такой архив. |
--source-only | Эта опция используется вместе с командами mktarball, mkrpm или mkdeb для создания DKMS-архива, который не содержит предварительно скомпилированных бинарных модулей ядра. Это полезно, если нужно просто упаковать исходный код, не включая в него никаких предварительно скомпилированных модулей. Также, если используется команда mkrpm и необходимо создать RPM без предварительно скомпилированных модулей, эта опция предотвратит добавление таких модулей в внутренний DKMS-архив. |
--version | Выводит текущую установленную версию DKMS и завершает выполнение. |
Для сборки модуля необходимо, чтобы был установлен пакет заголовков ядра (
linuxXX-headers
, где XX - версия ядра) или модуль заголовков ядра (002-linuxXX-headers
, где XX - версия ядра).
sudo mkdir -p /usr/src/<название_драйвера>-<версия_драйвера>
sudo cp <путь_до_кода>/* /usr/src/<название_драйвера>-<версия_драйвера>/
/usr/src/<название_драйвера>-<версия_драйвера>/dkms.conf
с содержимым:PACKAGE_NAME="<название_драйвера>"
PACKAGE_VERSION="<версия_драйвера>"
BUILT_MODULE_NAME[0]="<название_драйвера>"
DEST_MODULE_LOCATION[0]="/extra"
AUTOINSTALL="yes"
/usr/src/<название_драйвера>-<версия_драйвера>/Makefile
:obj-m = <название_драйвера>.o
KVERSION = $(shell uname -r)
all:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
sudo dkms add -m <название_драйвера> -v <версия_драйвера>
sudo dkms build -m <название_драйвера> -v <версия_драйвера>
sudo dkms install -m <название_драйвера> -v <версия_драйвера>
После выполнения этих шагов, при обновлении ядра модуль будет автоматически пересобран и установлен, если включена опция AUTOINSTALL="yes".
Для того чтобы пересобрать модули для текущего ядра следует открыть терминал и ввести:
dkms autoinstall
Также можно указать для конкретного ядра:
dkms autoinstall -k 6.1.92-1-ublinux
Узнать версию ядра можно командой:
uname -r
Для сборки модуля ядра для драйвера (например NVIDIA версии 334.21) следует открыть терминал и ввести:
dkms install -m nvidia -v 334.21
Для сборки модуля для всех ядер для драйвера (например NVIDIA версии 334.21) следует открыть терминал и ввести:
dkms install nvidia/334.21 --all
Для удаления модуля (старые модули не удаляются автоматически) следует открыть терминал и ввести:
dkms remove -m nvidia -v 331.49 --all
Если пакет dkms удален, информация о предыдущих собранных модулях будет утеряна. В этом случае, следует пройтись по каталогам /usr/lib/modules/kernel_release
и /var/lib/dkms/package_name
и удалить все файлы и директории, которые больше не используются.
Установить можно отдельным модулем или пакетом:
Для установки следует воспользоваться утилитой "Установка и удаление программ".
Модуль, необходимый для установки:
Внимание! Данный системный модуль может быть уже установлен.
Для установки следует воспользоваться утилитой "Установка и удаление программ".
Пакет, необходимый для установки:
Внимание! Если система загружена в режиме полного сохранения, то внесенные изменения в систему будут сохранены после перезагрузки.
Если режим загрузки другой, то рекомендуется воспользоваться утилитой "Сохранение изменений" до перезагрузки системы.