Глава 24. Модули ядра

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

Механизм, реализующий динамическую загрузку модулей в потоке ядра, называется kmod. Модули загружаются, только если они нужны. Когда ядро запрашивает модуль, он загружается вместе с модулями, от которых он зависит.

В Red Hat Linux также включена задача cron, удаляющая все неиспользуемые модули каждые десять минут. Эта задача cron описана в файле /etc/cron.d/kmod. Обратитесь к разделу Cron в Главе 22 за дополнительной информацией о задачах cron.

Когда вы устанавливаете Red Hat Linux, выполняется обнаружение оборудование, а вы определяете, как планируется использовать систему и какие программы должны быть загружены. В зависимости от найденного оборудования и определённых вами параметров системы, программ установки решает какие модули необходимо загружать при загрузке. Программа установки незаметно для вас настраивает механизм динамической загрузки. Если вы соберёте собственное ядро, вы должны сделать это самостоятельно.

Если вы добавите новое оборудование после установки, для поддержки которого необходим модуль ядра, вы должны настроить механизм динамической загрузки. Программа Kudzu обычно определяет современное оборудование. Вы можете также добавить новый драйвер, отредактировав файл конфигурации модулей, /etc/modules.conf.

Например, если в вашем компьютере в момент установки был установлен сетевой адаптер SMC EtherPower 10 PCI, файл конфигурации модулей будет содержать следующую строку:

alias eth0 tulip

Если вы установите после установки такой же сетевой адаптер, добавьте следующую строку в /etc/modules.conf:

alias eth1 tulip

В Официальном справочном руководстве по Red Hat Linux вы найдете алфавитный перечень модулей ядра и оборудования, поддерживаемого этими модулями.

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

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

Команда /sbin/lsmod выводит список загруженных в данный момент модулей.

Пример 24-1. Пример выполнения команды lsmod

Module                  Size  Used by
sr_mod                 15264   0 (autoclean)
mga                    95984   1
agpgart                23392   3
nfs                    79008   1 (autoclean)
lockd                  52464   1 (autoclean) [nfs]
sunrpc                 61328   1 (autoclean) [nfs lockd]
autofs                 11264   4 (autoclean)
3c59x                  25344   1 (autoclean)
ipchains               38976   0 (unused)
ide-scsi                8352   0
scsi_mod               95104   2 [sr_mod ide-scsi]
ide-cd                 26848   0
cdrom                  27232   0 [sr_mod ide-cd]
usb-uhci               20720   0 (unused)
usbcore                49664   1 [usb-uhci]

Как показано в Примере 24-1, команда lsmod выводит размер, счётчик использования, и модули, связанные с каждым из загруженным.

Чтобы загрузить модуль ядра, выполните команду /sbin/insmod, указав в параметрах имя модуля ядра. По умолчанию, insmod пытается загрузить модуль из каталогов, расположенных в /lib/modules/<kernel-version>/kernel/drivers. Для каждого типа модуля здесь создан отдельный каталог, например, в каталоге net находятся сетевые драйвера. Некоторые модули ядра имеют зависимости — перед ними должны быть загружены другие модули. Чтобы разрешить эти зависимости, вы можете либо загрузить модули, от которых зависит нужный вам, а затем загрузить его, или воспользоваться командой /sbin/modprobe передав в параметрах имя модуля, который будет загружен вместе со своими зависимостями.

Например, команда

/sbin/modprobe tulip

загружает модуль сетевого интерфейса tulip.

Чтобы выгрузить модули ядра, выполните команду /sbin/rmmod указав в параметрах имя модуля. Команда rmmod выгружает модули, если не используются они непосредственно и модули от них зависимые.

Например, команда

/sbin/rmmod tulip

выгружает модуль сетевого интерфейса tulip.

Другой полезной командой управления модулями ядра является modinfo. Вы можете выполнить команду /sbin/modinfo чтобы просмотреть информацию о модуле ядра. Общий синтаксис приведен ниже:

/sbin/modinfo [options] <module>

Параметры командной строки включают в себя -d, при этом отображается короткое описание модуля и -p, который показывает параметры, поддерживаемые модулем. Полный список параметров вы найдете на странице руководства modinfo (man modinfo).