Пингвиноводство: офиГенная инженерия

Дмитрий ПОЛЕНУР (dmytro13@chat.ru)

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

"А зачем, собственно, нужно компилировать ядро? - возможно, спросите вы. - Ведь в состав современных дистрибутивов Linux входит уже откомпилированное ядро, и оно прекрасно работает". Причин может быть несколько.

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

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

Сразу оговорюсь, мы поговорим о "переработке" Red Hat 6.1 на ядре 2.2.12-20, однако для большинства современных дистрибутивов процесс компиляции не будет отличаться от описанного.
Что ж, приступим. Для начала нужно зайти в систему под логином root. Исходные тексты kernel расположены в каталоге /usr/src/linux/ (если их там нет - установите kernel sources со своего дистрибутива). Переходим в указанную директорию и запускаем программу настройки ядра. Сделать это можно по-разному. Для тех, кто работает в X-Window, вероятно, удобнее будет графическая программа настройки. Чтобы ее запустить, наберите в командной строке make xconfig. Если же у вас не установлены Иксы, или вы почему-то предпочитаете текстовые меню - используйте make menuconfig. Нужно отметить, что в обоих случаях нужны определенные пакеты (соответственно Tk и ncurses), которые, однако, устанавливаются по умолчанию в большинстве дистрибутивов. Есть третий способ, самый неудобный, но он работает всегда - make config. Но в этом случае вам придется последовательно отвечать на массу вопросов.

Так как для многих графическая программа настройки удобнее, рассмотрим именно этот вариант (кстати, он выгодно отличается более удобным интерфейсом). Итак, после запуска make xconfig на экране появится окно с большими кнопками, которые соответствуют различным разделам конфигурации ядра. Увы, объем статьи не позволяет подробно описать все опции во всех разделах, но думаю, этого и не нужно, ведь существует кнопка Help :-). Поэтому мы остановимся только на ключевых моментах.

Первая кнопка - Code maturity level options - позволяет разрешить или запретить использование некоторых экспериментальных возможностей ядра, проходящих стадию бета-тестирования. Советую разрешить, так как в эту категорию попадают драйверы многих новых устройств.

Далее - Processor type and features. Выберите тип вашего процессора. Часть процессоров присутствуют в самих названиях опций, однако для некоторых выбор не столь очевиден. Например, для K6-2 или K6-III следует остановиться на Pentium/K6/TSC, для IDT Winchip - 586/k5/5x86/6x86, для Cyrix MII, Pentium II(III), Celeron - PPro/6x86MX. Далее выберите остальные пункты данного раздела.

Следующий раздел - Loadable module support - очень важен. Тут вы можете разрешить поддержку подключаемых модулей или отказаться от их использования. Каждый вариант имеет свои преимущества и недостатки. О преимуществах монолитного ядра уже говорилось. Но есть аргументы и в пользу загружаемых модулей. Во-первых, при установке нового железа вам не придется перекомпилировать все ядро. Во-вторых, модули могут подгружаться в память и выгружаться по мере надобности. И, наконец, если при выборе конфигурации ядра вы не можете определить, нужна вам та или иная функция, - ее можно скомпилировать в виде модуля. Напротив опций, для которых возможна компиляция в виде модуля между кнопками y (включить в ядро) и n (не включать), будет находиться также кнопка m (скомпилировать в виде модуля).
В разделах General setup, PnP support, Block devices просто убираем все ненужное - там очень много экзотики, вроде XT hard disk support, Parallel Port IDE device support, Multiple device driver support (программная реализация RAID), поддержка IDE-?einaoia CMD640, RZ1000 (нужно для некоторых 486 плат и систем на основе 440FX) IDE/ATAPI Tape и прочих вещей, которые большинству пользователей не нужны.
Некоторые разделы, вроде Appletalk devices, Token ring devices, Infrared port device drivers и прочие, можно запретить полностью (если, конечно, у вас нет соответствующих устройств). В остальных - оставляем только нужное (напомню, что если вы не уверены, нужна данная опция или нет, - скомпилируйте ее в виде модуля).

