Мини-HOWTO: Модули ядра Linux

           [email protected]
         

Перевод: Станислав Рогин, SWSoft Pte Ltd.

История изменений
Издание 1.0Дата неизвестнаПод редакцией: rhw
Исходная версия

В этом документе описывается установка и использование модулей ядра Linux.


1. License

This document is covered by the terms of the GNU General Public Licence (GPL), and all terms and limitations therein apply.


2. Авторские права

Авторские права на русский перевод этого текста принадлежат © 2000 SWSoft Pte Ltd. Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но так или иначе автор текста и автор перевода желали бы знать о таких дистрибутивах.

Все переводы и производные работы, выполненные по документам Linux HOWTO должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO с которым можно связаться по адресу приведенному ниже.

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: , или к координатору русского перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу


3. Для чего создан этот документ

В процессе моей работы с Linux и модулями ядра, я столкнулся с тем, что ни в одном документе нет удовлетворительного описания того, как настроить и использовать модули ядра Linux. Советы, приведенные в этом документе, проверялись и использовались не один раз как на моей машине, так и на многих других машинах, разбросанных по Internet. Здесь я опишу, как пользоваться тем или иныи устройством, драйвер которого может быть собран только в виде модуля.

На моей машине установлен RedHat Linux 4.1, и я использовал именно этот дистрибутив для проверки советов, приведенных в этом документе. Я проверил эти советы и на различных версиях дистрибутива Slackware, а также на Debian. Все необходимые коррективы, связанные с различием дистрибутивов, также приведены в этом документе.

Внимание

Совсем недавно я проверил эти советы в RedHat 4.2, но получил разные результаты на практически одинаковых системах. Я пока еще не определил, в чем возникла проблема, поэтому на данный момент я не могу дать никаких гарантий работоспособности этих советов на вашей системе.


4. Обязательные условия

  • Для того, чтобы использовать советы, приведенные в этом документе, у вас должна быть работающая Linux-система, в которую вы можете войти как root, так как большинство шагов, описанных здесь, требуют прав именно этого пользователя.

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

  • Я предполагаю, что в вашей системе исходные тексты ядра находятся в каталоге /usr/src/linux. Также я предполагаю, что при исполнении любых команд, приведенных в это тексте, вы находитесь именно в этом каталоге.


5. Ускорение работы компилятора

Если на вашей машине 16 или больше Мегабайт ОЗУ, то вы можете использовать полезную вещь, которая позволит вам компилировать несколько модулей ядра одновременно. Это увеличит степень загрузки процессора при компиляции, но серьезно уменьшит время сборки модулей.

Перед тем, как использовать это ускорение, вам надо проверить объем оперативной памяти вашего компьютера, потому что, если вы установите слишком большое значение ускорения, компиляция может сильно замедлиться. Опыт показал, что оптимальное значение зависит от объема ОЗУ компьютера по следующей формуле (по крайней мере, для компьютеров с ОЗУ до 32 Мб. На компютерах с большим объемом памяти все может немного отличаться):

N = [Объем ОЗУ в Мегебайтах] / 8 + 1

Если вы не любите считать по формулам, то вы можете взять значения из следующей таблицы:

Таблица 1. Таблица коэффициентов

Объем ОЗУЗначение коэффициента
16 Мб3
24 Мб4
32 Мб5
40 Мб6
48 Мб7
56 Мб8
64 Мб9
80 Мб11
96 Мб13
112 Мб15
128 Мб17

После того, как вы выберете для себя значение коэффициента, откройте файл /usr/src/linux/Makefile и найдите строку, в которой написано следующее:

MAKE=make
    

И замените ее на:

MAKE=make -j N
    

где N - это значение коэффициента ускорения.


6. Пересобираем ядро для включения поддержки модулей

Почти все функции ядра могут быть собраны в виде модулей. Исключением является драйвер файловой системы, на которой находится корневой раздел (обычно это файловая система ext2)

Однако, некоторые вещи очень сложно настроить, если их поддержка собрана в виде модуля, и я бы рекомендовал встроить в ядро:

  • Драйверы сетевых карт Ethernet.

  • Драйверы SCSI CD-ROM.

С другой стороны, существуют такие комбинации драйверов, которые работают ТОЛЬКО если они собраны в виде модулей, особенно если их несколько:

  • Драйвер принтера на параллельном порту,

  • Драйвер внешнего дисковода, подключаемого к параллельному порту (такие как IOMEGA ZipDrive или JazzDrive, или BackPack CD-ROM), и

  • Демон PLIP

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

