Глава 10. Заплатки, настройка и обновление ядра
10.1. Введение
Установка заплаток, настройка и обновление ядра Linux — весьма полезные операции, и ничего страшного в них нет. Эти процессы принадлежат к числу немногочисленных операций администрирования, требующих перезагрузки, и это обстоятельство может огорчить администраторов, гордящихся длительным временем непрерывной работы. В остальном эта процедура ничем не хуже, чем установка заплаток или обновление любых других программ.
Вам потребуются исходные тексты ядра и компилятор GNU C. Исходные тексты ядра можно получить из двух источников: на сайте вашего дистрибутива Linux или по адресу http://kernel.org. Разные дистрибутивы Linux по-разному модифицируют ядро. Red Hat, SuSE и Mandrake вносят значительные изменения, Debian и Slackware ограничиваются минимальными модификациями. Установка «эталонного» ядра с сайта kernel.org может привести к нарушению работы дистрибутивов, использующих модифицированное ядро, поэтому лучше использовать исходные тексты ядра для вашего дистрибутива (в главах 2 и 3 рассказано, где достать и как установить программное обеспечение Linux, а в разделе 4.2 описан процесс сборки).
Как и в большинстве программ Linux, при установке заплатки вы не модифицируете существующее ядро. Заплатка применяется к исходным текстам, по которым затем строится новый двоичный файл, поэтому в итоге вы получаете два ядра. Это хорошо, потому что у вас остаётся исходное ядро на тот случай, если новое ядро не загрузится. Вы можете установить несколько различных ядер и протестировать последние версии в разных конфигурациях.
Основные причины для модификации ядра:
- оптимизация ядра для конкретного оборудования;
- использование новых возможностей;
- исключение ненужных функций;
- тестирование новых функций;
- обновление системы.
Настройка нового ядра
Настройка конфигурации является не только самым длительным, но и самым важным этапом сборки нового ядра. На этом этапе вы решаете, какое оборудование, файловые системы, функции энергосбережения и т. д. будут поддерживаться ядром. В вашем распоряжении более сотни разных параметров, и для каждого нужно принять три потенциальных решения: нужно ли включать данную возможность, и если нужно — оформить ли её в виде загружаемого модуля или статически откомпилировать в ядро? Как правило, если возможно построить модуль, следует выбрать именно этот вариант. Модули экономят память, поскольку память для них выделяется лишь в случае их фактического использования. Кроме того, обновить или установить отдельный модуль проще, чем перестраивать всё ядро.
Программа конфигурации ядра содержит справку по почти каждому параметру. В справке говорится, можно ли оформить некоторую функцию в виде модуля или её необходимо встроить в базовое ядро. Здесь вы найдёте информацию о том, для чего нужна каждая функция, и рекомендации на случай, если вы не уверены, следует ли включать соответствующий режим. Если справки нет и вы не знаете, что делать — включайте. В худшем случае вы получите более громоздкое ядро с неиспользуемыми возможностями.
Программа конфигурации ядра не позволит реализовать в виде модуля те функции, которые должны быть частью базового ядра. У этого правила есть лишь одно важное исключение: драйвер дискового устройства, содержащего корневую файловую систему. Вообще говоря, этот драйвер должен быть встроен в базовое ядро, чтобы система могла загрузиться, иначе возникает «порочный круг»: драйверы необходимы для загрузки корневой файловой системы, но файловая система не может загрузиться, потому что драйверы находятся в ней. Если драйверы не встраиваются в ядро, вам придётся создать образ initrd. initrd создаёт исходный виртуальный диск, который загружает драйверы дисковых устройств, что позволяет загрузить систему.
Бытует распространённое заблуждение, будто система с загружаемыми модулями работает медленнее, чем монолитное ядро. На самом деле обращение к функциям сводится к простой передаче управления по адресу памяти, так что никаких различий в скорости не существует.
Для настройки ядра 2.4 используется программа menuconfig, а для настройки ядра 2.6 — либо menuconfig, либо xconfig. Программа menuconfig создана на базе ncurses, так что вам не понадобится X. Если поддержка ncurses не установлена, либо установите её, либо используйте исходную программу настройки ядра config, но это неудобно и процесс затягивается. Программа xconfig была полностью переработана для ядра 2.6. Она чрезвычайно эффективна и удобна, а по каждому параметру пользователь может получить содержательную справку. Для её запуска вам понадобится Qt, qt-devel и X.
Дерево сборки ядра содержит объёмную документацию; загляните в каталог linux-$VERSION/Documentation. В каталоге linux-$VERSION/README содержатся важные указания по установке, а в каталоге linux-$VERSION/Documentation/Changes — важная информация о версиях используемых программ.