Astra linux dkms установка

How to build a kernel module with DKMS on Linux

Suppose you wanted to install a device driver for a new graphics card, a WiFi dongle, or a network interface card that you purchased, and for whatever reason (e.g., missing prebuilt driver, outdated driver version, non-common build options), you decided to compile and install the driver module from the source. So you went ahead and downloaded the official source code of the device driver, compiled it against the kernel, installed and activated it. The new hardware is successfully recognized, and everything works fine.

Now think about what will happen to the driver if you upgrade to a newer kernel later. The driver was built outside the stock kernel source tree, so once your system is upgraded to a newer kernel, the driver you built will cease to work properly.

How to solve this problem? Well, you need to re-compile the driver against the newer kernel and re-install it. Obviously it becomes quite cumbersome if you have to re-build the driver manually every time you upgrade your kernel.

This is when dynamic kernel module support (DKMS) comes in handy. The DKMS framework enables you to automatically re-build kernel modules into the current kernel tree as you upgrade your kernel. Hardware vendors often distribute their hardware’s device driver as a DKMS package, so that users can auto-update the installed driver while they upgrade to a newer kernel. As an end-user you can easily configure DKMS to auto-update any custom device driver or kernel module that resides outside the stock kernel tree.

Читайте также:  Firefox memory leak linux

In this tutorial, I will demonstrate how to auto-build a kernel module with DKMS on Linux.

Install DKMS on Linux

You can install DKMS on various Linux distros as follows. As part of DKMS installation, necessary build tools (e.g., gcc , make ) and kernel headers will also be installed by the distro’s package manager.

Install DKMS on Ubuntu, Debian or or Linux Mint

Install DKMS on Fedora

Источник

Astra linux dkms установка

Библиотека сайта 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

Более простая эквивалентная команда:

Добавление исходного кода модуля в дерево исходного кода ядра ОС на уровне фреймворка DKMS

Теперь нужно собрать версию данного модуля, совместимую с текущей версией ядра ОС:

$ 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

Установка модуля, совместимого с текущей версией ядра ОС, в систему

На данный момент модуль ядра ОС должен быть успешно установлен в систему. Вы можете проверить статус его установки с помощью следующей команды:

Читайте также:  Linux exit bash command

Проверка статуса установки модуля ядра ОС

Проверка работоспособности механизма автоматической пересборки модуля после обновления ядра ОС

После того, как фреймворк DKMS настроен для автоматической пересборки драйвера ixgbe , я предлагаю рассмотреть изменения в системе, которые произойдут в результате обновления версии ядра ОС. Я буду обновлять ядро ОС версии 3.10.0-229 до версии 3.10.0-327 . В качестве тестового окружения будет использоваться дистрибутив CentOS 7, поэтому для обновления версии ядра ОС я воспользуюсь утилитой yum . Обратите внимание на то, что для корректной пересборки драйвера устройства средствами DKMS вместе с пакетами программного обеспечения с компонентами новой версии ядра ОС должен устанавливаться соответствующий пакет программного обеспечения с его заголовочными файлами.

Перед обновлением необходимо узнать версии драйвера ixgbe и текущего ядра ОС.

Версии драйвера ixgbe и текущего ядра ОС

Несложно заметить, что драйвер устройства версии 4.3.15 был установлен средствами DKMS в директорию модулей ядра Linux версии 3.10.0-229 .

А теперь попробуем установить новую версию ядра ОС и соответствующих заголовочных файлов:

$ sudo yum install kernel kernel-devel

После перезагрузки с задействованием новой версии ядра ОС следует снова проверить версию драйвера ixgbe .

Версия драйвера ixgbe после перезагрузки с задействованием новой версии ядра ОС

Вы должны обнаружить, что драйвер ixgbe той же версии был автоматически пересобран для ядра Linux новой версии 3.10.0-327 .

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

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

Читайте также:  Asus eee pc and linux

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

Источник

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