- Dynamic Kernel Module Support (Русский)
- Установка
- Обновления
- Использование
- Список модулей
- Пересборка модулей
- Удаление модулей
- Создание DKMS пакета
- Initial ramdisk
- Смотрите также
- Пакет dkms astra linux
- Автоматическая сборка модуля ядра ОС с помощью фреймворка DKMS
- Проверка работоспособности механизма автоматической пересборки модуля после обновления ядра ОС
- Заключение
- Сборка модулей ядра
- Сборка модуля ядра отдельно от дерева исходного ядра
- Сборка модуля ядра с помощью dkms
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.
Смотрите также
Пакет dkms astra linux
Библиотека сайта rus-linux.net
gcc , make ) и набор заголовочных файлов, причем оба этих компонента должны автоматически устанавливаться силами менеджера пакетов программного обеспечения дистрибутива.
Debian, Ubuntu и Linux Mint:
В первую очередь следует подключить репозиторий EPEL, после чего достаточно выполнить следующую команду:
Автоматическая сборка модуля ядра ОС с помощью фреймворка DKMS
Теперь давайте разберемся с тем, как настроить фреймворк DKMS для автоматической пересборки модуля ядра ОС после обновления последнего. По сути, вам придется создать файл конфигурации DKMS для сборки и установки выбранного модуля ядра ОС в систему. После его создания установка всех обновлений ядра ОС будет инициировать пересборку заданного модуля средствами DKMS.
В данной статье я буду использовать в качестве примера модуль ядра ОС под названием ixgbe , который по своей сути является драйвером для сетевых карт производства компании Intel.
Во-первых, следует загрузить и распаковать архив исходного кода драйвера устройства в директорию /usr/src/- .
$ wget http://tenet.dl.sourceforge.net/project/e1000/ixgbe%20stable/4.3.15/ixgbe-4.3.15.tar.gz $ sudo tar -xf ixgbe-4.3.15.tar.gz -C /usr/local/src $ sudo mv /usr/local/src/ixgbe-4.3.15/src /usr/src/ixgbe-4.3.15
После этого нужно создать файл конфигурации с именем dkms.conf в этой же директории.
$ sudo vi /usr/src/ixgbe-4.3.15/dkms.conf
PACKAGE_NAME="ixgbe" PACKAGE_VERSION="4.3.15" BUILT_MODULE_NAME[0]="ixgbe" DEST_MODULE_LOCATION[0]="/kernel/drivers/net/ethernet/intel/ixgbe/" AUTOINSTALL="yes"
Далее следует добавить исходный код данного модуля в дерево исходного кода ядра ОС на уровне фреймворка DKMS:
$ sudo dkms add -m ixgbe -v 4.3.15
Более простая эквивалентная команда:
Теперь нужно собрать версию данного модуля, совместимую с текущей версией ядра ОС:
$ sudo dkms build -m ixgbe -v 4.3.15
В данном случае также может использоваться более простая эквивалентная команда:
$ sudo dkms build ixgbe/4.3.15
Наконец, нужно установить модуль, совместимый с текущей версией ядра ОС, в систему:
$ sudo dkms install -m ixgbe -v 4.3.15
Разумеется, вы также можете воспользоваться более простой эквивалентной командой:
$ sudo dkms install ixgbe/4.3.15
На данный момент модуль ядра ОС должен быть успешно установлен в систему. Вы можете проверить статус его установки с помощью следующей команды:
Проверка работоспособности механизма автоматической пересборки модуля после обновления ядра ОС
После того, как фреймворк DKMS настроен для автоматической пересборки драйвера ixgbe , я предлагаю рассмотреть изменения в системе, которые произойдут в результате обновления версии ядра ОС. Я буду обновлять ядро ОС версии 3.10.0-229 до версии 3.10.0-327 . В качестве тестового окружения будет использоваться дистрибутив CentOS 7, поэтому для обновления версии ядра ОС я воспользуюсь утилитой yum . Обратите внимание на то, что для корректной пересборки драйвера устройства средствами DKMS вместе с пакетами программного обеспечения с компонентами новой версии ядра ОС должен устанавливаться соответствующий пакет программного обеспечения с его заголовочными файлами.
Перед обновлением необходимо узнать версии драйвера ixgbe и текущего ядра ОС.
Несложно заметить, что драйвер устройства версии 4.3.15 был установлен средствами DKMS в директорию модулей ядра Linux версии 3.10.0-229 .
А теперь попробуем установить новую версию ядра ОС и соответствующих заголовочных файлов:
$ sudo yum install kernel kernel-devel
После перезагрузки с задействованием новой версии ядра ОС следует снова проверить версию драйвера ixgbe .
Вы должны обнаружить, что драйвер ixgbe той же версии был автоматически пересобран для ядра Linux новой версии 3.10.0-327 .
Обратите внимание на то, при обновлении версии ядра ОС без установки соответствующего набора заголовочных файлов сборка модуля средствами DKMS попросту не будет инициирована, следовательно, драйвер устройства не будет пересобран из своих исходных кодов. Вместо него будет использоваться официальный драйвер из состава новой версии ядра ОС (если такой доступен).
Например, ниже показан результат обновления ядра ОС без установки соответствующих заголовочных файлов, причем несложно заметить, что в результате был загружен немного устаревший драйвер устройства ixgbe из его состава.
Вы всегда можете пересобрать необходимый драйвер устройства средствами DKMS, самостоятельно инициировав его сборку. Конечно же, перед этим этом следует убедиться в наличии в системе заголовочных файлов для текущей версии ядра ОС.
$ sudo yum install kernel-devel $ sudo dkms build ixgbe/4.3.15 $ sudo dkms install ixgbe/4.3.15
Заключение
В данной статье была продемонстрирована методика использования фреймворка DKMS для автоматической пересборки модуля ядра ОС. Бесспорно, использование фреймворка DKMS не всегда является оправданным решением, особенно в системах Linux, находящихся в промышленной эксплуатации, в которых обычно запрещена установка компонентов сборочного инструментария. Но при этом DKMS значительно упрощает жизнь разработчиков программного обеспечения и пользователей персональных настольных систем, автоматически собирая необходимые модули ядра ОС по мере установки его обновлений.
Сборка модулей ядра
Сборка модуля ядра отдельно от дерева исходного ядра
1. Установить пакет с заголовочными файлами (linux-headers-. )
2. Создать рабочий каталог
3. Скопировать в него исходные коды модуля
4. Перейти в рабочий каталог
5. Создать 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
6. Выполнить команду make
7. Полученный файл .ko скопировать в /lib/modules//
8. Выполнить команду sudo depmod -a
Сборка модуля ядра с помощью dkms
1. Установить пакет dkms и пакет c заголовочными файлами ядра (linux-headers-. )
2. Создать рабочий каталог по пути /usr/src/-
3. Скопировать исходные коды в рабочий каталог
4. Создать в рабочем каталоге конфигурационный файл dkms.conf вида:
5. Создать в рабочем каталоге 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
6. Добавить исходный код данного модуля в дерево DKMS:
7. Собрать драйвер командой:
8. Проинсталлировать драйвер командой:
9. При обновлении ядра и заголовочных файлов данный модуль будет автоматически пересобран.