Ubuntu dkms команда не найдена

Обновлено: 06.07.2024

Операционные системы семейства linux практически всегда стоят на голову выше своих «оконных партнеров» производства Microsoft.

Это связано с тем, что Windows начала свой путь на базе старого и доброго MS-DOS, который долгое время ограничивал ее развитие, а также в связи с нацеленностью разработчиков Винды на получение максимальной прибыли от пользователей, а не на их удобство. Именно поэтому каждый новый дистрибутив Виндовс становится все более громоздким и требует апгрейда железа компьютера.

ОС семейства Linux в большинстве случаев бесплатны и развиваются энтузиастами, нацеленными на достижение максимальной производительности на уже имеющемся оборудовании. Поэтому все дистрибутивы, работающие на ядре Линукса очень стабильны и не требовательны к ресурсам.

БОльшие требования к аппаратному обеспечению для линукс-подобных систем появляются в случае их использования для майнинга. В этом случае особенно важно достичь максимальной производительности подсистемы видео, которая обычно используется для проведения вычислений при майнинге. Кроме того, правильная установка и настройка драйверов для видеокарт в Linux требуется для полноценного использования рабочих станций (домашних компьютеров) под управлением этой системы.

Обычно установка драйверов для видеокарт nvidia в LINUX-подобных системах не вызывает затруднений.

Для видеокарт АМД часто приходится «танцевать с бубнами», но овчинка стоит выделки. Использование правильно настроенных драйверов АМД может дать серьезный прирост производительности видеокарт, например позволяет выжать до 30 mh/s на старых картах типа Радеон R9 290/390 при майнинге на алгоритме Ethash даже на поздних эпохах DAG.

Рассмотрим подробнее особенности работы графической подсистемы с видеокартами amd под управлением ubuntu, а также особенности установки и настройки драйверов для компьютеров с GPU AMD в ОС на основе Убунту.

Тема установки драйверов АМД в linux очень сложная и зависимая от конкретной конфигурации системы, а также версии drivers. Поэтому данная статья не претендует на полноту изложения всех проблем по затронутой тематике, а является попыткой систематизировать какую-то часть информации по работе с драйверами АМД в ubuntu.

Какие драйвера нужны для майнинга на видеокартах АМД в ubuntu

Для работы видеокарт в ubuntu обычно используются такие виды драйверов:

Для майнинга обычно применяется версия AMDGPU-PRO, так как она позволяет в полной мере использовать технологию параллельных вычислений на видеокартах АМД в Линуксе.

Открытые драйвера radeon Mesa не поддерживают в полной мере технологии OpenCl, поэтому не подходят для майнинга. Для работы видеокарт AMD поколения CGN2 (например, r9 290) эти драйвера нужно принудительно отключать.

Фирменные драйвера АМД отличаются между собой поддержкой разных версий OpenCL, а также списком поддерживающихся видеокарт.

Для майнинга в ОС Ubuntu 16.04 лучше использовать фирменные драйвера версии 17.40 (рекомендованные АМД (версия 514569) — для RX-ов или эти (версия 492261) — на AMD R9 290 и других картах поколения CGN2).

Для Ubuntu 18.04 на RX-ах хорошо работают драйвера версии 18.50.

Теоретически OpenCL 2.1 должен обеспечивать более высокую производительность и порядок работы с памятью, но, к сожалению, последние драйвера АМД могут не корректно работать со всеми, даже официально поддерживаемыми картами.

В особенности это касается поддержки еще не очень старых карт с микроархитектурой Graphics Core Next 2. К ним относятся видеокарты с чипами Bonaire и Hawaii: AMD Radeon HD 7790, HD 8770, R7 260/260X, R9 290/290X, R9 295X2, R7 360, R9 390/390X.

Подготовка к установке драйверов АМД в Убунту

Для установки драйверов и всех необходимых пакетов нужно иметь права суперпользователя (root), либо получать эти привилегии, выполняя каждую команду с sudo.

Перед установкой драйверов АМД нужно обновить систему.

Это можно сделать, выполнив команду:

После обновления ОС нужно перезагрузить компьютер:

