Ядро 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).