ГЛАВА 20. РЕКОМПИЛЯЦИЯ ЯДРА LINUX

1. Глава 20. Рекомпиляция ядра Linux

 

Глава 20 . Рекомпиляция ядра Linux

  • Зачем изменять ядро
  • Проверка пакетов исходных текстов
  • Создание резервной копии прежнего ядра
  • Получение нового ядра
  • Конфигурирование нового ядра
  • Компиляция и запуск нового ядра

Linux — одна из немногих операционных систем, позволяющих воздействовать на работу компьютера, модифицируя ядро системы. Поскольку Linux поставляется с полным набором исходных текстов, в нем можно опробовать любую новинку. Конечно, большинство предпочтет модифицировать ядро при помощи инструментов, входящих в комплект, а не компилировать тексты, написанные на языке С.

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

При установке дистрибутива Red Hat исходные тексты не записываются на жесткий диск по умолчанию. Прежде чем приступить к запуску конфигурационных средств или рекомпиляции ядра, установите на диске исходные тексты, воспользовавшись командой rpm, рассмотренной далее.

 

2. Зачем изменять ядро

 

Зачем изменять ядро

Новичок Linux может удивленно спросить: "А зачем это нужно - рекомпилировать ядро?" Тем более что процесс этот, в его представлении, далеко не прост.

В настоящее время Linux - система, намного более дружественная, чем два-три года назад. Усовершенствованная процедура установки, графические интерфейсы и поддержка оборудования сделали систему Linux доступной для тех, кто не является большим компьютерным знатоком. В действительности, описываемый процесс рекомпиляции управляется меню и единственной (длинной) командой запуска.

Linux - система в высшей степени "настраиваемая", так что ее вполне можно адаптировать "под себя". Однако многие ее функции в стандартном ядре просто не задействованы. Причин тому несколько.

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

Немало компромиссных решений приходится принимать и в отношении ядра Linux. Например, можно предпочесть ядро меньшего объема либо поддерживающее большее число типов оборудования без дополнительного конфигурирования. А можно оптимизировать систему на передачу IP-пакетов или выполнение задач, обычных, для рабочей станции.

Терминология: частичная, полная и просто компиляция

В этой главе часто встречаются три термина, обозначающие, по существу, один и тот же провес: частичная (make), полная (build) и просто компиляция (Compile) ядра. Их можно рассматривать как синонимы, но попробуем все же разобраться в точном значении каждого.

При разработке программного обеспечения в Linux, как и во многих других операционных системах, схема объединения модулей исходного текста и многочисленных библиотек записывается в конфигурационном файле. Это файл называется Make file и используется утилитой make.

Дроцесс преобразования исходного текста проекта в нечто, чем может воспользоваться компьютер (двоичный файл), называют компиляцией. В Linux для компиляции исходного текста применяются стандартные компиляторы языка С дсс или egcs.

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

При запуске утилиты make можно задать компиляцию всех компонентов проекта. Это полная компиляция.

Таким образом, все три варианта компиляция ядра - это, по существу, одно и то же. А при наличии нескольких сотен тысяч строк исходных текстов, процесс этот, как его ни назови, требует времени.

Ядро конфигурируется так, чтобы соотношение между его объемом, скоростью и поддержкой оборудования было приемлемым. Это соотношение выбирается с расчетом на среднего пользователя, каким его видит поставщик Linux. Мы научимся самостоятельно принимать решения о том, какие именно функции наиболее важны для конкретной вычислительной среды.

 

3. Введение в модули

 

Введение в модули

Модули ядра - очень важная составляющая Linux. Такой модуль позволяет обеспечивать ядру новые функции без его рекомпиляции. Вы сможете убедиться, насколько это важно.

Например, если возникнет необходимость в новой плате интерфейса SCSI, можно загрузить модуль ядра вводом единственной команды - insmod. В прежних версиях Linux для обеспечения поддержки устройства SCSI пришлось бы рекомпилировать ядро системы.

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

Примечание

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

В табл. 20.1 дан перечень команд для работы с модулями ядра. Более подробную информацию о каждой можно найти на соответствующей странице руководства.

Примечание

Все упомянутые команды, за исключением Ismod, доступны только корневому пользователю. В Red Hat Linux 7.1 эти команды расположены в каталоге /sbin, не входящем в путь по умолчанию, поэтому для их запуска придется вводить полный путь, например, /sbin/Ismod, /sbin/insmod И Т.П.

Табл. 20.1. Команды для работы с модулями ядра

Команда

Описание

Ismod

 

insmod


rmmod


depmod

modprobe

Вывод списка всех модулей, установленных в данный момент в работающем ядре

