Главная » СТАТЬИ » Работа с ядром Linux в ОС Red Hat

Работа с ядром Linux в ОС Red Hat

При работе с модульным ядром нужны специальные инструменты для управления модулями. Модули требуется загружать и выгружать, и было бы здорово, если бы это происходило в автоматическом режиме. Следует также обеспечить возможность передавать модулям при их загрузке необходимые параметры, например, адреса в памяти и прерывания. Эта информация изменяется от модуля к модулю, так что потребуется просмотреть документацию по вашим модулям, чтобы определить, нужно ли и какую именно информацию требуется передать конкретному модулю. ОС Linux предоставляет пользователю следующие средства управления модулями. Все указанные здесь команды (и modules.conf) имеют превосходное справочные руководства (воспользуйтесь командой man):

— lsmod — Эта команда выводит список загруженных модулей. Вывод этой команды полезно пропустить через команду less (с помощью конвейера), потому что список обычно занимает более одной страницы экрана;

— insmod — Эта команда загружает указанный вами модуль в выполняющееся ядро. Если имя модуля задается без указания полного пути, то местом для поиска модулей по умолчанию является каталог /lib/modules/*/. У этой команды имеется несколько опций, наиболее полезная из них -f, загружающая указанный модуль принудительно;

— rmmod — Эта команда выгружает (т.е. удаляет) указанный модуль из выполняющегося ядра.

Можно выгружать несколько модулей одновременно;

— modprobe — Более сложная версия insmod и rmmod, она принимает во внимание файл зависимостей, созданный командой depmod, и автоматически выполняет загрузку взаимосвязанных модулей, а при вызове с опцией -r — их удаление. Однако у этой команды нет опции принудительной загрузки. У команды modprobe есть еще одна весьма полезная опция. Это опция -t;

— depmod — Эта программа создает файл зависимостей для модулей ядра. Некоторые модули требуют для нормальной работы, чтобы предварительно были загружены другие модули, то есть «зависят» от этих модулей (таким образом устраняется дублирование участков кода). В одном из файлов запуска содержится команда depmod -а, выполняемая всякий раз, когда ОС загружается. При этом обновляется файл /lib/modules/*/modules.dep. Все вместе: команда depmod, созданный ею список зависимостей и файл /etc/modules.conf — дает возможность автоматически загружать модули ядра по мере возникновения необходимости в них.

— /etc/modules.conf — Это не команда, а файл, который управляет поведением команд modprobe и depmod; здесь хранятся переменные модулей ядра. Хотя синтаксис входящих в данных файл команд может быть весьма сложным, самые необходимые из них очень просты. Наибольшее распространение имеют команды, предназначенные для создания псевдонима (alias) модуля и передача ему некоторых параметров. Например, в следующем фрагменте создается псевдоним для устройства (взятого из файла devices.txt), что позволит придать ему запоминаемое имя, после чего модулю передается некоторая информация, специфическая для данного устройства. Например, устройство i2c-dev используется для считывания текущей температуры центрального процессора и скорости вентилятора в нашей системе. Программная документация предлагает внести следующие строки в файл modules.conf. Добавить их можно с помощью текстового редактора:

alias char-major-89 i2c-dev

options eeprom ignore=2,0×50, 2,0×51, 2,0×52

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

Для удаления модуля joydev используйте команду:

# rmmod joydev

Взгляните на вывод команды Ismod, там видно, что данный модуль больше не загружен. Если бы одновременно удалили и модуль input (если помните, они взаимозависимы), то пришлось бы воспользоваться командой modprobe, чтобы загрузить и input и joydev одной командой:

# modprobe joydev

Если ОС Linux при загрузке модуля «упирается» (потому что этот модуль был скомпилирован для другой версии ядра, отличающейся от той, которая выполняется в настоящее время; например, в случае модуля графической платы Nvidia), есть возможность настоять на своем и заставить загрузить нужный модуль вот так:

# insmod -f Nvdriver

