Linux модулями могут быть

Немного о модулях ядра Linux

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

Модули так же могут иметь параметры, позволяющие управлять их поведением. Часто небольшие проблемы с оборудованием можно решить правильной настройкой модулей ядра. Далее посмотрим как можно получать информацию о модулях и их параметрах и как их настраивать.

Начнём с того что получим список модулей, используемых системой. Список загруженных модулей покажет команда:

Так же список загруженный модулей доступен в файле «modules», виртуальной файловой системы «proc»:

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

Любой модуль ядра так же имеет «проекцию» в виртуальной файловой системе «sys». Эта проекция доступа как директория по пути «/sys/module/». Важно что такую проекцию имеют не только загруженные, но и встроенные модули ядра. Так что полный список используемых модулей, а не только загруженных, можно получить командой:

Через sysfs так же можно получить доступ к настройкам модуля. Если у модуля есть какие-либо настройки то они доступны в виде файлов в поддиректории «parameters», директории модуля. Например список параметров модуля «acpi» можно увидеть командой:

ls /sys/module/acpi/parameters/

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

Для загружаемых модулей список параметров можно получить из вывода команды «modinfo». Оттуда же можно получить и описание этих параметров, описание модуля и другую информацию. Например для получения сведений о модуле «btusb» нужно выполнить следующую команду:

Для встроенных модулей описание параметров так легко получить не получится и придётся воспользоваться поиском в интернете. Вообще при наличии большого количества модулей найти тот, что потенциально связан с проблемой, достаточно трудно. Автор этих строк написал небольшой скрипт на Perl для визуализации используемых модулей и их параметров. Код доступен в репозитории на github.

Читайте также:  Linux install chrome browser

Список модулей и их параметров в окне perl Kernel Module Info

Разобравшись с просмотром списка параметров и их описаний у модулей перейдём к их изменению. Обычно значения указываются при загрузке модуля примерно так:

modprobe btusb enable_autosuspend=N

В данном примере загружается модуль «btusb» с параметром «enable_autosuspend=N». Если модуль уже загружен то выполнение этой команды ни к чему не приведёт. Однако можно попытаться изменить параметр уже загруженного модуля командой вроде:

echo N | sudo tee -a /sys/module/btusb/parameters/enable_autosuspend

Однако не все модули допускают изменение параметров «на лету». В этом случае будет выдана ошибка «Permission denied». В такой ситуации можно попрообвать выгрузить модуль и загрузить заново с нужными параметрами, однако зачастую такие модули и выгрузить проблематично. Либо внести изменения в конфигурацию системы и перезагрузить машину.

Если модуль загружаемый то можно создать файл с произвольным именем в директории «/etc/modprobe.d/» (например «99_my.conf») где каждая строчка будет иметь вид:

options имя_модуля параметры
options btusb enable_autosuspend=N

Эти же файлы могут использоваться не только для указания параметров модулей. Подробнее можно прочитать в man-странице «modprobe.d».

Так же параметры модулей можно передавать в командной строке ядра. Этот способ более универсален, так как позволяет управлять параметрами ещё и встроенных модулей. Дяя указания параметра модуля в командную строку ядра нужн добавить элемент вида:

имя_модуля.название_параметра=значение_параметра

Всё тот же пример с модулем btusb и параметром enable_autosuspend будет выглядеть так:

В Debian и Ubuntu параметры ядра лучше всего дописывать в файле «/etc/default/grub» в строку «GRUB_CMDLINE_LINUX». После изменения этого параметра необходимо обновить всю конфигурацию загрузчика:

На этом пока всё. Надеемся что эта информация была полезна.

Источник

Модули ядра Linux

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

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

Модули ядра Linux

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

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

Читайте также:  Connect linux and mac

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

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

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

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

Все модули

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

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

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

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

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

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:

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

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

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

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

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

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

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

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

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

Читайте также:  Расширение файла скрипта linux

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

Если вы получили ошибку во время выгрузки модуля, например: 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 и т д. Но очень полезно знать как обращаться с модулями, когда вам нужно добавить или удалить их. Даже если у вас нет необходимости в этом сейчас, вы можете протестировать, как все работает, чтобы быть вооруженным потом.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

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