На некоторых компьютерах с видеокартами поколения CGN2 (например, R9 290) сначала нужно установить драйвера версии 492261 и только потом устанавливать обновления (это возможно сделать только на ubuntu 16.04). В противном случае система крашится.

Установка драйверов AMD в ОС ubuntu

Для установки драйверов amdgpu-pro 17.40 в терминале, открытом из папки с разархивированными файлами драйвера, выполняют команду:

При появлении ошибок доступа к amdgpu-pro-install нужно дать файлу необходимые права командой:

Кроме того, в дополнение к драйверам 17.40, желательно установить компонент ROCM командами:

Этот пакет является платформой для GPU Enabled HPC и UltraScale Computing.

Для установки более новых драйверов (18.0+) используется команда:

Если при установке драйверов возникают ошибки с правами доступа, то нужно попробовать предоставить права выполнения файлу amdgpu-pro-install как программы с помощью контекстного меню или командой:

Для установки в серверной версии системы 18.04 только средствами командной строки используют команды (для драйверов 19.30):

После процедуры стандартной установки драйверов для видеокарт amd нужно также инсталлировать дополнительные пакеты:

Этим, среди прочего, лечится ошибка WARNING: amdgpu dkms failed for running kernel mining.

После инсталляции драйверов нужно добавить пользователя в группу видео. Это осуществляется командой:

Проверка пользователей, включенных в группу video делается командой:

Проверить правильность устанвоки драйверов можно командами:

После этого нужно откорректировать загрузчик, где нужно включить поддержку больших страниц видеопамяти (режим compute), а также отключить загрузку драйвера radeon для видеокарт поколения CGN 2.

Корректировка загрузчика ядра GRUB

Отредактировать GRUB можно с помощью редактора nano командой:

где amdgpu.vm_fragment_size=9 — это включение поддержки больших страниц памяти (аналог compute mode).

После корректирования grub нужно сохранить изменения, нажав control+o , подтвердить изменения, нажав Y, нажать Enter для сохранения файла, выйти из редактора (control+x) и затем выполнить команды:

В выражении amdgpu.vm_fragment_size=X значение фрагментирования видеопамяти X вычисляется по формуле 4KB*2^X. По умолчанию X=4, что соответствует страницам памяти величиной 64KB. Установка значения X=9 делает размер страниц памяти равным 2MB ,что значительно уменьшает фрагментацию и увеличивает быстродействие.

Отключение загрузки устаревшего драйвера Radeon в ядре Linux

Для видеокарт с микроархитектурой CGN второго поколения (CGN 2), нужно обязательно привести строку параметров загрузчика ядра GRUB_CMDLINE_LINUX_DEFAULT к такому виду:

После корректирования grub нужно сохранить изменения, нажав control+o , подтвердить изменения, нажав Y, нажать Enter для сохранения файла, выйти из редактора (control+x) и затем выполнить команды:

Установка пакета AMD APP SDK

Пакет AMD APP SDK позволяет использование технологии OpenCL. Его нужно устанавливать для старых версий драйверов. Например, уже для amdgpu-pro-17.40-514569 этот пакет ставить не нужно.

В новых драйверах AMDGPU-Pro и ROCm инсталлировать AMD APP SDK не нужно (AMD уже официально даже не распространяет этого пакета).

Для старых драйверов скачать пакет APP SDK можно с GitHub repo или на сайте sourceforge.

Как проверить версию установленных драйверов AMD в ubuntu?

Для изучения устройств, установленных в системе и поддерживающих технологию OpenCL, используют команду:

Пример вывода информации о видеокарте командой clinfo:


Кроме того, проверить, какой драйвер используется системой можно командой:


Полную информацию о процессе загрузки всех драйверов в системе, режиме работы со страницами памяти и другую важную информацию о видеокартах (и не только) можно посмотреть в логах командой:

Выдача информации,касающейся подсистемы ядра Direct Rendering Manager (DRM), которая отвечает за взаимодействие с видеокартами:


Здесь есть информация о таких важных для майнинга элементах, например:

  • initializing kernel modesetting (HAWAII 0x1002:0x67B0 0x174B:0xE285 0x00) — инициализация установок ядра для видеокарты HAWAII с указанием BIOS;