Недовольство ядра (сообщение об ошибках) в данном случае можно смело игнорировать. Впрочем, в данном примере этого быть не должно. Автоматическое управление модулями — прекрасная штука, если оно работает, но иногда приходится взаимодействовать с модулями напрямую. Когда требуется перекомпилировать ядро. В системах Red Hat используется модифицированная версия простого стандартного ядра Linux с введенными в него дополнительными драйверами и другими специальными возможностями. (Модифицированным называется ядро с программными заплатками, или, как еще говорят, пропатченное.)

Компания Red Hat проводит достаточно интенсивные проверки всех своих дистрибутивных ядер и регулярно распространяет обновленные версии. Поставляемое компанией Red Hat ядро откомпилировано с максимально возможным числом модулей, чтобы обеспечить максимально возможную гибкость системы. Выполняющееся ядро может быть также настроено с помощью программы sysctl, которая позволяет осуществлять прямой доступ к ядру и разрешает изменять некоторые его параметры. В результате обширного тестирования, легкости конфигурирования и модульности дистрибутивное ядро Red Hat Linux делает все, что от него требуется, и подходит практически для всех нужд. Большинству пользователей перекомпиляция ядра может потребоваться в особых случаях, как-то:

  • «Прикрутить» к системе новую «эзотерическую железку» (какое-нибудь экзотическое оборудование);
  • Произвести обновление системы еще до того, как выпустят новую дистрибутивную версию ядра;
  • Поэкспериментировать с возможностями системы.

Red Hat предоставляет несколько дистрибутивных версий ядра для процессоров Athlon и Pentium, предназначенных как для одно-, так и для многопроцессорных системных плат, а также для систем уровня предприятия (версия с более высокой степенью защиты, использующая до 4 Гб памяти). Эти версии ядра предоставляются в формате RPM, и установка их сводится к выполнению следующей команды:

rpm -Uvh newkernel.rpm

RPM-файлы ядра (но не исходников ядра!) содержат программные сценарии его инсталляции (installation scripts), которые автоматически изменяют конфигурацию вашего системного загрузчика таким образом, чтобы по умолчанию загружалось новое ядро. Если нежелательно менять ядро по умолчанию, следует отредактировать файл /etc/lilo.conf или /boot/grub/grub.conf вручную, чтобы загружалось нужное ядро.

При установке нового ядра всегда используйте команду rpm -U (upgrade), а не rpm -i (install), чтобы избежать перезаписи работающего в данный момент старого ядра. Такой способ установки значительно безопаснее. У каждого нового ядра есть соответствующий инсталляционный пакет (RPM) с исходниками, который также можно установить:

rpm -Uvh newkernel.src.rpm

Исходные тексты ядра при этом автоматически устанавливаются в каталог /usr/src.

Версии ядра Linux.

Ядро Linux непрерывно развивается. По мере добавления новых возможностей, устранения ошибок и включения новых технологий в основные функции ядра, возникает необходимость выпуска новых стабильных версий ядра для использования в повседневной работе. Также важно иметь отдельные версии, содержащие самые новые возможности и функции для «обкатки» и тестирования их в среде разработчиков. Чтобы как-то их различать, каждому ядру присваивается номер версии.

Программисты любят использовать последовательные номера версий, имеющие абстрактное значение. Разве, к примеру, 8-я версия какой-либо программы в два раза более функциональна, чем версия 4? Разве версия 1 одного приложения менее проработана, чем версия 3 другого приложения? Номера версий не могут использоваться для подобных сравнений. Вполне возможно, что программа с большим номером версии будет иметь меньше функциональных возможностей и больше ошибок, чем старые версии. Но так уж повелось, номера присваиваются, чтобы указать, какая из версий имеется в виду.

Номер версии ядра может быть разбит на четыре значения:

— major version — Это основной номер версии, в настоящее время он равен 4.

— minor version — Это младший номер версии (номер субверсии), равный, предположим, 6.

— sublevel number — Это значение указывает на текущую итерацию ядра.

— extraversion level — Это число обозначает номер набора заплат (patches) и добавлений, внесенных программистами Red Hat в ядро, дабы реализовать в нем необходимый набор функций.

Каждый такой набор также нумеруется, и его номер входит в обозначение имени ядра операционной системы. Команда uname -r, вызванная в командной строке оболочки, выводит на экран номер текущей версии вашего ядра.

Добавить комментарий

Ваш адрес email не будет опубликован.