Опубликован: 21.11.2006 | Уровень: специалист | Доступ: платный
Лекция 2:

Использование ОС Linux в качестве сервера электронной почты

Модули ядра

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

Модули могут добавляться в ядро с помощью команды insmod. Формат команды insmod представлен ниже

insmod [-fkmpsxXv] [-o module_name] object_file [symbol = value ...].

Программа insmod пытается связать код модуля, содержащийся в object_file, с запущенным ядром системы. В табл. 2.5 показаны параметры командной строки, которые можно задавать с командой insmod.

Таблица 2.5. Параметры командной строки для команды insmod
Параметр Описание
- f Пытается загрузить модуль даже при несоответствии версии ядра
- k Устанавливает флаг автоматической очистки
- m Выводит карту загрузки
- o Выводит название модуля в явном виде
- p Тестирует модуль
- s Записывает все действия в syslog
- v Режим с высокой детализацией вывода
- X Экспортирует все внешние символы модуля
- x Не экспортирует внешние символы модуля

Программа insmod связывает модульный код с кодом ядра только на определенное время. При перезагрузке сервера под управлением Linux ядро загружается без добавленных ранее модулей. Решение этой проблемы достигается применением программы modprobe.

modprobe module.o [symbol=value ...] 
modprobe -t -tag pattern
modprobe -a -t tag pattern
modprobe -1 [ -t tag ] pattern
modprobe -r module
modprobe -c

В первом случае команда modprobe используется в формате для загрузки отдельного модуля в ядро. Если модулю нужно задать какие-либо параметры, их также можно ввести из командной строки. Параметр -t позволяет команде modprobe загружать все модули, соответствующие определенному образцу в списке. Выгрузить определенный модуль из ядра позволяет опция -r.

Модули можно заносить в список, который будет включен в файл, считываемый при загрузке системы. В версии ОС Linux Mandrake 6.0 файл modules находится в /lib/modules/2.2.9-19mdk/modules.dep.

В этом файле содержится список модулей, которые команда modprobe попытается установить при загрузке системы. Для добавления/удаления модулей из файла modules применяется команда depmod.

Еще один важный файл для modprobe — это файл /etc/conf.modules. В этом файле конфигурации устанавливается, как должна вести себя программа modprobe в том или ином случае. В табл. 2.6 показаны строки конфигурации, которые могут присутствовать в этом файле.

Таблица 2.6. Команды файла /etc/conf.modules
Команда Описание
keep Указывает modprobe добавлять все пути из файла conf, а не замещать их
path=MOD_PATH Указывает на каталог, содержащий модули
path[tag]=MOD_PATH Определяет образец модулей, содержащихся в каталоге
alias module real-name Указывает псевдоним для имени модуля
pre-install module command Выполняет команду command перед установкой модуля
install module command Выполняет команду command во время установки модуля
post-install module command Выполняет команду command после установки модуля
pre-remove module command Выполняет команду command перед удалением модуля
remove module command Выполняет команду command во время удаления модуля
post-remove module command Выполняет команду command после удаления модуля

Пример файла /etc/conf.modules показан в листинге 2.6.

1 alias scsi_hostadapter aic7xxx
2 alias eth0 3c59x
3 alias parport_lowlevel parport_pc
4 pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
Листинг 2.6. Пример файла /etc/conf.modules

В строках 1–3 описываются псевдонимы для стандартных устройств, которые загружаются в список модулей. Каждое стандартное устройство указывает имя файла загружаемого модуля. В строке 4 указана программа, которая должна запускаться перед загрузкой модуля pcmcia.

Версии ядра

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

Разработчиками ядра поддерживается строгая система иерархии версий. Формат окончательной версии ядра (так называемый релиз)

linux-a.b.c,

где a — старший номер релиза, b — младший номер релиза и c — номер патча ("заплаты"). В настоящее время принято считать, что все релизы с нечетными младшими номерами являются тестовыми, а релизы с четными младшими номерами — стабильными и готовыми к использованию.

На момент написания данного курса текущим стабильным релизом ядра Linux был 2.2.13, текущим же тестовым релизом — 2.3.31. Хотя текущим стабильным релизом является 2.2.13, большинство распространителей Linux пока не включают его в свои версии Linux.

Для того чтобы определить версию вашей системы Linux, введите команду uname с параметром -a. В листинге 2.7 показана работа этой команды применительно к ОС Mandrake 6.0 Linux.

1 [rich@shadrach rich]$ uname -a
2 Linux shadrach.smallorg.org 2.2.9-19mdk #1 Wed May 19 19:53:00 GMT 1999 i586 unknown
3 [rich@shadrach rich]$
Листинг 2.7. Пример выполнения команды ldconfig -p

Результаты работы команды uname показаны в строке 2. В третьем поле строки 2 отображена версия ядра Linux. В нашем примере это ядро 2.2.9, скомпилированное специально для работы в Mandrake Linux, о чем говорит добавленный после номера версии префикс -19mdk.

Имеется возможность получения новых версий ядра для установки на сервере Linux. Но для этого вы должны иметь исходный код ядра, который можно получить через Internet из архива ядер ОС Linux по адресу: http://www.kernel.org. Однако компиляция и установка новой версии ядра задача не для новичка. Это — сложный многошаговый процесс. Если вы все же решитесь самостоятельно модернизировать ядро Linux, пожалуйста, внимательно ознакомьтесь с документацией, которая входит в поставку исходного кода. Обращайте особое внимание на особенности, касающиеся той или иной версии Linux.

Предупреждение

Установка нового ядра Linux происходит по принципу "если работает, не трогай". Если ваш сервер на базе ОС Linux работает нормально, не пытайтесь установить новое ядро лишь потому, что оно новое. Большинство версий Linux от разных распространителей вообще оптимизированы для работы с определенной версией ядра. В таком случае изменение ядра в погоне за новизной повлечет за собой непредсказуемые последствия.

Valentin Diduk
Valentin Diduk
Украина, одесса, кпи, 2010
Евгений Олабин
Евгений Олабин
Беларусь, Гродно