Что такое ядро. Часть 2: DKMS

lego
Собрать ядро это интересно, но что если вам нужны модули, которых нет в исходниках ядра? Это вполне реальная ситуация, особенно если учесть, что разработчики внимательно относятся к качеству кода в ядре. В добавок, модуль должен быть бинарно-совместим с версией ядра. В таком случае нам придется собирать модули отдельно от ядра и устанавливать их. Для автоматизации этой задачи существует утилита dkms.

Постановка задачи

Есть виртуальная машина VirtualBox, на которой стоит Debian GNU/Linux. Средства интеграции нормально не работают из коробки. Ребята из Oracle любезно приложили образ диска, на котором вы можете запустить программу установки средств интеграции, но is not unix way. Мы ни в коем случае не запускаем exe’шники скачанные откуда ни попадя, как какие-нибудь виндузятники. Мало-ли в процессе установки эта штука загадит систему так, что фиг отмоешься. Так что попробуем сделать это так, как следует это сделать в линуксе.

Шаг 1. Установка linux-headers

Для того, чтобы собрать модули из исходников, естественно, нужны заголовочные файлы ядра, для импорта функций из ядра.
apt-get install linux-headers-486
Если у вас 64-х битная ОС, то пакет должен называться linux-headers-amd64 соответственно. Поскольку на установку этого пакета автоматически срабатывает триггер, заставляющий (пере)собирать сторонние модули, то нам остается перезагрузить машину и возрадоваться, что у нас заработали средства интеграции. Но мы преследовали не эту цель. Мы хотели-бы потрогать dkms.

Шаг 2.Сборка модулей с помощью dkms.

Go. Для начала удалим модули, которые были собраны в первом шаге.
dkms remove -m virtualbox-guest -k $(uname -r) -v 4.1.18
Команда выглядит так
dkms команда -m имя-модуля -k имя-ядра -v версия-модулей
Если нужны подробности, как всегда, маны рулят. Если нам нужно имя ядра, с которым запущена система сейчас, то в этом всегда поможет uname с опцией -r.
Ставим модули:
dkms install -m virtualbox-guest -k $(uname -r) -v 4.1.18
Also, если нужно собрать все что нужно для текущего ядра, удобнее вбить
dkms autoinstall -k $(uname -r)

Вместо заключения

Если какой-то модуль, который вы собрали не работает, проверьте загружается-ли он утилитой modprobe.
Если нужна автозагрузка какого-то модуля, пропишите это в /etc/modprobe.d.
Как видите, сборка модулей ядра в системе автоматизирована и не требует сверх-навыков.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*