Установка модуля в работающем ядре. Необходимо указать имя модуля и, возможно, несколько дополнительных параметров, описывающих его поведение (например, IRQ и адреса устройств)

Удаление модуля из работающей системы. Необходимо соблюдать осторожность, чтобы не удалить модуль, используемый другими модулями. О взаимозависимости загруженных модулей можно судить по результатам выполнения команды Ismod

Создание файла зависимостей, который команда modprbbe использует для загрузки набора модулей

Загрузка набора модулей, определенного командой depmod

Дополнительную информацию о модулях конкретной системы Linux можно найти в некоторых системных файлах.

Поскольку модули ядра добавляются в код, который в это время выполняется, они записываются в виде объектного кода (уже компилированного). Имя файла каждого модуля имеет расширение .о.

Проверьте следующие файлы.

  • /boot/module-infо-2 .4.2-2— информация о каждом модуле, который может быть активизирован в системе.
  • /lib/modules/2 .4.2-2/ - несколько подкаталогов, содержащих все модули ядра системы. Например, в подкаталоге kernel/drivers/cdrom записаны все модули, предназначенные для поддержки различных устройств CD-ROM.

Примечание

В Red Hat Linux 7.1 ядро имеет версию 2.4.2. Если вы пользуетесь другой версией Linux, или обновили ядро, укажите в приведенных выше именах каталогов соответствующий номер.

Примечание

Версия любого ядра Linux задается тремя числами major.minor.patch (большая.малая.обновление). Крупные изменения в ядре соответствуют изменению номера major. Менее значимые изменения могут сопровождаться только изменением номера minor. Отлаженные и проверенные версии имеют четный номер minor. Версии, находящиеся в стадии доработки имеют нечетный номер minor. Пользователям, не имеющим опыта работы в Linux, не рекомендуется пользоваться такими версиями. Такие версии ядра не устанавливают на продаваемые компьютеры. По мере устранения ошибок и генерации обновлений появляются версии с очередными patch-номерами.

 

4. Причины рекомпиляции

 

Причины рекомпиляции

Если вам непонятно, для чего может понадобиться рекомпиляция ядра Linux, загляните в табл. 20.2, в которой перечислены некоторые проблемы и способы их решения.

Конечно, для компиляции ядра достаточно и одного из перечисленных поводов, однако не-лишне рассмотреть их все, чтобы осознать всю гибкость Linux.

Табл. 20.2. Проблемы, решаемые рекомпиляцией ядра Linux

Проблема

Решение

Процессор имеет дефект, который может вызывать полный останов системы. В Linux есть компенсационная процедура, но ваша версия недостаточно новая

Загрузите заплату (компенсационную процедуру) для ядра Linux и рекомпилируйте исходный текст. Так можно решить проблему за 20 минут

Необходимо установить плату адаптера SCSI, для поддержки которой есть модуль ядра Linux, но систему невозможно загрузить с диска SCSI, пока модуль SCSI не станет составной частью ядра

Рекомпилируйте ядро, добавив необходимую поддержку (именно встроенную, а не в виде отдельного модуля)

Появилось сообщение о нарушении безопасности в драйвере файловой системы Linux. Заплату можно поставить через несколько часов

Загрузите заплату и рекомпилируйте ядро, задействовав более новую систему безопасности

В системе устанавливается новый драйвер сетевой платы. Исходный текст загружается с узла Web поставщика

Выполните частичную рекомпиляцию всех модулей исходного текста, модифицированных для поддержки указанного драйвера

Вы приобрели коммерческую систему Linux с ядром 2.2. 16, но теперь собираетесь установить более новое .ядро

Загрузите исходные тексты ядра (довольно объемные, но не чрезмерно) и компилируйте их

Пользователи системы жалуются, что доступ к некоторым файловым системам можно получить ; только после ввода последовательности странных команд (например, insmod)

Рекомпилируйте ядро с поддержкой нужной файловой системы так, чтобы файловые системы этого типа можно было устанавливать без явной установки соответствующего модуля ядра

 

5. Сведения об обновлении ядра

 

Сведения об обновлении ядра

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

wwvw.linuxhq. com. Это огромное собрание сведений о ядре Linux с разделами, посвященными новейшим разработкам и классическим системам, со ссылками на другие источники информации и множеством полезных сведений о ядре Linux.

www.freshfimeat.net. Депозитарно-распределительный документационный центр с объявлениями о новых открытых источниках программного обеспечения и сопутствующей информацией. Имеется архив со средствами поиска. Ядро Linux не является главной темой узла Freshmeat, но здесь приведена информация о новых вариантах ядра.

