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

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

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

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

ЗамечаниеЗамечание
 

Модули видеоплат, используемые для отображения интерфейса X Window, включены в пакет xorg-X11, а не в kernel; таким образом, эта глава на них не распространяется.

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

alias eth0 tulip

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

alias eth1 tulip

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

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

Набор команд для управления модулями ядра доступен, если установлен пакет module-init-tools. С помощью этих команд можно определить, был ли модуль успешно загружен, или попробовать различные модули с новым оборудованием.

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

Module                  Size  Used by
nfs                   218437  1
lockd                  63977  2 nfs
parport_pc             24705  1
lp                     12077  0
parport                37129  2 parport_pc,lp
autofs4                23237  2
i2c_dev                11329  0
i2c_core               22081  1 i2c_dev
sunrpc                157093  5 nfs,lockd
button                  6481  0
battery                 8901  0
ac                      4805  0
md5                     4033  1
ipv6                  232833  16
ohci_hcd               21713  0
e100                   39493  0
mii                     4673  1 e100
floppy                 58481  0
sg                     33377  0
dm_snapshot            17029  0
dm_zero                 2369  0
dm_mirror              22957  2
ext3                  116809  2
jbd                    71257  1 ext3
dm_mod                 54741  6 dm_snapshot,dm_zero,dm_mirror
ips                    46173  2
aic7xxx               148121  0
sd_mod                 17217  3
scsi_mod              121421  4 sg,ips,aic7xxx,sd_mod

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

Команда /sbin/lsmod выводит меньше информацию, и прочитать её проще, чем просмотреть /proc/modules.

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

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

/sbin/modprobe e100

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

Чтобы по мере того, как /sbin/modprobe выполняет команды, они выводились на экран, воспользуйтесь параметром -v. Например:

/sbin/modprobe -v e100

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

/sbin/insmod /lib/modules/2.6.9-5.EL/kernel/drivers/net/e100.ko
Using /lib/modules/2.6.9-5.EL/kernel/drivers/net/e100.ko
Symbol version prefix 'smp_'

Для загрузки модулей ядра также есть команда /sbin/insmod, однако она не разрешает зависимости. Таким образом, рекомендуется использовать команду /sbin/modprobe.

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

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

/sbin/rmmod e100

выгружает модуль ядра e100.

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

/sbin/modinfo [options] <module>

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