|
| |||||||||||||||||||||||||||
| |||||||||||||||||||||||||||
Как kerneld определяет, какой модуль загружать?Несмотря на то, что kerneld содержит в себе встроенную информацию о наиболее распространенных типах модулей, иногда возникает ситуация когда kerneld не будет знать, как обработать запрос ядра. Это бывает в том случае, когда запрос идет к устройствам типа CD-ROM или сетевых плат, и существует несколько модулей, которые можно загрузить. Запрос, который kerneld получает от ядра, приходит при обращении к одному из следующих пунктов:
kerneld определяет, какой модуль должен быть загружен, просматривая файл /etc/conf.modules [1] Существует два вида строк в этом файле: пути (где находятся файлы модулей), и алиасы (aliases) (какие модули для чего предназначены). Если у вас еще нет этого файла, его можно создать при помощи команд
Если вы хотите добавить еще один путь к стандартным, вы должны также включить все стандартные пути, так как директива path в файле /etc/conf.modules заменит все известные по умолчанию пути! Обычно нет необходимости вручную добавлять какие-либо пути, так как встроенного набора путей достаточно для "обычных" настроек (и не совсем обычных...), это точно! С другой стороны, если же вы хотите просто добавить псевдоним или директиву options (опции), то ваши новые строчки в /etc/conf.modules будут добавлены к тому, что уже известно modprobe. Если вы хотите переопределить псевдоним или опции, ваши новые строки в /etc/conf.modules, Блочные устройстваЕсли вы запустите /sbin/modprobe -c, вам будет выдан список всех модулей, которые известны kerneld, и какие запросы, какому модулю соответствуют. Например, запрос, из-за которого загружается драйвер флоппи-дисковода, направлен к блочному устройству с главным (major) номером 2:
Почему блочное устройство с главным номером 2? Потому что устройства флоппи-дисководов /dev/fd* имеют главный номер 2 и являются блочными
Символьные устройстваСимвольные устройства работают тем же образом. Например, драйвер стриммера ftape использует главный номер устройства 27:
Но, kerneld по умолчанию не знает о драйвере ftape - его не было в списке по команде /sbin/modprobe -c. Поэтому для того, чтобы kerneld загружал драйвер ftape, мне нужно добавить строку к файлу конфигурации kerneld (/etc/conf.modules):
Сетевые устройстваВы также можете использовать имя устройства вместо char-major-xxx / block-major-yyy. Это очень часто используется для драйверов сети. Например, для NE2000-совместимой сетевой карты, работающей под именем eth0, будет следующая строка:
Если нужно передать какие-либо параметры драйверу - например, передать модулю, какое прерывание (IRQ) использует сетевая плата, добавьте строку опций ("options"):
В результате этого kerneld загрузит драйвер платы NE2000 при помощи команды
Конечно, в любом случае, набор возможных опций зависит от конкретного модуля, который вы загружаете. Формат кода программы (Binary formats)Форматы кода обрабатываются почти также. Когда бы вы ни пытались запустить программу, формат которой неизвестен ядру, kerneld получает запрос на binfmt-xxx, где xxx - это номер вида кода, определенный из нескольких первых байтов кода. Таким образом, строка настройки kerneld, для поддержки загрузки модуля binfmt_aout для формата программ ZMAGIC (a.out), будет следующая:
так как магическое число (magic number) (см. /etc/magic) для формата ZMAGIC - 267. (Если вы внимательно рассмотрите /etc/magic, вы увидите число 0413, но числа в /etc/magic находятся в восьмеричном формате, kerneld использует десятичные, а восьмеричное 0413 = десятичному 267). На самом деле существует три слегка отличающихся варианта кода программ a.out (NMAGIC, QMAGIC и ZMAGIC), поэтому для полной поддержки модуля binfmt_aout необходимы три строки:
Форматы кода a.out, Java и iBCS распознаются kerneld автоматически, без какой либо дополнительной настройки. Протокол линии (slip, cslip и ppp)Протоколы линии запрашиваются через tty-ldisc-x, где x обычно 1 (для SLIP) или 3 (для PPP). Оба эти варианта известны kerneld по умолчанию. Продолжая разговор о PPP, если вы хотите, чтобы kerneld загружал модуль сжатия данных bsd_comp для PPP, то вам необходимо добавить следующие строки к файлу /etc/conf.modules:
Семейства сетевых протоколов (IPX, AppleTalk, AX.25)Некоторые сетевые протоколы могут быть также загружены в виде модулей. Ядро запрашивает у kerneld загрузку семейства протоколов (напр. IPX) при помощи запроса net-pf-X, где X это число, означающее номер необходимого семейства протоколов. Например, net-pf-3 означает AX.25, net-pf-4 - IPX и net-pf-5 - это AppleTalk. (Эти номера определяются константами AF_AX25, AF_IPX и т.п., заданными в исходных текстах ядра в файле include/linux/socket.h). Поэтому, для автозагрузки модуля IPX, вам необходимо добавить следующее в файл /etc/conf.modules:
Смотрите также ниже раздел Общие проблемы для информации о том, как можно избежать некоторых надоедливых сообщений во время загрузки системы, связанных с неопределенным семейством протоколов Файловые системыЗапросы kerneld, требующие файловую систему, представляют собой простое название типа файловой системы. Наиболее часто это используется для загрузки модуля isofs для файловых систем CD-ROM-ов, например, файловых систем типа "iso9660":
Примечания
| |||||||||||||||||||||||||||
|
CITForum © 1997–2025