www. linuxtoday. com. На этом сайте располагаются ежедневно обновляемые сведения о программном обеспечении, поставляемом с исходными кодами. Здесь же хранится архив информации о версиях, снабженный средствами поиска. Ядро Linux не является главной темой узла linuxtoday, но здесь приведена информация о новых вариантах ядра.

 

6. Проверка пакетов исходных текстов

 

Проверка пакетов исходных текстов

Для рекомпиляции ядра необходимы его исходные тексты. В Red Hat исходные тексты ядра размещаются в одном rpm-пакете, но по умолчанию не устанавливаются. Имя этого пакета:

kernel-source-2.4.2-2.1386.rpm

Пакет устанавливается по команде rpm после установки устройства CD-ROM, rpm -UVh kernel-source-2.4.2-2.1386.rpm

Примечание

В дистрибутивах Red Hat исходные тексты ядра размещены в пакете rpm, который не помечен как "пакет исходных текстов" (source code package) расширением файлового имени .src.rpm. Помните об этом, чтобы избежать путаницы.

Пакет со сходными текстами ядра не входит в дистрибутив Linux Red Hat 7.1, прилагаемый к книге. Его можно загрузить из Web-узла http://www.redhat.com .

 

7. Проверка наличия инструментальных средств

 

Проверка наличия инструментальных средств

Кроме исходных текстов, для рекомпиляции ядра нужен компилятор, состоящий из двух компонентов:

  • утилита make;
  • собственно компилятор языка С - дсс или egcs.

Разные системы могут содержать разные версии этих утилит. Естественно, лучше иметь последнюю версию компилятора - дсс 2.96 или egcs 1.1.2.

Для проверки этих утилит в системе воспользуйтесь следующими командами (их вывод соответствует стандартной установке Red Hat):

# rpm —q make

# rpm -q gcc gcc-2.96-81

Примечание

Такие команды работают в любой системе, в которой для управления пакетами применяется команда rpm.

Если этих средств в вашей системе нет, установите их, воспользовавшись фмандой rpm или aналогичной.

Совет

Устанавливая дсс, вы можете получить сообщение failed dependencies. В этом сообщении перечисляются другие rpm-пакеты, которые следует установить перед установкой дсс. Установите необходимые пакеты с CD-ROM.

Примечание

Если у вас еще нет загрузочного диска с используемым ядром, можете создать его из режима корневого пользователя с помощью команды /sbin/mkbootdisk -device /dev/fd0 2.4.2-2.,

 

8. Создание резервной копии прежнего ядра

 

Создание резервной копии прежнего ядра

Несмотря на то, что рекомпиляция ядра Linux по силам даже ребенку, все-таки следует предпринять некоторые меры предосторожности. Это означает создание резервной копии ядра и обеспечение способа ее загрузки при неудачной компиляции.

Создание резервной копии текущего ядра проводится в три этапа.

  1. Создание резервной копии исходных текстов ядра, что позволяет восстановить его при повреждении конфигурации.
  2. Создание резервной копии самого ядра как заведомо работающего средства запуска системы.
  3. Создание новой записи для загрузчика операционной системы, по которой можно будет загрузиться с резервной копии ядра.

Создание резервной копии исходных текстов не составляет труда. Для этого воспользуйтесь командой ср для копирования каталога.

# cp*-r /usr/src/linux-2.4.2 /usr/src/linux-2.4.2.sav

Восстановление производится копированием в обратном направлении. Создание резервной копии самого ядра ничуть не сложнее (замените указанную в примере версию системы собственной).

# ср /boot/vmlinuz-2.4.2-2 /boot/vmlinuz-2.4.2-2.orig

Совет

При рекомпиляции ядра прежнее ядро записывается в файл с расширением . old. Однако эту копию ядра пока нельзя использовать для загрузки системы. Этим объясняется необходимость выполнения перечисленных выше операций.

Загрузчик операционной системы типа LILO, обычно применяемый для загрузки Linux, конфигурируется установкой ссылки на файл ядра в корневой файловой системе. Например, в файле

/etc/lilo . conf

можно найти запись

image = /boot/vmlinuz-2.4.2-2

указывающую на файл запускаемого ядра.

После создания резервной копии ядра добавьте в файл /etc/lilo. conf еще одну запись, позволяющую запустить Linux с прежним ядром.

