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.

Источник

Kernel module (Русский)

Состояние перевода: На этой странице представлен перевод статьи Kernel module. Дата последней синхронизации: 29 декабря 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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

Чтобы создать модуль ядра, вы можете прочитать The Linux Kernel Module Programming Guide. Модуль можно сконфигурировать как вкомпилированный, а можно как загружаемый. Чтобы иметь возможность динамически загружать или выгружать модуль, его необходимо сконфигурировать как загружаемый модуль в настройке ядра (в этом случае строка, относящаяся к модулю должна быть отмечена буквой M ).

Читайте также:  Hex редактор linux kde

Получение информации

Модули хранятся в /usr/lib/modules/kernel_release . Чтобы узнать текущую версию вашего ядра, используйте команду uname -r .

Примечание: Часто в названии модулей используются подчёркивания ( _ ) или дефисы ( — ); однако, эти символы взаимозаменяемы как при использовании команды modprobe , так и в конфигурационных файлах в /etc/modprobe.d/ .

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

Чтобы показать информацию о модуле:

Чтобы вывести список опций, с которыми загружен модуль:

$ systool -v -m module_name 

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

Чтобы отобразить настройки для отдельного модуля:

$ modprobe -c | grep module_name 

Чтобы узнать зависимости модуля (или его псевдонима), включая сам модуль:

$ modprobe --show-depends module_name 

Автоматическая загрузка модулей с помощью systemd

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

Чтобы дополнительные модули ядра загружались автоматически в процессе загрузки, создаются статические списки в конфигурационных файлах в директории /etc/modules-load.d/ . Каждый конфигурационный файл называется по схеме /etc/modules-load.d/program.conf . Эти файлы просто содержат список названий модулей ядра, которые необходимо грузить, разделённых переносом строки. Пустые строки и строки, в которых первым непробельным символом является # или ; , игнорируются.

/etc/modules-load.d/virtio-net.conf
# Load virtio_net.ko at boot virtio_net

Смотрите modules-load.d(5) для дополнительной информации.

Управление модулями вручную

Управление модулями ядра производится с помощью утилит, предоставляемых пакетом kmod . Вы можете использовать эти утилиты вручную.

Примечание: Если вы обновили ваше ядро, но ещё не перезагрузились, modprobe не сработает без каких либо уведомлений об ошибках и завершится с ошибкой 1, потому что путь /usr/lib/modules/$(uname -r)/ больше не существует. Проверьте вручную существование этого пути, если modprobe не работает, чтобы убедиться, что это ваш случай.

Загрузка модуля из другого места (для тех модулей, которых нет в /usr/lib/modules/$(uname -r)/ ):

# insmod имя_файла [параметры]
# modprobe -r имя_модуля 

Альтернативный вариант выгрузки модуля:

Настройка параметров модуля

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

Вручную при загрузке с помощью modprobe

Основной способ передать параметры модулю — использовать команду modprobe. Параметры указываются с помощью простых присваиваний ключ=значение :

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

С помощью файлов в /etc/modprobe.d/

Файлы в директории /etc/modprobe.d/ можно использовать для передачи настроек модуля в udev, который через modprobe управляет загрузкой модулей во время загрузки системы. Конфигурационные файлы в этой директории могут иметь любое имя, оканчивающееся расширением .conf . Синтаксис следующий:

/etc/modprobe.d/myfilename.conf
options имя_модуля имя_параметра=значение_параметра
# On ThinkPads, this lets the 'thinkfan' daemon control fan speed options thinkpad_acpi fan_control=1

Примечание: Если какой-либо из затрагиваемых модулей загружается из initramfs, тогда вам придётся добавить соответствующий файл .conf в массив FILES в файле mkinitcpio.conf или использовать хук modconf для добавления файла .conf в образ initramfs. Чтобы посмотреть содержимое образа initramfs, можно использовать lsinitcpio.

Читайте также:  Linux не работает bash

С помощью командной строки ядра

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

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

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

Создание псевдонимов

Псевдонимы (алиасы) — это альтернативные названия для модуля. Например: alias my-mod really_long_modulename означает, что вы можете использовать modprobe my-mod вместо modprobe really_long_modulename . Вы также можете использовать звёздочки в стиле shell, то есть alias my-mod* really_long_modulename будет иметь тот же эффект, что и modprobe my-mod-something . Создайте алиас:

alias mymod really_long_module_name

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

# Prevent Bluetooth autoload alias net-pf-31 off

Запрет загрузки

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

Некоторые модули загружаются как часть initramfs. Команда mkinitcpio -M напечатает все автоматически обнаруженные модули: для предотвращения initramfs от загрузки каких-то из этих модулей, занесите их в чёрный список в файле .conf в каталоге /etc/modprobe.d/ , и хук modconf добавит этот файл в образ initramfs при его генерации. Команда mkinitcpio -v отобразит все модули, которые необходимы некоторым хукам (например, filesystems хук, block хук и т.д.). Если вы не используете хук modconf , то не забудьте добавить нужный вам .conf файл в секцию FILES в /etc/mkinitcpio.conf . После того, как вы запретили загрузку модулей, пересоберите initramfs, а затем перезагрузитесь.

С помощью файлов в /etc/modprobe.d/

Создайте .conf файл в /etc/modprobe.d/ и добавьте строку для каждого модуля, который вы хотите запретить, используя ключевое слово blacklist . Например, если вы хотите запретить загружать модуль pcspkr :

# Do not load the 'pcspkr' module on boot. blacklist pcspkr

Примечание: Команда blacklist запретит автоматическую загрузку модуля, но этот модуль всё равно может загрузиться, если от него зависит какой-то не запрещённый модуль или если он загружен вручную.

Можно изменить такое поведение. Команда install заставляет modprobe запускать вашу собственную команду вместо вставки модуля в ядро как обычно. Поэтому вы можете насильно сделать так, чтобы модуль никогда не загружался:

/etc/modprobe.d/blacklist.conf
. install имя_модуля /bin/true .

С помощью командной строки ядра

Совет: Это может очень помочь, если неправильный модуль не даёт загрузиться вашей системе.

Читайте также:  Telegram arch linux install

Вы также можете запрещать модули из загрузчика.

Просто добавьте module_blacklist=модуль1,модуль2,модуль3 в вашем загрузчике в строку ядра, как описано в статье Параметры ядра.

Примечание: Когда вы запрещаете несколько модулей, обратите внимание, что они разделяются только запятой. Пробелы или что-либо ещё могут нарушить синтаксис.

Решение проблем

Модули не загружаются

В случае, если конкретный модуль не загружается и журнал загрузки (доступный с помощью journalctl -b ) говорит, что модуль в чёрном списке, но в директории /etc/modprobe.d/ нет соответствующей записи, проверьте другую папку-источник modprobe в /usr/lib/modprobe.d/ на записи в чёрном списке.

Модуль не будет загружен, если строка «vermagic», содержащаяся в модуле ядра, не соответствует значению текущего запущенного ядра. Если достоверно известно, что модуль совместим с текущим запущенным ядром, проверку «vermagic» можно отключить с помощью modprobe —force-vermagic .

Важно: Игнорирование проверок версии для модуля ядра может привести к сбою ядра или к неопределённому поведению системы из-за несовместимости. Используйте —force-vermagic только с особой осторожностью.

Смотрите также

Источник

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

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

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

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

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

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

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

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

Кстати да, чё-то я туплю, у товарища, судя по всему, Мандрива. А в ней /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 .. но там тоже прописан путь к моему модулю.
Что делать??

Источник

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