Linux для пользователя
Шрифт:
Компании, которые выпускают дистрибутивы Linux (такие как RedHat, Caldera, Debian и т. д.) вынуждены встраивать в ядро поддержку как можно более широкого спектра устройств, потому что они не могут заранее знать, какие устройства (модели устройств) будут установлены на компьютере конкретного пользователя. Поддержка в ядре широкого спектра устройств облегчает установку и поддержку системы для покупателей, избавляя их от ненужных сложностей.
Как результат, ядро, поставляемое в составе дистрибутива, скорее всего содержит код для поддержки устройств, которых никогда не будет на Вашем конкретном компьютере. С другой стороны, если у вас есть устройство, которое не поддерживается стандартным ядром, у вас может появиться обоснованное желание встроить поддержку
Пользователи Linux имеют возможность или скомпилировать ядро с поддержкой всех устройств, имеющихся на конкретном компьютере, или скомпилировать ядро, поддерживающее минимальный набор оборудования, и загружать модули для поддержки остальных устройств. Если поддержка всего оборудования осуществляется в ядре, то такое ядро называется "монолитным". Ядро, скомпилированное таким образом, что поддержка части оборудования осуществляется с использованием модулей (драйверов), называется "модульным".
Какой тип ядра вам выбрать при компиляции? Однозначного ответа на это вопрос дать нельзя. Если вы не имеете привычки менять аппаратную конфигурацию компьютера, тогда вам лучше встроить поддержку всех имеющихся компонентов в ядро. Необходимо только иметь в виду, что чем больше устройств поддерживаются непосредственно ядром, тем больше его объем. А поскольку ядро полностью загружается в оперативную память, повышаются требования к объему памяти. На медленных компьютерах из-за большого размера ядра может снизиться общая производительность. Если же вы часто меняете конфигурацию компьютера (например, у вас имеются съемные жесткие диски или другие временно подключаемые устройства), то, вероятно, имеет смысл использовать для управления ими подключаемые модули, которые загружаются в память только при необходимости (экономя тем самым системные ресурсы). Таким образом, в самом общем случае поддержка некоторой части устройств должна быть встроена в ядро, а остальные устройства должны поддерживаться за счет использования загружаемых модулей.
Кроме желания иметь ядро, оптимизированное для вашей системы, необходимость перекомпилировать ядро может быть вызвана обнаружением каких-то ошибок в старой версии ядра, в частности таких, которые представляют угрозы с точки зрения безопасности (когда еще появится rpm-пакет с исправленной версией ядра?).
Я был вынужден заниматься установкой ядра из исходных кодов потому, что система виртуальных машин VMware отказалась работать с установленным у меня ядром 2.2.16, сообщив, что эта версия ядра не поддерживает работу с CDROM из VMware, и предложив мне либо установить более позднюю версию ядра, либо вернуться к версии 2.2.15. Попытки установить новую версию ядра из rpm-пакетов тоже не решили проблему, потому что конфигурационный скрипт VMware сообщал, что ему не хватает header-файлов. Установка пакетов kernel-headers (полностью соответствующих ядру) тоже не привела к успеху, вот и пришлось сделать попытку установить ядро из исходных текстов.
Надо сказать, что к тому времени мой опыт установки программного обеспечения для Linux из исходников был очень ограничен. Поэтому приступал я к этой процедуре только под давлением обстоятельств (очень хотелось запускать MS Office под Linux, не прибегая к перезагрузке компьютера). Приводимый ниже текст является как раз описанием того, что я тогда делал. Поскольку мой эксперимент оказался удачным, я могу со спокойной совестью утверждать: ничего такого, что оказалось бы не под силу начинающему пользователю, в компиляции ядра из исходных кодов нет.
Я экспериментировал на версии 2.2.16-22 из свежеустановленного дистрибутива ASPLinux Release Candidate 3 и устанавливал ядро версии 2.4.2. Поэтому все примеры в данной главе приводятся для случая, когда система уже работает на ядре версии 2.2.x и вы пришли к решению установить ядро версии 2.4.x.
17.4.2 Что надо знать до начала компиляции
Пожалуй, самое первое, к чему нужно быть готовым, приступая к компиляции ядра, - это то, что процедура эта длительная. Так что не рассчитывайте скомпилировать ядро "между делом", в свободную минутку. Заранее планируйте, что потратите на это несколько часов, иначе вы будете вынуждены прервать процедуру посредине.
Во-вторых, до начала компиляции ядра вам необходимо хотя бы в общих чертах представлять, какую именно конфигурацию аппаратного обеспечения будет обслуживать новое ядро, и решить, какие устройства будут обслуживаться самим ядром, а какие - модулями.
В-третьих, ядро версии 2.4.2 даже в архивированном (программой bzip2) виде занимает более 20 Мбайт, а после разархивации объем исходных текстов превышает 108 Мбайт. Еще столько же может потребоваться для промежуточного tar-архива, так что надо иметь не менее 250 Мбайт свободного места. Поэтому прежде чем приступить к компиляции, позаботьтесь о том, чтобы места на диске было достаточно.
В-четвертых, приготовьтесь отвечать на те вопросы, которые программа задаст вам в процессе конфигурирования ядра (а их около 500). Перевод всех этих вопросов, относящийся к версии 2.0.x ядра, можно найти в файле Configure.help, который находится по адресу http://nevod.perm.su/service/linux/doc/kernel/Configure.help.
Этот файл можно использовать и для более поздних версий, поскольку в основном вопросы, задаваемые при конфигурации, одинаковы, только появляются некоторые дополнительные в связи с появлением в ядре новых возможностей. Лучше всего скачать этот файл, распечатать его и использовать этот перевод в процессе конфигурирования ядра (см. ниже шаг 3). Если вы не смогли скачать этот файл, то после развертывания исходников ядра (см. ниже) вы найдете файл Configure.help в подкаталоге linux/Documentation. Имеет смысл просмотреть его (а лучше - распечатать) до начала конфигурирования, даже если вы не очень хорошо владеете английским.
На этом предварительные предупреждения сделаны, и я перехожу к изложению пошаговых инструкций по компиляции и установке нового ядра. В дальнейшем предполагается, что все описываемые действия выполняются с правами суперпользователя root, и что домашним каталогом является каталог /root.
17.5. Семь шагов к новому ядру
17.5.1. Получение и разархивация ядра
Исходные тексты новой версии ядра можно скачать с сайта ftp.kernel.org. Как уже было сказано, bzip2-архив исходных кодов ядра версии 2.4.2 имеет объем более 20 Мбайт, так что скачать его - тоже еще проблема. Но перекачивать исходные тексты необходимо только в том случае, если вы желаете установить новую версию ядра. Если же вы просто хотите перекомпилировать существующее ядро (скажем, из-за того, что необходимо обеспечить поддержку какого-то протокола или нового оборудования), то можно обойтись и без перекачки пакета из Интернета, поскольку с дистрибутивами обычно поставляются и исходные коды (на втором диске или просто в подкаталоге SRPM). Кроме того, даже если вы захотели скомпилировать ядро новой версии, существует возможность сократить объем информации, которую необходимо скачивать из Интернета, но об этом мы поговорим в последнем разделе данной главы. А пока будем предполагать, что вы тем или иным способом получили полный пакет исходных кодов ядра.
Поместите архив в каталог, в котором вы имеете достаточные права, например, в ваш домашний каталог. Не используйте каталог /usr/src/linux для разархивации исходников! Этот каталог содержит (обычно неполный) набор заголовочных файлов (kernel headers), которые используются заголовочными файлами библиотек (the library header files). Они должны соответствовать установленным в системе библиотекам, поэтому не стоит заранее вносить путаницу в эти файлы.
Распакуйте архив командой: