Загружаемые модули ядра Linux

26.02.2020

Теги: CLILinuxКомандаКонфигурацияМодульНастройка

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

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

Общие сведения и модулях ядра

Следующая команда выдает номер версии используемого ядра:

$ uname -r
5.3.0-40-generic

Все модули ядра расположены в директории /lib/modules/версия:

$ ls /lib/modules/
5.0.0-23-generic  5.0.0-37-generic  5.3.0-28-generic
5.0.0-35-generic  5.3.0-26-generic  5.3.0-40-generic
$ ls -l /lib/modules/5.3.0-40-generic/
итого 5688
lrwxrwxrwx  1 root root      39 фев  3 15:07 build -> /usr/src/linux-headers-5.3.0-40-generic
drwxr-xr-x  2 root root    4096 фев  3 15:07 initrd
drwxr-xr-x 17 root root    4096 фев 23 09:43 kernel
-rw-r--r--  1 root root 1372092 фев 26 09:33 modules.alias
-rw-r--r--  1 root root 1347534 фев 26 09:33 modules.alias.bin
-rw-r--r--  1 root root    7846 фев  3 15:07 modules.builtin
-rw-r--r--  1 root root    9943 фев 26 09:33 modules.builtin.bin
-rw-r--r--  1 root root  614737 фев 26 09:33 modules.dep
-rw-r--r--  1 root root  856441 фев 26 09:33 modules.dep.bin
-rw-r--r--  1 root root     353 фев 26 09:33 modules.devname
-rw-r--r--  1 root root  218677 фев  3 15:07 modules.order
-rw-r--r--  1 root root     830 фев 26 09:33 modules.softdep
-rw-r--r--  1 root root  613152 фев 26 09:33 modules.symbols
-rw-r--r--  1 root root  746094 фев 26 09:33 modules.symbols.bin
drwxr-xr-x  3 root root    4096 фев 23 09:43 vdso

Модули ядра имеют зависимости друг от друга, которые прописаны в файле /lib/modules/версия/modules.dep. Данный файл формируется командой depmod, которая при выполнении просматривает структуру каталогов /lib/modules/версия/ и формирует информацию о зависимостях.

Команды управления модулями

Есть четыре команды для работы с модулями ядра

  • lsmod — список всех загруженных модулей
  • modinfo — полная информацию о модуле
  • modprobe (или insmod) — загрузить модуль
  • rmmod — выгрузить модуль

Просмотреть список загруженных в данный момент модулей

$ lsmod
Module                  Size  Used by
btrfs                1236992  0
xor                    24576  1 btrfs
zstd_compress         163840  1 btrfs
raid6_pq              114688  1 btrfs
ufs                    81920  0
qnx4                   16384  0
.....................................
pata_acpi              16384  0
video                  49152  0

Если счетчик Used By равен нулю, то модуль ядра никем не используется — его можно выгрузить.

$ sudo rmmod video

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

$ sudo insmod /lib/modules/5.3.0-40-generic/kernel/drivers/acpi/video.ko

Следующая команда выдает информацию об одном модуле

$ modinfo vboxguest
filename:       /lib/modules/5.3.0-40-generic/kernel/virtualbox-guest/vboxguest.ko
version:        6.0.14_Ubuntu r132055
license:        GPL
description:    Oracle VM VirtualBox Guest Additions for Linux Module
author:         Oracle Corporation
srcversion:     DAB7B6D4437DA673E236BB3
alias:          pci:v000080EEd0000CAFEsv00000000sd00000000bc*sc*i*
depends:        
retpoline:      Y
name:           vboxguest
vermagic:       5.3.0-40-generic SMP mod_unload 
signat:         PKCS#7
signer:         
sig_key:        
sig_hashalgo:   md4

Как правило, для загрузки модулей ядра применяется не insmod, a modprobe. Эта команда имеет два преимущества: сама ищет файл модуля (следует указать только название модуля), а при необходимости также загружает все модули, требуемые для работы.

$ sudo modprobe video

Кроме того, эта команда позволяет выгрузить модуль из ядра

$ sudo modprobe -r video

Автоматическая загрузка модулей

Для того, чтобы определенные модули загружались во время старта системы, их можно прописать в файл /etc/modules. Каждый модуль должен быть записан в отдельной строке. Строки, начинающиеся со слова blacklist, запрещают загрузку модуля.

Кроме /etc/modules существует еще директория /etc/modprobe.d. В ней лежат отдельные конфигурационные файлы, аналогичные по сути /etc/modules. Кроме того, там есть файл blacklist.conf, в котором можно запретить загрузку модуля (вместо того, чтобы запрещать в /etc/modules).

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

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

install имя_модуля /bin/true

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

Поиск: CLI • Linux • Команда • Конфигурация • Модуль • Настройка • Ядро • modprode • lsmod

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.