Для этого выполните следующие действия.

  1. Откройте файл /etc/lilo. conf в текстбвом редакторе.
  2. Найдите в файле /etc/lilo. conf раздел со ссылкой на образ ядра системы.
  3. Создайте копию всего раздела (четыре или пять строк текста).
  4. Поменяйте в копии две позиции:
    • Имя файла ядра замените именем его резервной копии (вместе с расширением).
    • Замените метку раздела чем-либо, наподобие linux. original (исходный Linux) или linux-previous (прежний Linux).
  5. Если обнаружатся строки, начинающиеся с initrd, замените их имена на соответствующие резервные, например, initrd-2 .4.2-2. orig. img. Этот файл вы создадите позже, если понадобится.
  6. Запишите изменения в файл /etc/lilo. conf.
  7. Введите команду /sbin/lilo, чтобы ввести новую запись в загрузчик. При выполнении команды lilo на экран выводятся метки образов, вводимых в загрузчик операционной системы.

При следующей перезагрузке системы вы увидите идентификатор нового ядра в графической подсказке загрузчика LILO. Если у вас дистрибутив, не использующий графический интерфейс загрузчика LILO, то, нажав клавишу Tab при появлении командной строки LILO во время следующей загрузки системы, вы вызовете на экран список дополнительных образов, определенных перед рекомпиляцией ядра.

 

9. Получение нового ядра

 

Получение нового ядра

Существует несколько способов получения экземпляра нового ядра. Два основных способа ориентированы на использование архива Linux Kernel, расположенного по адресу http: / / www.kernel.org, или на использование Web-сайта вашего Linux-дистрибьютора. Если вас интересует rpm-версия ядра, то основным источником может послужить http: //www.rpm-f ind. net. Загрузка и установка rpm-пакетов уже рассматривалась в предыдущих главах, поэтому ниже мы уделим внимание загрузке ядра в формате tar . gz, в файлах, подобных linux-2.4.4.tar.gz.

Совет

Убедитесь в том, что создана резервная копия предыдущей версии ядра (см. выше).

Загрузив необходимый пакет ядра, поместите его в каталог /usr/src/. Ниже мы предполагаем, что уже создана резервная копия существующего ядра, как это описывалось выше в данной главе.

Чтобы извлечь ядро и связанные с ним файлы (общим числом более 8,000 в версии 2.4.4), перейдите в каталог /usr/src и выполните следующую команду:

tar zxpvf linux-2.4.4.tar.gz

Если у пакета вашего ядра имя другое, задайте его в данной команде. Теперь можно выполнять конфигурирование ядра, как это описано ниже.

Совет

Если вы обновляете ядро, убедитесь в том, что программное обеспечение вашей системы достаточно "свежее", чтобы воспринять обновление. Для ядер версий 2.4 соответствующие сведения о необходимых версиях программного обеспечения приведены в файле /usr/src/linux-2.4.x/Documentation/Changes.

10. Конфигурирование нового ядра

 

Конфигурирование нового ядра

Самая интересная часть создания нового ядра - его конфигурирование. Именно здесь решается, какие функции включать в ядро, какие не включать и т.д. Можно выбирать между конфигурированием старого ядра и установкой/конфигурирование нового. Например, используя Red Hat Linux 7,1, вы можете изменить конфигурацию существующего ядра 2.4.2, задав новые параметры. Можно также загрузить и установить новое ядро версии 2.4.4. Несмотря на то, что детали конфигурирования в этих двух случаях различны, используемые утилиты и сама методика конфитерирования совпадают.

В Linux есть три отдельные конфигурационные утилиты, каждая из которых имеет свои особенности.

Утилита с интерфейсом командной строки. Пользователь последовательно отвечает на вопросы о функциях, которые необходимо включить в ядро. Эта утилита удобна для специалистов, умеющих работать с ядром, и для тех, у кого есть сценарии конфигурирования для этой утилиты. Утилиту командной строки можно рекомендовать пользователям с ограниченными возможностями управления экраном, не позволяющими запускать программу, управляемую меню. Один из самых больших недостатков утилиты командной строки - невозможность возврата к уже установленным параметрам для их просмотра или переустановки.

Утилита с меню текстового режима. Многоуровневое меню этой утилиты позволяет устанавливать и переустанавливать параметры ядра в любом порядке.

Утилита с графическим интерфейсом. Интерфейс этой утилиты практически аналогичен интерфейсу утилиты с текстовым меню, но имеет все преимущества графического режима. Это наиболее привлекательная утилита, но она запускается только в графической системе X Windows.

Перечисление утилиты создают один и тот же конфигурационный файл, используемый утилитой make при полной или частичной компиляции ядра.

Эти три утилиты обладают достаточно мощными справочными системами, позволяющими найти сведения об установке любого параметра.

 

11. Параметры ядра

 

Параметры ядра

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

Идентификация параметров в каждой программе своя, но во всех трех представлен один и тот же их набор. Параметры подразделяются на две основные группы:

  • модульные;
  • немодульные.

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

  • [*] составной частью ядра;
  • [ ] несоставной частью ядра.

