Модули ядра
Глава 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).