cd /usr/src/linux
make menuconfig
make dep clean modules modules_install zImage
    

После этого надо обновить зависимости модулей. Это делается следующей командой:

depmod -a
    

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

Я настоятельно рекомендую вам НЕ использовать автоматическую процедуру установки нового ядра в процедуру загрузки, потому что, если это ядро не загрузится, вам будет очень сложно восстановить систему без полной переустановки, что не очень приятно. По этой причине у меня в файле /etc/lilo.conf есть следующие строки:

image=/usr/src/linux/arch/i386/boot/zImage
  label=new
  alias=n
  read-only
  vga=ask
  optional
    

Здесь указано, что существует еще один ВАРИАНТ загрузки системы (который не будет работать, если образ этого ядра не существует), при котором ядро загружается из файла /boot/newlinux. При его запуске система предложит вам выбрать видеорежим, в котором будет загружаться ядро.

Я предполагаю, что у вас есть подобные строки в файле /etc/lilo.conf, и что вы поместили в вышеуказанное место правильно собранное ядро. Теперь его можно установить в процедуру загрузки командой:

lilo
    

После этого вам надо перейти к одному из следующих разделов (это зависит от того, какой дистрибутив у вас установлен):


6.1. Настройка поддержки модулей в дистрибутивах Debian и RedHat

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

Процедуры загрузки системы дистрибутивов Debian и RedHat идентичны, поэтому у них совпадает и процедура настройки модулей.

  1. Зайдите в систему в качестве root-а, и, при помощи вашего любимого текстового редактора, создайте файл /etc/rc.d/init.d/modules.init, написав в нем следующее:

    # Modules initialisation.
    # Инициализация модулей.
    #
    # Start up the module auto-loading daemon.
    # Запуск демона автозагрузки модулей
    /sbin/kerneld
    
    # Mount all currently unmounted auto-mounted partitions.
    # подключаем все неподключенные разделы.
    /sbin/mount -a
              
  2. После создания этого файла в качестве root-а сделайте следующее:

    cd /etc/rc.d
    chmod 755 init.d/*
    cd rc3.d
    ln -s ../init.d/modules.init 05modules.init
              

Теперь систему можно перезагрузить, и, если все пойдет хорошо, то модули будут прекрасно работать.


6.2. Настройка поддержки модулей в дистрибутиве Slackware

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

Теперь вам надо отредактировать файл /etc/rc.d/rc.M примерно следующим образом:

  1. В районе строки 18 есть раздел, содержащий следующее:

    # Экран отключается после 15 минут простоя
    # Screen blanks after 15 minutes idle time.
    /bin/setterm -blank 15
              

    Сразу после этого раздела вставьте следующее:

    # Load the kernel module auto-loader.
    # Загружаем демон автозагрузки модулей.
    /sbin/kerneld
              
  2. Примерно через 12 строк вы увидите следующее:

    # if there is no /etc/HOSTNAME, fall back on this default:
    # если файл /etc/HOSTNAME не существует, то используем значение по умолчанию:
              

    Непосредственно перед этими строками вставьте следующее (не забывайте про пустые строки):

    # Mount remaining unmounted auto-mount drives.
    # Подключаем оставшиеся неподключенные разделы.
    /sbin/mount -a
              

После внесения этих изменений запишите файл.

Более никаких изменений в Slackware не требуется.


6.3. Настройка поддержки модулей в других дистрибутивах

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

Точная последовательность действий в других дистрибутивах, конечно же, не может быть определена, но, скорее всего, она будет совпадать с одной из вышеописанных. Для того, чтобы определить, которая из них вам подходит, вы можете просмотреть содержимое каталога /etc/rc.d, следующим образом:

cd /etc/rc.d
ls -l *.d rc.*
      

В зависимости от того, что вы увидите на экране, у вас есть три варианта действий:

  1. Если в этом списке есть каталог init.d и несколько каталогов с именем вида rc?.d, где вместо знака вопроса стоят различные цифры, и в этом списке НЕТ файла с именем rc.M, то этот дистрибутив можно настроить так, как описано в главе "Настройка поддержки модулей в дистрибутивах Debian и RedHat".

  2. Если в этом списке НЕТ каталога init.d, но есть файл rc.M, то этот дистрибутив можно настроить так, как описано в главе "Настройка поддержки модулей в дистрибутиве Slackware".

  3. Если ваш список не удовлетворил предыдущим двум вариантам, то процедура загрузки вашей системы не описана в этом HowTo. В этом случае вы можете связаться с автором этого документа, и он вам поможет настолько, насколько это возможно.