Виктор Костромин - Linux для пользователя
Если вы выбираете вариант "m", это означает, что драйвер соответствующего устройства будет сконфигурирован (и впоследствии скомпилирован) в виде отдельного подключаемого модуля.
Один из вариантов ответа на каждый вопрос представлен большой буквой, что означает, что он выбирается по умолчанию (когда вы не задаете явно свой вариант выбора, а просто нажимаете клавишу ‹Enter›).
В процессе конфигурации ядра следует иметь в виду следующее:
• включение в ядро драйвера любого устройства делает его больше и, более того, добавление ненужных драйверов в ядро может привести к проблемам, когда ядро будет пытаться обратиться к несуществующему устройству;
• если задать тип процессора ("Processor type") выше, чем 386, то ядро не будет работать на 386-х процессорах. Ядро обнаружит это при загрузке и откажется работать;
• ядро, скомпилированное с опцией эмуляции математического сопроцессора, все равно будет использовать сопроцессор, если он имеется. Функция эмуляции никогда не будет использоваться в этом случае. Правда, ядро в этом случае будет чуть больше, но зато будет работать на любых компьютерах, независимо от того, имеется ли на них сопроцессор;
• некоторые вопросы помечены указаниями "development", "experimental" или "debugging", которые указывают на то, что соответствующая функция или драйвер включены в ядро в виде эксперимента. Включение этих функций в ядро может сделать ядро не только больше, но и нанести ущерб стабильности его работы. Так что на такие вопросы лучше ответить "n", если, конечно, вы не ставите своей целью провести тестирование этих новых доработок в ядре;
• если вы компилируете ядро для использования на своем персональном компьютере, то поддержка мультипроцессорной обработки (Symmetric multi-processing support) вам, скорее всего, не нужна.
Впрочем, я начал уже давать пояснения по тому, как задавать значения отдельных параметров. Но их, во-первых, очень много, так что эта глава грозит распухнуть до неприличия, а, во-вторых, самое приемлемое решение определяется конкретной конфигурацией вашего компьютера и вашими личными потребностями и пожеланиями, так что обратитесь лучше к упоминавшемуся выше файлу Configure.help.
В заключение данного раздела замечу, что вместо make config можно использовать два альтернативных варианта команды конфигурации: make menuconfig и make xconfig. Эти команды отличаются от make config тем, что предоставляют пользователю возможность вместо ответа на вопросы производить выбор вариантов из предлагаемых меню. Команда make menuconfig работает в текстовом режиме, а make xconfig - в графическом. На рис. 17.1 представлен вид окна, которое появляется при запуске команды make xconfig.
Кнопки, представленные в этом окне, отображают основные группы параметров конфигурации (кроме 4 кнопок в правом нижнем углу окна, которые служат для сохранения конфигурации или загрузки ранее сохраненных вариантов конфигурации). Щелчок по любой кнопке, соответствующей группе параметров, приводит к появлению нового окна, в котором уже можно задавать значения для конкретных параметров. Например, щелчок по кнопке General setup приводит к появлению окна, изображенного на рис. 17.2.
Рис. 17.1. Основное меню программы make xconfig
Рис. 17.2. Меню General setup
Как видите, здесь можно просто выбрать один из трех вариантов "y", "n" и "m" (если какой-то из вариантов недоступен, то и возможности его выбрать нет) или получить подсказку по отдельному параметру (кнопка Help). Поскольку число параметров в этой группе велико, справа имеется полоса прокрутки.
Впрочем, мне не кажется, что конфигурировать ядро, используя графический интерфейс, проще, чем с помощью команды make config. Так или иначе, надо продумать и дать ответ на вопрос о каждом параметре конфигурации. Так что, может быть, лучше уж не торопиться и последовательно отвечать на вопросы, задаваемые make config? А иначе (в графическом режиме, я имею в виду) возникает шанс сбиться с пути и пропустить какую-то из кнопок. С другой стороны, преимуществом графического режима является возможность вернуться к какому-то из уже пройденных этапов и изменить ранее заданные значения тех или иных параметров. Кроме того, в каждом из окон имеется кнопка Next, пользуясь которой можно последовательно пройти все этапы конфигурации.
В общем, представление о вариантах осуществления шага конфигурации вы получили, а решать Вам. Отмечу только, что воспользоваться командой make menuconfig вы сможете только при условии, что у вас в системе установлена библиотека ncurses и пакет ncurses-devel.
Я думаю, что сказанного достаточно для того, чтобы вы смогли сконфигурировать ядро, поэтому переходим к дальнейшим шагам.
17.5.4. Проверки
Документация, поставляемая вместе с ядром, советует после завершения конфигурации выполнить два действия:
1. Заглянуть в файл Makefile, чтобы вручную поправить некоторые значения.
2. Дать команду make dep для установки зависимостей.
Конечно, для ручной правки файла Makefile надо понимать, для чего и как этот файл используется. Если вы этого не знаете, то можно этого и не делать, положившись на опыт и интуицию разработчиков. Ну, а вторую рекомендацию я советую выполнить. По экрану побегут непонятные сообщения, причем будет их очень много. Но если в конце не появляется сообщения об ошибке, значит, все завершилось успешно.
17.5.5. Компиляция ядра
Вот мы и добрались до основного этапа - собственно компиляции ядра. На этом этапе Ваше участие сводится только к запуску команды make bzImage, которая служит для создания сжатого образа ядра. Снова по экрану бегут непонятные сообщения (которые просто не успеваешь воспринять). О том, что процесс компиляции завершился без ошибок, вы можете судить по появлению сообщений примерно такого вида (естественно, я привожу те сообщения, которые были выданы в процессе компиляции ядра на моем компьютере):
Root device is (3,5)
Boot sector 512 bytes.
Setup is 2360 bytes.
System is 887 kB make[1]: Выход из каталог '/opt/kernel/2.4.2/linux/arch/i386/boot'
И в текущем каталоге должны появиться файлы System.map и vmlinux. Кроме того, в подкаталогах каталога linux тоже появляется масса новых файлов (в том числе и .o-файлы, которые упоминались выше, как мешающие повторному проведению компиляции ядра в том же каталоге).
На этом собственно компиляция ядра и заканчивается. В дополнение приведу еще три замечания из документации к ядру.
• Если в качестве загрузчика вы используете LILO, то после компиляции можно выполнить команду make install, однако рекомендуется вначале проверить (и подкорректировать) конфигурационный файл LILO.
• Хотя такое событие и очень маловероятно, но если ваша система не может загружать ядро в формате bzImage, вы можете скомпилировать его как zImage. Однако, надо иметь в виду, что поддержка zImage будет в ближайшем будущем отменена, поэтому разработчики предлагают тем, у кого возникнут проблемы с загрузкой ядра в формате bzImage сообщить об этом (приложив детальное описание конфигурации) в список рассылки linux-kernel и Питеру Анвину (H.Peter Anvin, [email protected]).
• И, наконец, если вы вдруг захотите создать загрузочный диск (без корневой файловой системы или LILO), вставьте дискету в дисковод A: и дайте команду make bzdisk.
17.5.6. Компиляция модулей
Если вы сконфигурировали какие-то драйверы как отдельные модули (выбирали при конфигурации вариант "m" при ответе на некоторые вопросы), то вы теперь должны еще выполнить команду make modules, а затем еще команду make modules_install. В файле Documentation/modules.txt можно найти дополнительную информацию по этому поводу, а также объяснение того, как использовать модули.
В завершение этапа компиляции стоит выполнить еще команду make clean, чтобы удалить образующиеся в процессе компиляции промежуточные объектные файлы (файлы с расширением.o).
17.5.7. Установка ядра
После этого остается сделать последний шаг - установить ядро и перезагрузиться. Для установки ядра вы должны иметь права суперпользователя. (Хотя в начале главы и было сказано, что для компиляции ядра надо иметь права суперпользователя, однако все предыдущие шаги можно было выполнить и от имени обычного пользователя. Не стоит работать от имени суперпользователя без необходимости!)
Разработчики рекомендуют вначале сохранить где-нибудь копию старого ядра на случай, если что-то пойдет не так, как задумано. Эта рекомендация особенно актуальна для случая, если вы ставите ядро из нестабильной ветки, поскольку такие версии могут содержать неотлаженный код. Кроме самого ядра надо сделать backup-копии модулей, соответствующих ядру. Если вы устанавливаете новое ядро с тем же самым номером версии, что и у работающего в Вашей системе ядра, сделайте резервную копию всего каталога с модулями перед выполнением команды make modules_install.