Модуль ядра — ключ к расширению возможностей Linux
Как вы знаете, или, может быть, слышали, ядро Linux изначально задумывалось монолитным - весь функционал отрабатывает в рамках одной программы:
/boot/vmlinuz-6.8.0-47-generic
Такая архитектура имеет ряд недостатков, например, невозможность установки новых драйверов без полной пересборки. Разработчики думали, думали и нашли решение этой проблеме, проработав систему модулей.
Сегодня ядро позволяет драйверам оборудования, файловых систем, и некоторым другим компонентам быть скомпилированными отдельно - в качестве модулей.
Модуль ядра - это программа, которая может отсоединяться от ядра и присоединяться к нему по необходимости, без повторной его компиляции и перезагрузки системы.
В общих терминах, модуль можно описать, как плагин, который расширяет функциональность ядра.
Такой подход не свел монолитность на нет - ядро таковым и осталось, за счет того, что работает вместе с модулями в одном адресном пространстве.
Находятся все модули в директории "
/lib/modules/". Учитывая то, что они собираются под каждую отдельную версию ядра, в этом каталоге выстраивается структура папок - по штуке на установленную версию:
$ cd /lib/modules
$ ls
6.10.1-061001-generic 6.11.0-9-generic 6.8.0-060800-generic 6.9.0-060900-generic
В директории целевого ядра находятся, как сами модули, так и дополнительные конфиги:
$ cd 6.8.12-060812-generic
$ ls
build
modules.builtin
modules.dep.bin
kernel
...
В ОС Linux все модули имеют расширение
.ko (kernel object) или
.ko.zst (модуль, сжатый с помощью алгоритма
Zstandard). Подгружаются они, как правило, на этапе бута системы.
Помните, я тут недавно жаловался на драйвер
i915, который в старых ядрах очень несовместим с некоторыми intel процессорами. Давайте посмотрим, где он засел:
$ find /lib/modules/$(uname -r) -name *.ko* | grep i915
/lib/modules/6.8.12-060812-generic/kernel/drivers/gpu/drm/i915/i915.ko.zst
Сегодня мы узнали, что такое модуль ядра. В следующей публикации дополнительно расширим спектр скиллов и рассмотрим основные команды администрирования модулей.
Linux++ | IT-Образование