Автозагрузка модуля ядра linux

Как добавить модуль ядра в автозагрузку в CentOS 7

Возникла необходимость в настройке vlan на сервере c CentOS 7. Чтобы настроить vlan, необходимо подгрузить соответствующий модуль 8021q для его работы. Загрузить его через консоль не составляет труда, это делается одной командой modprobe. А вот чтобы добавить его в автозапуск, пришлось немного почитать, пока не нашел точно, как это делать.

Если у вас есть желание научиться профессионально строить и поддерживать высокодоступные виртуальные и кластерные среды, рекомендую познакомиться с онлайн-курсом Администратор Linux. Виртуализация и кластеризация в OTUS. Курс не для новичков, для поступления нужно пройти вступительный тест.

В своей статье про настройку сети в centos я рассказывал, как настроить vlan. Там я вскользь упомянул про загрузку модуля, но не обратил внимание, что его желательно добавить в автозапуск, если требуется постоянная работа с vlan. Конкретно в данной ситуации меня интересовал модуль 8021q. Загрузить его можно командой:

Проверить, загружен ли он можно так:

После перезагрузки сервера, модуль не будет запущен. Чтобы это исправить, создаем в папке /etc/modules-load.d файл в формате module_name.conf. В моем случае это будет 8021q.conf. Внутри файла тоже должно быть название модуля и только оно, больше ничего — 8021q.

# echo 8021q >> /etc/modules-load.d/8021q.conf

После этого можно перезагрузиться и проверить, что модуль загружен автоматически.

Для справки, в Debian для автозагрузки модуля ядра, достаточно просто имя модуля добавить в файл /etc/modules:

Онлайн курс по Linux

  • Умение строить отказоустойчивые кластера виртуализации для запуска современных сервисов, рассчитанных под высокую нагрузку.
  • Будете разбираться в современных технологиях кластеризации, оркестрации и виртуализации.
  • Научитесь выбирать технологии для построения отказоустойчивых систем под высокую нагрузку.
  • Практические навыки внедрения виртуализации KVM, oVirt, Xen.
  • Кластеризация сервисов на базе pacemaker,k8s, nomad и построение дисковых кластеров на базе ceph, glaster, linstore.

Источник

Как добавить модуль ядра в автозагрузку?

Кхм. Путь к модулю? Попробуйте указать просто имя модуля.
Внимательнее читайте man 5 modules.

modprobe его подгружает?Тогда можно заюзать костыльный метод — написать скрипт, где прописать modprobe модуль, и этот скрипт засунуть в rc-update. Собственно, я ЕМНИП так и делал когда-то, когда надо было срочно зафигачить в автозагрузку модуль. Но это все же костыль, вестимо.

Зависит от дистрибутива. В Арче прописывается в /etc/rc.conf, в Дебиане в /etc/modules.

И да, не придумывай костыли для автозагрузки — разберись с тем, почему не грузит, если прописано там, где положено.

Читайте также:  Изменение переменной path linux

> если прописано там, где положено.

От дистрибутива зависит, ну.

А это дистрибутивозависимо. Вот щаз телепаты и отгадают какой дистр у ТС

Кстати да, чё-то я туплю, у товарища, судя по всему, Мандрива. А в ней /etc/modprobe.conf было когда-то. Сейчас не знаю.

Дополню. Дистр Mandriva .
Я кладу свой модуль который делает только printk о своём запуске, в папку / .
Получается, модуль лежит по пути /my_module.ko
Пробовал прописывать данный путь в /etc/modprobe.preload И /etc/modprobe.conf , никакого эффекта.
Затем заглянул вот сюда /etc/rc.modules

#!/bin/sh # (c) Mandriva, Chmouel Boudjnah # $Id$ # description: launch modules specified in /etc/modules inspired by a # Debian idea. MODULES=/etc/modprobe.preload MODULES_D=$MODULES.d # hardcoded from /etc/init.d/functions (to be faster and dash compliant) strstr() < [ "$" = "$1" ] && return 1 return 0 > cmdline=$(cat /proc/cmdline) if strstr "$cmdline" modprobedebug; then MODPROBE_OPTIONS="-v" export MODPROBE_OPTIONS gprintf "Pre-loading modules\n" fi echo_modules() < # Loop over every line while read module args do case "$module" in \#*|"") continue ;; esac echo $module done >TOLOAD="" for f in $MODULES $MODULES_D/*; do [ -f $f ] || continue NEW=$( (cat $f; echo) | echo_modules ) [ -n "$NEW" ] && TOLOAD="$TOLOAD $NEW" done if [ -n "$TOLOAD" ]; then logger -t $0 "Loading modules:"$TOLOAD /sbin/modprobe -a $TOLOAD 2>/dev/null fi 

Подумал что имена загружаемых модулей берутся из /etc/modules .. но там тоже прописан путь к моему модулю.
Что делать??

Источник

Модули ядра Linux

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

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

Модули ядра Linux

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

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

Читайте также:  Windows emulator для linux

Находятся все модули в папке /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 where is config file

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

Если вы получили ошибку во время выгрузки модуля, например: 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