Надеюсь, среди наших
читателей найдется немало тех, кто
установил на своем компьютере 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. Автор не несет ответственности
за любой причиненный ущерб… и т. д. и т.
п. :-).