(для rx-ов отображается: initializing kernel modesetting (POLARIS10 0x1002:0x67DF 0x174B:0xE353 0xCF);

  • memory usable by graphics device = 4096M — количество доступной видеопамяти;
  • Detected VRAM RAM=4096M, BAR=256M — количество видеопамяти,
  • RAM width 512bits GDDR5 — тип видеопамяти и разрядность шины и т.д.

При наличии проблем с установкой драйверов amd именно здесь стоит искать ошибки.

Для просмотра информации обо всех устройствах в системе можно использовать команду:

Вам также может понравиться


О плоттинге (plotting) при майнинге (фарминге) CHIA и подобных криптовалют

Использование radeontop для получения информации о загруженности видеокарт AMD в Linux

Во время недавнего apt-get dist-upgrade 12.10 я получил следующую ошибку:

Я знаю, что это плохой ответ, но у меня всегда есть эта ошибка, и все работает нормально. Я думаю, dkms что просто использует настройки по умолчанию.

Я получал это на обновлениях ядра некоторое время, в результате чего не все мои dkms драйверы обновляются при обновлениях ядра.

Во-первых, я смог обойти эту проблему, переконфигурировав любые пакеты, которые dkms заставляли их перекомпилироваться для текущего ядра - например, это были мои драйверы видео AMD, которые потерпели неудачу (package == fglrx ):

Это, по крайней мере, настроит драйверы для текущей версии.

По сути, они ищут что-нибудь удивительное или неожиданное - например, пакеты, которые вы удалили, - или программное обеспечение, которое вы вручную установили в более ранней версии Ubuntu и которое может не работать с более новой версией. Особенно проверьте отметку даты в каталогах, которая может показать, что особенно старые пакеты могут быть из пакетов, установленных вручную.

В моем случае у меня была старая версия fglrx установки, которую я использовал для диагностики некоторых проблем год назад, и я просто переименовал ее. Удаление этого старого хлама заставило проблему уйти.

Если есть нежелательная почта, удалите ее (или переместите из этого каталога) - если там установлен пакет, установленный вручную, рассмотрите возможность его обновления или удаления и использования поддерживаемой версии.

Спасибо за это, у меня была проблема с nvidia-340 водителем .

Это обычно вызывается модулями /var/lib/dkms , у которых нет dkms.conf файла в их исходных подкаталогах - dkms ожидает этот файл, поэтому сообщит об ошибке, если он отсутствует, а затем может пропустить компиляцию некоторых допустимых модулей.

Чтобы найти нарушающий модуль, запустите этот короткий скрипт (спасибо Лекенштейну ):

Это выведет любые каталоги модулей dkms; Затем вы можете решить, удалять ли пакет, который их создал, или они были установлены или переименованы вручную, перемещать их в другое место или удалять.

Отлично. Другие ответы могут относиться к конкретным случаям, но это очень быстро продемонстрировало, где была проблема (и это действительно было проблемой, так как определенное программное обеспечение копировало старые установки в каталог /var/lib/dkms/*.old). Если nvidia является нарушителем, например, /var/lib/dkms/nvidia/396.24/source является выходом, проверьте, есть ли уже более новые версии, /var/lib/dkms/nvidia и удалите нарушающую версию . Благодарность! В моем случае нарушителем были open-vm-tools пакеты, и после очистки мне пришлось не забывать запускать apt auto-remove , так как проблема была в зависимости.

У меня была эта проблема с VirtualBox от Oracle ppa, а не с 12.04 LTS:

Я скопировал содержимое / var / lib / dkms в другой каталог в качестве резервной копии, затем удалил каталог vboxhost в / var / lib / dkms;

Затем я перенастроил пакет virtualbox следующим образом:

и это удалось сделать это:

Просто sudo dpkg-reconfigure virtualbox-4.2 сделал работу. Спасибо

Я тоже очень долго страдал от этой проблемы. Мне нужно переустанавливать драйвер NVIDIA каждый раз после обновления ядра и перезапуска. Недавно я начал изучать эту проблему. На самом деле, моя проблема заключается в том , что существует несколько модулей папки с одинаковым префиксом nvidia- при /usr/src/ и несколько папок с различными номерами версий под /var/lib/dkms/nvidia . После удаления старых версий обе следующие команды

Это работает для меня, но я должен был сделать apt-get install --reinstall dkms и dkms autoinstall после использования вашего метода . а затем установить драйверы NVIDIA . помогло только это решение - убедитесь, что он работает с sudo

Это случилось со мной однажды на рабочей станции Red Hat 7.5 с драйвером Nvidia. Я знаю, что это не Ubuntu, но это может кому-то помочь .

Удалите файлы Nvidia из dkms, а затем переустановите dkms:

Затем переустановите драйвер Nvidia

ВНИМАНИЕ, это сработало для меня, но, возможно, не является правильным способом ведения дел.

Dynamic Kernel Module Support (DKMS) — это фреймворк, который используется для генерации тех модулей ядра Linux, которые в общем случае не включены в дерево исходного кода. DKMS позволяет драйверам устройств автоматически пересобираться, когда ядро уже установлено.

Это означает, что пользователь может не ждать, пока какая-то компания, проект или сопроводитель пакета выпустит новую версию модуля. После введения хуков pacman пересборка модулей осуществляется автоматически во время обновления ядра.

Contents

Установка

Установите пакет dkms и заголовочные файлы требуемого ядра/ядер. Например, для ядра по умолчанию linux соответствует linux-headers . Другие ядра имеют собственные пакеты с заголовочными файлами.

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

Обновления

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

Использование

Использование DKMS вручную.

Автозавершение по Tab будет доступно после выполнения команды:

Список модулей

Чтобы увидеть текущее состояние модулей, версий и ядер внутри дерева, выполните:

Пересборка модулей

Пересборка всех модулей для текущего ядра:

или для конкретного ядра:

Сборка конкретного модуля для текущего ядра:

Сборка модуля для всех ядер:

Удаление модулей

Удаление модуля (старые автоматически не удаляются):

Если пакет 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 апгрейда,

Вы можете добавить больше таргетов в хук и сделать дополнительные копии хука, если в вашей система установлены другие ядра. Префикс 90- необходим для гарантированного запуска после хуков DPKMS.

Оригинал: How to build a kernel module with DKMS on Linux
Автор: Dan Nanni
Дата публикации: 8 апреля 2016 г.
Перевод: А.Панин
Дата перевода: 24 июля 2016 г.

Автоматическая сборка модуля ядра ОС с помощью фреймворка DKMS в Linux

Представьте, что вам понадобилось установить драйвер для недавно купленной графической карты, адаптера Wi-Fi или сетевой карты и по какой-то причине вы решили самостоятельно выполнить его компиляцию из доступных исходных кодов и установку (например, из-за того, что собранной версии драйвера, совместимой с вашей версией ядра ОС, попросту не существует, его собранная версия уже устарела или вам нужно использовать нестандартные параметры сборки). Для этого вы загрузили официальный исходный код этого драйвера, скомпилировали его версию, совместимую с вашей версией ядра ОС, установили скомпилированный модуль ядра ОС в систему и активировали его. Новое устройство было успешно распознано системой и начало корректно функционировать.

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

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

В подобной ситуации может оказаться весьма полезным фреймворк динамической поддержки модулей ядра DKMS (Dynamic Kernel Module Support). Фреймворк DKMS позволяет осуществлять автоматическую пересборку модулей ядра Linux с использованием текущего дерева его исходных кодов по мере обновления версий. Производители аппаратного обеспечения нередко выпускают драйверы в виде пакетов DKMS, поэтому пользователи могут свободно обновлять версии ядер своих систем, не заботясь о сборке совместимых версий драйверов устройств. Конечный пользователь может настроить DKMS с целью автоматической пересборки любого драйвера устройства или модуля, исходный код которого не является частью официального дерева исходных кодов ядра Linux.

В рамках данной статьи я постараюсь продемонстрировать методику настройки механизма автоматической пересборки модуля ядра ОС на основе фреймворка DKMS в Linux.

Установка компонентов фреймворка DKMS в Linux

Вы можете установить компоненты фреймворка DKMS в различных дистрибутивах Linux таким же образом, как показано ниже. Для корректной работы DKMS необходим сборочный инструментарий (включающий такие инструменты, как gcc , make ) и набор заголовочных файлов, причем оба этих компонента должны автоматически устанавливаться силами менеджера пакетов программного обеспечения дистрибутива.

Debian, Ubuntu и Linux Mint:

CentOS и RHEL:

В первую очередь следует подключить репозиторий EPEL, после чего достаточно выполнить следующую команду:

Автоматическая сборка модуля ядра ОС с помощью фреймворка DKMS

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

В данной статье я буду использовать в качестве примера модуль ядра ОС под названием ixgbe , который по своей сути является драйвером для сетевых карт производства компании Intel.

Во-первых, следует загрузить и распаковать архив исходного кода драйвера устройства в директорию /usr/src/<название-драйвера>-<версия> .

После этого нужно создать файл конфигурации с именем dkms.conf в этой же директории.

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

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

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

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

В данном случае также может использоваться более простая эквивалентная команда:

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

Наконец, нужно установить модуль, совместимый с текущей версией ядра ОС, в систему:

Разумеется, вы также можете воспользоваться более простой эквивалентной командой:

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

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

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

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

После того, как фреймворк 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 .

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

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

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

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

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

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

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

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

Заключение

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

Как вы знаете из статьи что такое ядро Linux, ядро является монолитным. Это значит, что весь исполняемый код сосредоточен в одном файле. Такая архитектура имеет некоторые недостатки, например, невозможность установки новых драйверов без пересборки ядра. Но разработчики нашли решение и этой проблеме, добавив систему модулей.

Ядро Linux позволяет драйверам оборудования, файловых систем, и некоторым другим компонентам быть скомпилированными отдельно - как модули, а не как часть самого ядра. Таким образом, вы можете обновлять драйвера не пересобирая ядро, а также динамически расширять его функциональность. А еще это значит, что вы можете включить в ядре только самое необходимое, а все остальное подключать с помощью модулей. Это очень просто.

Модули ядра Linux

В этой статье мы рассмотрим модули ядра Linux, основы работы с ними, просмотр уже загруженных модулей, загрузку, установку и отключение модулей. А также полное отключение, добавление в черный список и добавление новых модулей ядра.

Модули ядра Linux собираются только под определенную версию ядра, есть способ запуска модуля независимо от версии ядра, если они совместимы с помощью dkms, но об этом мы поговорим позже.

Находятся все модули в папке /lib/modules/. Учитывая, что модули рассчитаны только для определенной версии ядра, то в этой папке создается отдельная подпапка, для каждой установленной в системе версии ядра. В этой папке находятся сами модули и дополнительные конфигурационные файлы, модули отсортированы по категориям, в зависимости от назначения например:


Перед тем как переходить к практике, давайте коротко рассмотрим основные команды для управления модулями.

  • lsmod - посмотреть загруженные модули
  • modinfo - информация о модуле
  • insmod - загрузить модуль
  • rmmod - удалить модуль

Работа с модулями ядра Linux выполняется, в основном, с помощью этих команд, но могут использовать и другие.

Все модули

Такая задача возникает нечасто, но если вы хотите посмотреть все установленные модули ядра Linux в системе, делается очень просто. Все модули расположены в папке /lib/modules, а поэтому очень просто вычислить их все одной командой, или даже просто зайти в папку файловым менеджером и посмотреть.

В Ubuntu команда будет выглядеть вот так:

dpkg -S *.ko | grep /lib/modules


Можно смастерить такую конструкцию с помощью find:

find /lib/modules -name *.ko

Можем искать только для текущего ядра:

find /lib/modules/$(uname -r) -name *.ko


Также, все модули записаны в конфигурационном файле /lib/modules/modules.aliases, поэтому мы можем просто посмотреть его содержимое:

Если хотим проверить установлен ли определенный модуль ядра Linux, отфильтруем вывод любой из команд с помощью grep:

find /lib/modules -name *.ko | grep vbox


Что загружено?

Все информация о загруженных модулях хранится в файле /proc/modules, мы можем ее вывести командой:


Но для этого дела есть более цивилизованные методы. Это утилита lsmod и modinfo. Чтобы посмотреть загруженные модули ядра linux выполните:

Удобно проверять загружен ли модуль с помощью grep:

sudo lsmod | grep vbox

А более подробную информацию о каждом модуле можно получить с помощью утилиты modinfo:

Здесь вы можете увидеть файл модуля, его лицензию, автора и зависимости. Зависимости - это те модули, которые должны быть загружены для его нормальной работы. К сожалению, не для всех модулей доступно нормальное описание, но вы можете попробовать посмотреть описание зависимостей модуля.

Запуск модулей ядра

Загрузить модуль ядра Linux можно с помощью команд modprobe или insmod. Например, загрузим модуль vboxdrv

sudo modprobe vboxdrv

Чтобы загрузить модуль ядра linux с помощью insmod необходимо передать адрес файла модуля:

sudo insmod /lib/modules/4.1.20-11-default/weak-updates/misc/vboxdrv.ko

Напоминаю, что его можно узнать с помощью команды modinfo. Запуск модуля ядра Linux предпочтительно выполнять с помощью modprobe, поскольку эта команда не только находит файл модуля в файловой системе, но и загружает все его зависимости.

Удаление модулей ядра

Здесь аналогично две команды - modprobe, позволяет удалить модуль если ей передать опцию -r, а также есть команда rmmod. Начнем с modprobe:

sudo modprobe -r vboxdrv

Другая команда в этом случае выглядит немного проще:

sudo rmmod vboxdrv

Если вы получили ошибку во время выгрузки модуля, например: rmmod: ERROR: Module vboxdrv is in use by: vboxnetadp vboxnetflt, значит он еще используется другими модулями, и сначала нужно выгрузить их. В данном случае это vboxnetadp и vboxnetflt. Правильно отработавшая команда не должна ничего возвращать.

rmmod vboxnetadp vboxnetflt

Блокирование загрузки модулей

Иногда, во время загрузки системы для используемых нами устройств, загружаются не те модули ядра Linux, они либо не поддерживают нужную функциональность либо конфликтуют с другими модулями. Ярким примером можно назвать загрузку драйвера b43 вместо brcmsmac для беспроводных адаптеров Broadcom. Чтобы решить эту проблему вы можете добавлять модули в черный список. Для этого достаточно добавить одну строчку в файл /etc/modprobe.d/blacklist.conf:

sudo vi /etc/modprobe.d/blacklist.conf

Этот код добавит в черный список модуль b43.

Автозагрузка модулей

Кроме чёрного списка существует отдельный каталог, в котором можно настроить автоматическую загрузку модулей при старте системы. Это /etc/modules.load.d/. Этот каталог тоже содержит конфигурационные файлы с расширением *.conf, в которых перечислены все модули, которые надо загружать при старте системы. Для добавления своего модуля можно воспользоваться файлом /etc/modules.load.d/modules.conf. Например, добавим brcmsmac:

sudo vi /etc/modules.load.d/modules.conf

Установка модулей ядра Linux

Собранные для этой версии ядра модули вы можете просто скопировать в нужную папку, собственно, мы так и поступаем, когда собираем ядро из исходников. Но с проприетарными драйверами и другими внешними драйверами, не поставляемыми в комплекте с ядром дело обстоит иначе. Эти модули поддерживают несколько версий ядра, но для их установки используется специальная технология - DKMS (Dynamic Kernel Module Support). Причем модуль, установленный таким образом один раз, будет пересобираться для каждой новой версии ядра автоматически. Обычно такие модули поставляются в виде пакетов, которые устанавливаются как и все другие приложения пакетным менеджером. Ручная установка модулей с помощью dkms выходит за рамки данной статьи.

Выводы

Скорее всего, вам редко придется возиться с этими модулями. Но работа с модулями ядра будет необходима, если ваш дистрибутив не поддерживает аппаратное обеспечение вашего устройства из коробки, а также когда вы работаете со сторонним программным обеспечением, таким как VirtualBox, Vmware и т д. Но очень полезно знать как обращаться с модулями, когда вам нужно добавить или удалить их. Даже если у вас нет необходимости в этом сейчас, вы можете протестировать, как все работает, чтобы быть вооруженным потом.

Читайте также: