Загружаемые модули ядра Linux
Ядро — это часть Linux, отвечающая за выполнение таких функций, как управление памятью, доступ к жестким дискам, сетевым картам и так далее. При этом ядро организовано по модульному принципу: сначала, то есть при запуске компьютера, загружается основное ядро, содержащее только те функции, которые требуются для старта системы.
Если в ходе работы понадобятся дополнительные функции (например, для работы с конкретным оборудованием), то необходимый код подключится к ядру как модуль. Если в течение некоторого времени эти дополнительные функции будут не нужны, модуль может быть выгружен из ядра.
Общие сведения и модулях ядра
Следующая команда выдает номер версии используемого ядра:
Все модули ядра расположены в директории /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 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 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 . Эта команда имеет два преимущества: сама ищет файл модуля (следует указать только название модуля), а при необходимости также загружает все модули, требуемые для работы.
Кроме того, эта команда позволяет выгрузить модуль из ядра:
Автоматическая загрузка модулей
Для того, чтобы определенные модули загружались во время старта системы, их можно прописать в файл /etc/modules . Каждый модуль должен быть записан в отдельной строке. Строки, начинающиеся со слова blacklist , запрещают загрузку модуля.
Кроме /etc/modules существует еще директория /etc/modprobe.d . В ней лежат отдельные конфигурационные файлы, аналогичные по сути /etc/modules . Кроме того, там есть файл blacklist.conf , в котором можно запретить загрузку модуля (вместо того, чтобы запрещать в /etc/modules ).
Директива blacklist запретит автоматическую загрузку модуля, но этот модуль всё равно может загрузиться, если от него зависит какой-то не запрещённый модуль или если он загружен вручную.
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.
- 1С:Предприятие (31)
- API (29)
- Bash (43)
- CLI (99)
- CMS (139)
- CSS (50)
- Frontend (75)
- HTML (66)
- JavaScript (150)
- Laravel (72)
- Linux (143)
- MySQL (76)
- PHP (125)
- React.js (66)
- SSH (27)
- Ubuntu (66)
- Web-разработка (509)
- WordPress (73)
- Yii2 (69)
- БазаДанных (95)
- Битрикс (66)
- Блог (29)
- Верстка (43)
- ИнтернетМагаз… (84)
- КаталогТоваров (87)
- Класс (30)
- Клиент (27)
- Ключ (28)
- Команда (68)
- Компонент (60)
- Конфигурация (59)
- Корзина (32)
- ЛокальнаяСеть (28)
- Модуль (34)
- Навигация (31)
- Настройка (137)
- ПанельУправле… (29)
- Плагин (33)
- Пользователь (26)
- Практика (99)
- Сервер (74)
- Событие (27)
- Теория (104)
- Установка (65)
- Файл (47)
- Форма (58)
- Фреймворк (192)
- Функция (36)
- ШаблонСайта (68)