Символы в квадратных скобках (вместе со скобками) соответствуют отметкам параметров в меню конфигурационных программ (кроме утилиты командной строки).

Для модульных параметров возможны три варианта установки (в соответствии с их представлением в меню конфигурационных утилит).

  • <> Не включается в ядро и не создается в виде модуля, который можно загрузить позже.
  • <*> Включается в ядро, так что нет надобности загружать его позже в виде модуля.
  • <М> Включается как модуль, но не как составная часть ядра. Блок можно устанавливать или удалять из ядра в любой момент.

Совет

Иногда значение какого-либо параметра не удается поменять до установки другого параметра. Например, установить поддержку определенного устройства SCSI можно только после общего разрешения поддержки этих устройств.

Когда в системе будут установлены необходимые средства (утилита make и компилятор дсс) и исходные тексты, можно запустить одну из конфигурационных утилит и приступить к конфигурированию ядра.

Обратите внимание: для конфигурирования ядра необходимо запустить лишь одну из утилит, описание которых дано ниже. Просмотрите все описания и выберите наиболее подходящую из них.

Совет

При первой установке и конфигурировании нового ядра, проверяйте каждый пункт конфигурации. При наличии у вашего компьютера специфических особенностей (например, один процессор, необходимость поддержки PC Card, необходимость поддержки USB), следует соответствующим образом изменить конфигурацию. Постарайтесь также задать для выбираемых опций минимальные значения, поскольку ядра, загруженные полностью, зачастую настолько велики, что сильно снижают быстродействие системы.

 

12. Конфигуратор командной строки

 

Конфигуратор командной строки

Для запуска утилиты командной строки выполните следующие действия.

  1. Введите команду su для получения прав корневого пользователя.
  2. Перейдите в каталогов котором записаны исходные тексты.

# cd /usr/src/linux-2.4.2

Примечание

Если номер версии вашего ядра или используемый каталог другие, измените команду соответствующим образом.

  1. Выполните следующую команду.

#make config

Последует первый вопрос о конфигурировании ядра: по команде make config выводится последовательность таких вопросов.

/?]

*

* Loadable module support *

Enable loadable module support (CQNFIG_MODULES) [V/n/7]

Set version information on all module symbols (CONFIG_MODVERSIONS) [V/n/7]

