Kernel/modules: различия между версиями
Илья Н. (обсуждение | вклад) мНет описания правки |
Нет описания правки |
||
(не показаны 4 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
__TOC__ | __TOC__ | ||
'''Модули ядра Linux''' — файлы с программным кодом, | '''Модули ядра Linux''' — файлы с программным кодом, расширяющим функциональность '''[[Kernel|ядра]]'''. Представляют собой драйверы устройств или обеспечивают поддержку файловых систем, сетевых протоколов и т.д. Могут быть встроены в ядро или загружаться динамически, автоматически с помощью '''[[udev]]''' или вручную, без необходимости перезапуска системы. | ||
{{Attention|Многие команды для работы с '''модулями ядра''' доступны только суперпользователю '''root'''!}} | {{Attention|Многие команды для работы с '''модулями ядра''' доступны только суперпользователю '''root'''!}} | ||
Строка 8: | Строка 8: | ||
Ядро Linux загружается из {{path|/boot/vmlinuz}}, содержит базовую функциональность и некоторые '''встроенные модули (builtin)''', список которых для совместимости содержится в каталоге {{path|/lib/modules/версия_ядра/modules.builtin}}: | Ядро Linux загружается из {{path|/boot/vmlinuz}}, содержит базовую функциональность и некоторые '''встроенные модули (builtin)''', список которых для совместимости содержится в каталоге {{path|/lib/modules/версия_ядра/modules.builtin}}: | ||
cat /lib/modules/$(uname -r)/modules.builtin | $ cat /lib/modules/$(uname -r)/modules.builtin | ||
Отдельные модули для '''ранней загрузки''' могут включаться в образ [[initrd|{{path|/boot/initrd.img}}]], чтобы просмотреть их список можно установить пакет '''{{pkg|dracut}}''' и выполнить команду {{cmd|lsinitrd}}: | Отдельные модули для '''ранней загрузки''' могут включаться в образ [[initrd|{{path|/boot/initrd.img}}]], чтобы просмотреть их список можно установить пакет '''{{pkg|dracut}}''' и выполнить команду {{cmd|lsinitrd}}: | ||
lsinitrd /boot/initrd.img | grep .ko | # lsinitrd /boot/initrd.img | grep .ko | ||
Либо распаковать файл {{path|/boot/initrd.img}} во временный каталог и работать с ним: | Либо распаковать файл {{path|/boot/initrd.img}} во временный каталог и работать с ним: | ||
mkdir tmp_init && cd tmp_init | # mkdir tmp_init && cd tmp_init | ||
lsinitrd --unpack /boot/initrd.img | # lsinitrd --unpack /boot/initrd.img | ||
Динамически загружаемые '''модули ядра''' хранятся в каталоге {{path|/lib/modules/версия_ядра}}, например: | Динамически загружаемые '''модули ядра''' хранятся в каталоге {{path|/lib/modules/версия_ядра}}, например: | ||
find /lib/modules/$(uname -r) -type f -name '*.ko*' | # find /lib/modules/$(uname -r) -type f -name '*.ko*' | ||
{{Note|Зависимости между модулями содержатся в файле {{path|/lib/modules/версия_ядра/modules.dep}}, псевдонимы — в файле {{path|/lib/modules/версия_ядра/modules.alias}}}} | {{Note|Зависимости между модулями содержатся в файле {{path|/lib/modules/версия_ядра/modules.dep}}, псевдонимы — в файле {{path|/lib/modules/версия_ядра/modules.alias}}}} | ||
==Установка модулей ядра== | ==Установка модулей ядра== | ||
{{Attention|Рекомендуется выполнить '''[[Обновление_ядра#Доустановка_модулей_ядра|обновление ядра]]''' до последней версии перед установкой модулей ядра.}} | {{Attention|Рекомендуется выполнить '''[[Обновление_ядра#Доустановка_модулей_ядра|обновление ядра]]''' до последней версии перед установкой модулей ядра.}} | ||
su - | $ su - | ||
apt-get update | # apt-get update | ||
update-kernel | # update-kernel | ||
reboot | # reboot | ||
'''Посмотреть список''' установленных пакетов, содержащих ядра и модули ядра: | |||
su - | $ rpm -qa kernel* | sort | ||
apt-get install kernel-modules-имя_модуля-un-def | |||
Для '''установки модуля''' из репозитория выполните команду (предварительно узнайте версию ядра командой {{cmd|uname -r}}): | |||
$ su - | |||
# apt-get install kernel-modules-имя_модуля-un-def | |||
Также для обновления ядра и установки модулей можно воспользоваться графическим интерфейсом центра управления '''[[Alterator-update-kernel|Альтератор]]'''. | Также для обновления ядра и установки модулей можно воспользоваться графическим интерфейсом центра управления '''[[Alterator-update-kernel|Альтератор]]'''. | ||
Строка 42: | Строка 46: | ||
Просмотреть '''загруженные модули''' можно командой: | Просмотреть '''загруженные модули''' можно командой: | ||
lsmod | $ lsmod | ||
или | или | ||
cat /proc/modules | $ cat /proc/modules | ||
Получить '''информацию о модуле''' можно командой {{cmd|modinfo имя_модуля}}, например: | Получить '''информацию о модуле''' можно командой {{cmd|modinfo имя_модуля}}, например: | ||
modinfo fuse | # modinfo fuse | ||
'''Вывод команды:''' | '''Вывод команды:''' | ||
Строка 76: | Строка 80: | ||
Чтобы сократить вывод команды, например, вывести только '''зависимости модуля''': | Чтобы сократить вывод команды, например, вывести только '''зависимости модуля''': | ||
modinfo -F depends имя_модуля | # modinfo -F depends имя_модуля | ||
Вывести '''параметры модуля''': | Вывести '''параметры модуля''': | ||
modinfo -F parm имя_модуля | # modinfo -F parm имя_модуля | ||
Показать параметры загруженного модуля может команда {{cmd|systool}}: | Показать параметры загруженного модуля может команда {{cmd|systool}}: | ||
systool -vm имя_модуля | $ systool -vm имя_модуля | ||
Также можно изучить каталог {{path|/sys/module}} для определения '''параметров загруженных модулей''': | Также можно изучить каталог {{path|/sys/module}} для определения '''параметров загруженных модулей''': | ||
ls /sys/module | $ ls /sys/module | ||
==Загрузка и выгрузка модулей== | ==Загрузка и выгрузка модулей== | ||
Строка 96: | Строка 100: | ||
'''Загрузку и выгрузку''' модулей ядра '''вручную''' можно выполнить с помощью команды {{cmd|modprobe}}. Она заменяет отдельные команды для '''вставки''' ({{cmd|insmod}}) и '''удаления модуля''' ({{cmd|rmmod}}), в том числе учитывая зависимости. С помощью {{cmd|modprobe}} можно передать параметры модулю [опционально]. Для '''вставки модуля''' выполнить: | '''Загрузку и выгрузку''' модулей ядра '''вручную''' можно выполнить с помощью команды {{cmd|modprobe}}. Она заменяет отдельные команды для '''вставки''' ({{cmd|insmod}}) и '''удаления модуля''' ({{cmd|rmmod}}), в том числе учитывая зависимости. С помощью {{cmd|modprobe}} можно передать параметры модулю [опционально]. Для '''вставки модуля''' выполнить: | ||
modprobe имя_модуля [параметр=значение] | # modprobe имя_модуля [параметр=значение] | ||
'''Возможные опции''': | '''Возможные опции''': | ||
Строка 108: | Строка 112: | ||
Для '''выгрузки модуля''' с зависимостями выполнить команду (опции те же): | Для '''выгрузки модуля''' с зависимостями выполнить команду (опции те же): | ||
modprobe -r имя_модуля | # modprobe -r имя_модуля | ||
Для хранения параметров загрузки и выгрузки модулей используется каталог {{path|/etc/modprobe.d}}. Конфигурационные файлы в этом каталоге (с суффиксом '''.conf''') могут содержать псевдонимы модулей, их параметры и '''черные списки (blacklist)''' запрещенных для загрузки модулей: | Для хранения параметров загрузки и выгрузки модулей используется каталог {{path|/etc/modprobe.d}}. Конфигурационные файлы в этом каталоге (с суффиксом '''.conf''') могут содержать псевдонимы модулей, их параметры и '''черные списки (blacklist)''' запрещенных для загрузки модулей: | ||
ls /etc/modprobe.d/*.conf | $ ls /etc/modprobe.d/*.conf | ||
cat /etc/modprobe.d/имя_файла.conf | $ cat /etc/modprobe.d/имя_файла.conf | ||
Для '''исключения модуля''' из загрузки: | Для '''исключения модуля''' из загрузки: | ||
echo "blacklist имя_модуля" >> /etc/modprobe.d/имя_файла_черного_списка.conf | # echo "blacklist имя_модуля" >> /etc/modprobe.d/имя_файла_черного_списка.conf | ||
Для включения модуля в процессе загрузки используется каталог {{path|/etc/modules-load.d}}. Конфигурационные файлы в этом каталоге (с суффиксом '''.conf''') содержат список модулей для автоматической загрузки. Для '''добавления модуля''' в список: | Для включения модуля в процессе загрузки используется каталог {{path|/etc/modules-load.d}}. Конфигурационные файлы в этом каталоге (с суффиксом '''.conf''') содержат список модулей для автоматической загрузки. Для '''добавления модуля''' в список: | ||
echo "имя_модуля" >> /etc/modules-load.d/имя_файла.conf | # echo "имя_модуля" >> /etc/modules-load.d/имя_файла.conf | ||
Также для обновления ядра и включения/выключения модулей можно воспользоваться графическим интерфейсом центра управления '''[[Alterator-update-kernel|Альтератор]]'''. | Также для обновления ядра и включения/выключения модулей можно воспользоваться графическим интерфейсом центра управления '''[[Alterator-update-kernel|Альтератор]]'''. | ||
Строка 130: | Строка 134: | ||
{{Category navigation|title=Kernel|category=Kernel|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=Kernel|category=Kernel|sortkey={{SUBPAGENAME}}}} | ||
{{Category navigation|title=Модули ядра|category=KernelModules|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 15:48, 21 мая 2025
Модули ядра Linux — файлы с программным кодом, расширяющим функциональность ядра. Представляют собой драйверы устройств или обеспечивают поддержку файловых систем, сетевых протоколов и т.д. Могут быть встроены в ядро или загружаться динамически, автоматически с помощью udev или вручную, без необходимости перезапуска системы.
Где находятся модули ядра
Ядро Linux загружается из /boot/vmlinuz, содержит базовую функциональность и некоторые встроенные модули (builtin), список которых для совместимости содержится в каталоге /lib/modules/версия_ядра/modules.builtin:
$ cat /lib/modules/$(uname -r)/modules.builtin
Отдельные модули для ранней загрузки могут включаться в образ /boot/initrd.img, чтобы просмотреть их список можно установить пакет dracut и выполнить команду lsinitrd:
# lsinitrd /boot/initrd.img | grep .ko
Либо распаковать файл /boot/initrd.img во временный каталог и работать с ним:
# mkdir tmp_init && cd tmp_init # lsinitrd --unpack /boot/initrd.img
Динамически загружаемые модули ядра хранятся в каталоге /lib/modules/версия_ядра, например:
# find /lib/modules/$(uname -r) -type f -name '*.ko*'
Установка модулей ядра
$ su - # apt-get update # update-kernel # reboot
Посмотреть список установленных пакетов, содержащих ядра и модули ядра:
$ rpm -qa kernel* | sort
Для установки модуля из репозитория выполните команду (предварительно узнайте версию ядра командой uname -r):
$ su - # apt-get install kernel-modules-имя_модуля-un-def
Также для обновления ядра и установки модулей можно воспользоваться графическим интерфейсом центра управления Альтератор.
Как посмотреть информацию о модулях
Просмотреть загруженные модули можно командой:
$ lsmod
или
$ cat /proc/modules
Получить информацию о модуле можно командой modinfo имя_модуля, например:
# modinfo fuse
Вывод команды:
filename:
- файл модуля, если модуль является встроенным, здесь будет написано
(builtin)
; name:
- имя модуля;
description:
- краткое описание модуля;
depends:
- зависимости модуля;
intree:Y
- модуль включен в дерево исходников;
vermagic:
- версия ядра, для которого предназначен модуль;
alias:
- псевдонимы модуля;
firmware:
- прошивка для устройства из каталога /lib/firmware;
sig_*:
иsignature:
- цифровая подпись;
parm:
- параметры модуля.
Чтобы сократить вывод команды, например, вывести только зависимости модуля:
# modinfo -F depends имя_модуля
Вывести параметры модуля:
# modinfo -F parm имя_модуля
Показать параметры загруженного модуля может команда systool:
$ systool -vm имя_модуля
Также можно изучить каталог /sys/module для определения параметров загруженных модулей:
$ ls /sys/module
Загрузка и выгрузка модулей
Автоматическая загрузка модулей выполняется с помощью udev.
Загрузку и выгрузку модулей ядра вручную можно выполнить с помощью команды modprobe. Она заменяет отдельные команды для вставки (insmod) и удаления модуля (rmmod), в том числе учитывая зависимости. С помощью modprobe можно передать параметры модулю [опционально]. Для вставки модуля выполнить:
# modprobe имя_модуля [параметр=значение]
Возможные опции:
- -i
- игнорировать команды конфигурационного файла в /etc/modprobe.d;
- -n
- только показать, не выполняя;
- -v
- подробный вывод.
Для выгрузки модуля с зависимостями выполнить команду (опции те же):
# modprobe -r имя_модуля
Для хранения параметров загрузки и выгрузки модулей используется каталог /etc/modprobe.d. Конфигурационные файлы в этом каталоге (с суффиксом .conf) могут содержать псевдонимы модулей, их параметры и черные списки (blacklist) запрещенных для загрузки модулей:
$ ls /etc/modprobe.d/*.conf $ cat /etc/modprobe.d/имя_файла.conf
Для исключения модуля из загрузки:
# echo "blacklist имя_модуля" >> /etc/modprobe.d/имя_файла_черного_списка.conf
Для включения модуля в процессе загрузки используется каталог /etc/modules-load.d. Конфигурационные файлы в этом каталоге (с суффиксом .conf) содержат список модулей для автоматической загрузки. Для добавления модуля в список:
# echo "имя_модуля" >> /etc/modules-load.d/имя_файла.conf
Также для обновления ядра и включения/выключения модулей можно воспользоваться графическим интерфейсом центра управления Альтератор.