C разделами Networking options и Network device support нужно быть осторожными, даже если компьютер не подключен к локальной сети. Можно случайно удалить необходимые для доступа в Интернет опции. И даже если ПК не подключен к Сети, не следует полностью убирать поддержку сетевых возможностей - они требуются для корректной работы некоторых программ. Поэтому чтобы избежать неприятностей, внимательно читайте Help к каждой опции.
Опцию Kernel hacking следует отключить (если вы, конечно, не собираетесь заниматься разработкой и отладкой ядра).

После того, как вы посетили все разделы и полностью сконфигурировали ядро, нажмите на кнопку Save and Exit. Теперь можно приступить непосредственно к компиляции. Наберите в командной строке make dep; make clean; make bzImage и… терпение. Компиляция может продлиться от нескольких минут до одного-двух часов, в зависимости от производительности компьютера. Если вы использовали подгружаемые модули, то следует также выполнить команды make modules и make modules_install. Скомпилированное ядро (файл bzImage) находится в /usr/src/linux/arc/i386/boot/. Теперь осталось переписать его на место старого. Ядро Linux, с которого происходит загрузка, чаще всего называется vmlinuz или vmlinuz-x.y.z (x.y.z - версия ядра, у меня, например, vmlinuz-2.2.12-20). Месторасположение ядра обычно можно посмотреть в /etc/lilo.conf. Например, в Red Hat 6.1 ядро находится в /boot/, а в некоторых других дистрибутивах прямо в корне /. Далее два пути. Первый - просто удалить старое ядро и скопировать на его место файл bzImage (естественно, переименовав его в vmlinuz или vmlinuz-x.y.z, в зависимости от того, что у вас записано в /etc/lilo.conf) и перезагрузить компьютер. Однако если в процессе конфигурирования или компиляции ядра вы сделали что-то не так - Linux может просто повиснуть при загрузке. В принципе, ничего страшного. Если у вас дистрибутив Red Hat, то достаточно запустить инсталляцию Linux в режиме обновления старой версии и выбрать автоматический режим обновления. Так как у вас все пакеты с точки зрения дистрибутива :-) самые новые, то просто перепишите ядро и некоторые другие наиболее критичные файлы. Правда, с некоторыми другими возни может быть гораздо больше, да и компакта с инсталляцией, возможно, не окажется под рукой. Поэтому следует поступать более осмотрительно. Не будем удалять старое ядро, а просто переименуем его, например в vmlinuz.old. Потом добавим возможность загрузки этого ядра через LILO, чтобы, в случае чего, вы могли загрузиться и вернуть старое ядро, для чего нужно отредактировать файл /etc/lilo.conf. Выглядит это примерно так (у вас, конечно, он может отличаться от написанного).

boot=/dev/hda
prompt
timeout=50
default=linux

image=/boot/vmlinuz-2.2.12-20
label=linux
read-only
root=/dev/hda2

other=/dev/hda1
label=dos

Перед other=/dev/hda1 следует добавить что-то вроде:
image=/boot/vmlinuz.old
label=old
read-only
root=/dev/hda2

Возможно, для вашей конфигурации этот кусок будет выглядеть несколько по-другому. Подробную документацию по LILO вы можете прочесть, набрав в командной строке man lilo.
Ну вот, собственно, и все. Если возникли какие-то вопросы, пишите на мой e-mail - постараюсь помочь.
P.S. Автор не несет ответственности за любой причиненный ущерб… и т. д. и т. п. :-).

Источник: http://www.mycomp.com.ua/


Copyright © 2000г. "Internet Zone" & Nik Romanov, info@izcity.com
Копирование и использование данных материалов разрешается только в случае указания на журнал "Internet Zone", как на источник получения информации. При этом во всех ссылках обязательно явное указание адреса вэб-сайта http://www.izcity.com/. При наличии у копируемого материала авторов и источника информации - их также нужно указывать, наряду со ссылкой на нас.
Hosted by uCoz