Processor family (386, 486, 586/K5/5x86/6x86/6x86MX,

Pentium-Classic, Pentium-HM X,

Pentium-Pro/Celerbn/Pentium-II,

Pentium-Ill, Pentium-4,

K6/K6-II/K6-III, flthl on/Duron/K7,

Crusoe, Uinchip-C6, Uinchip-2,

defined CONFIG_MPENTIWIII Toshiba Laptop support (CONFIG_TOSHIBfl) [N/y/m/7] []

Примечание

Последовательность вопросов меняется в зависимости от вводимых ответов.

Чтобы оставить значение параметра по умолчанию достаточно нажать Enter. Вариант по умолчанию обозначен заглавной буквой. Например, вопрос о поддержке сета имеет вид:

Networking support (CONFIG_NET) [Y/n/7] Поддержка.сети (CONFIG_NET) [Д/н/?]

Нажатие Enter равносильно вводу Y (Да). Вопросы для параметров, обозначающих включение программных блоков в ядро или их использование как самостоятельных модулей, следующие:

Kernel support for ELF binaries (CONFIG_BINFMT_ELF) [Y/m/n/?] Поддержка ядром формата ELF (CONFIG_BINFMT_ELF) [Д/м/н/?]

На многие вопросы об устройствах предлагаются варианты ответов, например M/n, что означает "Модуль" или "не включать".

Один из .вариантов ответа на каждый вопрос - ввод вопросительного знака, после чего на экран выводится описание параметра (как правило, достаточно полное).

Совет

Во всех трех конфигурационных утилитах используется одна и та же справочная информация.

Недостатки этой конфигурационной утилиты следующие.

  • Необходимость ответить на несколько сотен вопросов (точное их число зависит от вводимых ответов).
  • Вернуться к предыдущему вопросу, чтобы изменить ответ, можно только начав все сначала.
  • Нет возможности просмотреть параметры различных категорий.
  • Есть, однако, и преимущества.
  • Для конфигурирования ядра не нужны никакие пакеты, кроме пакета исходных текстов.
  • Процесс можно автоматизировать, написав сценарий ввода нужных параметров.

Меню текстового режима, описанное ниже, упрощает процесс конфигурирования, предоставляя возможность просмотра выбранных параметров конфигурации и создания файла конфигурации.

Примечание

Процесс конфигурирования можно прервать, нажав клавиши Ctrl+C. Тогда на экране появится сообщение об ошибке, а конфигурационный файл не будет создан.

 

13. Конфигуратор с текстовым интерфейсом

 

Конфигуратор с текстовым интерфейсом

Для запуска этой утилиты выполните следующие действия.

  1. Введите команду su для получения прав корневого пользователя.
  2. Перейдите в каталог, в котором записаны исходные тексты.

# cd /usr/src/linux-2.4.2

Примечание

Если номер версии вашего ядра или используемый каталог другие, измените команду соответствующим образом.

  1. Выполните следующую команду.

# make menuconfig

Примечание

Для запуска конфигурационной утилиты, управляемой меню, необходим пакет ncurses, устанавливаемый по умолчанию почти во всех системах Linux. Если после ввода команды make menuconf ig появятся сообщения об ошибках, проверьте, установлен ли пакет ncurses-devel rpm.

Сразу после ввода команды по экрану пробежит ряд непонятных строк, свидетельствующих о компиляции конфигурационной утилиты. На них можно не обращать внимания. Через несколько минут откроется окно, показанное на рис. 20.1.


Рис. 20.1. Ядро можно конфигурировать при помощи утилиты с меню текстового режима

В этом окне приведено меню категорий конфигурационных параметров. Для управления меню используются следующие клавиши.

  • Клавиши со стрелками вверх и вниз - для перемещения по меню.
  • Клавиша М - для выбора соответствующего блока в качестве модуля ядра (ести это возможно).
  • Клавиша Tab - для перемещения по трем кнопкам внизу окна: Select (Выбрать), Exit (Выход) и Help (Справка).
  • Клавиша Enter - выбор выделенной позиции (например, нажатие кнопки Help).

Перечисленные кнопки имеют следующие назначения.

Select Открытие подменю с параметрами выделенной категории.

Exit Выход в предыдущее меню или завершение работы (из меню высшего уровня).

Help. Вывод на экран справки о выделенном в меню параметре.

Пример справки показан на рис. 20.2.


Рис. 20.2. Справка по каждому параметру ядра выводится нажатием кнопки Help

Описываемые конфигурационные утилиты создают файл конфигурации ядра, используемый при его рекомпиляции. Этот файл можно сохранить для дальнейшего многократного использования. Для этого в меню предусмотрены две специальные команды: Save Configuration to an Alternate File (Сохранить конфигурационные параметры в отдельном файле) и Load an Alternate Configuration File (Загрузить конфигурационные параметры из отдельного файла). Пролистайте меню до этих команд клавишей со стрелкой вниз или Page Down.

Две последние команды главного меню позволяют сохранить набор конфигурационных параметров или загрузить существующий конфигурационный файл.

  • Команда Save Configuration to an Alternate File применяется для создания копии файла конфигурации ядра (для себя или другого пользователя).

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

Не создавайте копии конфигурационного файла до полного завершения процесса конфигурирования.

  • Команда Load an Alternate Configuration File применяется при наличии конфигурационного файла, созданного ранее или приобретенного. Загрузка такого файла приводит к установке соответствующего набора параметров, и если этот набор параметров вас удовлетворяет, то процесс конфигурирования можно завершить.

Строки меню, за которыми открываются следующие подменю, отмечены стрелками справа, как следующая строка главного меню.

USB Support

Строки меню, соответствующие конкретным параметрам ядра, отмечены слева символами, обозначающими установку этих параметров (см. также рис. 20.3).

  • [*] Составная часть ядра
  • [ ] Несоставная часть 'ядра
  • <> Не включается в ядро и не создается в виде модуля, который можно загрузить позже.
  • <*> Включается в ядро, так что нет надобносгпгзафужать его позже в виде модуля.
  • <М> Включается как модуль, но не как составная часть ядра. Данный блок можно устанавливать или удалять из ядра в любой момент. Выбранная на рис. 20.3 опция USB Modem включает соответствующий модуль в вашу конфигурацию. После того, как новое или реком-пилированное ядро установлено, выбор можно подтвердить, воспользовавшись командой /sbin/lsmod. Модули, подобные данному, могут добавляться и удаляться с помощью команд /sbin/insmod и /sbin/nnmod, соответственно (см. выше).

Рис. 20.3. Параметры в меню утилиты menuconf ig с отметками их значений

Совет

Отдельные буквы некоторых строк меню выделены жирным шрифтом или цветом. Для перехода на такую строку достаточно нажать клавишу, соответствующую выделенной букве.

Примечание

Обратите внимание на простоту конфигурирования параметров поддержки USB. После выбора соответствующих параметров можно использовать для установки периферийных USB-устройств методику, описанную в гл. 18.

Текущее значение каждого параметра указано в квадратных или угловых скобках слева. Изменение значения производится нажатием следующих клавиш.

  • Y - определение соответствующего средства как составной части ядра.
  • М - создание отдельного модуля для поддержки данного средства (если возможно).
  • N - данное средство не задействуется как составная часть ядра или отдельный модуль.
  • ? - вывод справки о выделенном параметре.

Совет

Нажатие клавиши пробела приводит к циклической смене значений выделенного параметра.

Завершив .просмотр и установку параметров, выполните команду Exit (Выход) главного меню. Откроется диалоговое окно с предложением подтвердить или отменить запись модифицированных конфигурационных параметров (рис. 20.4). Чтобы создать новый конфигурационный файл, щелкните на кнопке Yes (Да).

Рис. 20.4. При выходе из конфигурационной утилиты, управляемой меню, необходимо сохранить модифицированные параметры

 

20.2.gif

Изображение: 

20.3.gif

Изображение: 

20.4.gif

Изображение: 

20.5.gif

Изображение: 

14. Конфигуратор с графическим интерфейсом

 

Конфигуратор с графическим интерфейсом

Запуск конфигурационной утилиты с графическим интерфейсом выполняется в следующей последовательности.

  1. Запустите систему X Windows (с любыми графической средой и рабочим столом).
  2. Откройте окно эмулятора терминала (окно командной строки).
  3. Введите команду su для получения прав корневого пользователя.
  4. Перейдите в каталог, в котором записаны исходные тексты.

# cd /usr/src/linux-2.4.2

Примечание

Если номер версии вашего ядра или используемый каталог другие, измените команду соответствующим образом.

  1. Выполните следующую команду.

#make xconfig

Примечание

Графической конфигурационной утилите требуется несколько инструментальных пакетов системы X Windows. Если после ввода команды make xconfig появляются сообщения об ошибках, проверьте, установлены ли в системе нужные инструментальные пакеты.

Как и при запуске предыдущей утилиты, на экране промелькнет несколько сообщений о компиляции утилиты, и через несколько минут откроется ее главное окно (рис. 20.6).


Рис. 20.5. Утилита конфигурирования ядра с графическим интерфейсом: меню и кнопки установки значений параметров

Совет

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

Графическая утилита не слишком отличается от утилиты menuconf ig. Здесь параметры также разбиты на категории; после щелчка на определенной категории открывается диалоговое окно со списком параметров, каждому из которых можно установить значение, определяющее, что соответствующее средство должно задействоваться как составляющая часть ядра, как загружаемый модуль или не задействоваться вообще. Такое диалоговое окно показано на рис. 20.6.

Рис. 20.6. В диалоговых окнах, подобных этому, устанавливаются конфигурационные параметры ядра

Совет

Ядро 2.4.2 в Red Hat Linux по умолчанию поддерживает симметричную мультипроцессорную архитектуру. Установите для соответствующей опции значение п, если в вашем компьютере всего один процессор.

Справа от каждого параметра находится кнопка Help (Справка), щелчком на которой открывается окно со сведениями о параметре (рис. 20.7). Сведения, предоставляемые справочными системами, совпадают во всех трех конфигурационных утилитах.

Рис. 20.7. В графической конфигурационной утилите справочные сведения выводятся в отдельном окне

Большое преимущество графической конфигурационной утилиты (особенно его оценят те, кто впервые конфигурирует ядро) - отражение в меню зависимости между различными параметрами. Например, в разделе Block Devices (Блочные устройства) нельзя установить поддержку систем RAID, встроенную в ядро, пока не будет включен параметр Multiple Device Driver Support (Поддержка драйверов для нескольких устройств).

Если в утилите menuconfig зависимость параметров друг от друга показана отступами имен параметров в меню, то в графической утилите установка неразрешенных сочетаний параметров просто невозможна. Работа с графической утилитой помогает понять зависимости между различными модулями.

В конце главного меню графической утилиты находятся команды, аналогичные соответствующим командам утилиты с меню текстового режима.

Save and Exit (Выход с сохранением). Создание файла конфигурации ядра и завершение работы утилиты.

Quit Without Saving (Выход без сохранения). Завершение работы утилиты без создания файла конфигурации ядра.

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

Без создания файла конфигурации ядра при помощи одной из перечисленных утилит рекомпиляция ядра невозможна.

Load Configuration From File (Загрузка конфигурации). Загрузка конфигурационного файла, созданного ранее.

Store Configuration To File (Запись конфигурации). Запись конфигурационных данных в файл с указанным именем (для дальнейшего использования или передачи коллеге). Это не влияет на необходимость выполнения команды Save and Exit, создающей конфигурационный файл для рекомпиляции ядра.

 

20.6.gif

Изображение: 

20.7.gif

Изображение: 

20.8.gif

Изображение: 

15. Компиляция и запуск нового ядра

 

Компиляция и запуск нового ядра

После завершения конфигурирования проверьте наличие нового конфигурационного файла (.conf ig), расположенного в каталоге /usr/src/linux-2 .4.2 (учитывайте номер вашей версии). Помните, что для отображения скрытых файлов необходимо использовать команду Is -а. Если конфигурационный файл .config на месте, можно использовать команду make для рекомпиляции ядра.

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

Завершив конфигурирование, вернитесь в режим командной строки и постарайтесь не сидеть у компьютера все время, пока идет компиляция.

Обычно рекомпиляция ядра длится от 15 минут до нескольких часов. Это зависит от скорости процессора, объема оперативной памяти и ряда других факторов, поэтому все команды, вводимые при компиляции, удобно объединить в одну, через точку с запятой, чтобы они выполнялись последовательно. Организовав процесс таким образом, можно заняться другими делами и вернуться к компьютеру после завершения компиляции.

 

16. Запуск процесса рекомпиляции

 

Запуск процесса рекомпиляции

Приведенные ниже команды предназначены для создания нового ядра с рекомпиляцщй всех его модулей и их записью в соответствующие системные каталоги. (Там они будут доступны для команд ядра.)

Для рекомпиляции системы введите следующие команды.

# make dep; make clean; make bzlmage; make modules; make modules__install

Совет

Каждую команду make можно вводить отдельно, после завершения предыдущей. Если вы не планируете использовать модули, можете отбросить две последних команды. Более подробные рекомендации приведены в файле README, расположенном в каталоге /usr/src/linux-2.4.2.

После ввода этих команд на экране начнут мелькать строки с описанием каталогов, к которым обращается программа make, запуска компилятора gc.r. или едг.я для компиляции различных файлов исходного текста и компоновки различных блоков. Каждой из этих команд потребуется для выполнения несколько минут.

Если у вас в файле /etc/lilo. conf указан файл initrd, то следует создать новый файл initrd. Для начала, создайте резервную копию текущего файла initrd (в Red Hat Linux 7.1 это initrd-2 .4.2-2. img). Для этого выполните следующие команды:

# ср /boot/initrd-2.4.2-2.img /boot/initrd-2.4.2-2.orig.img

# /sbin/mkinitrd /boot/2.4.2-2.img 2.4.2-2

Теперь можно создать загрузочный диск для нового ядра с помощью команды

# make bzdisk

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

После выполнения команд компиляции ядра и возврата к командной строке создается новое ядро. Чтобы загрузить систему с новым ядром, его необходимо переместить в стандартный каталог, из которого оно будет запускаться. Это делается вводом команды

# ср /usr/src/linux-2.4.2/arch/i386/boot/bzlmage /boot/vmlinuz-2.4.2-2 В завершение, для обновления карты загрузки выполните команду lilo:

# /sbin/lilo

Совет

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

 

17. Тестирование нового ядра

 

Тестирование нового ядра

После перемещения файла нового ядра в стандартный каталог (указанный в файле lilo. conf) систему можно перезагрузить с этим ядром.

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

  • Сравнение объемов старого и нового ядер. Следует проверить объем памяти, занимаемый операционной системой, введя команду free.
  • Установка файловой системы или попытка доступа к устройству без загрузки модуля ядра для его поддержки (если поддержка данного устройства встроена в ядро).
  • Использование сетевых ресурсов (например, алиасов IP), отсутствовавших в прежнем ядре.

Может понадобиться проверка временной метки файла текущего ядра. Для этого введите команду uname. Это позволяет убедиться в том, что в данный моментсистема работает с реком-пилированным ядром. Метка времени и даты ядра должна совпадать со временем его рекомпи-ляции.

#uname -v

#1 Tue Mar 9 13:27:39 EST 2001

Примечание

Если ответ команды uname свидетельствует о том, что система загружена не с новым ядром, разберитесь с системным загрузчиком LILO. Проверьте, правильно ли указано имя загружаемого ядра в файле /etc/lilo.conf.

 

18. Что дальше

 

Что дальше

В следующей части книги рассмотрены основы сетей. Глава 21 посвящена ряду вопросов, связанных с подключением отдельного ПК к Internet, в том числе с механизмами создания РРР-соединения, просмотром World Wide Web или обменом сообщениями электронной почты в Linux.

В гл. 21 рассмотрены основные положения организации сетей и их реализации в Linux. Дан краткий обзор TCP/IP (основного протокола Internet) и большинства сетей на основе Linux и Unix.