JA :: Just Articles

На главную

Вкратце о компиляции ядра

Автор: Sergey Guriev

Порой получается так, что ваш любимый пингвин ни за что не хочет подружиться с вашим оборудованием (яркий пример - интегрированные звуковые карты ac97), либо просто не может выполнить некоторые задачи. Обычно при анализе возникших проблем сталкиваешься с понятием "перекомпиляция ядра". Это может понадобиться в ряде случаев, описывать которые я не собираюсь, ибо уж очень много на эту тему различных статей и документации. Также не буду говорить о целесообразности перекомпиляции ядра - мнений на этот счет также очень много - я лишь попробую просто и доступно рассказать о том, как правильно это сделать.

Перед компиляцией ядра я бы посоветовал очень хорошо изучить конфигурацию вашего ПК, иначе может буть очень сложно, а также неплохо бы было заменить старенький gcc 2.xx на более новую версию, например 3.2. Весь процесс лучше проводить без загрузки X windows, чтобы сэкономить ресурсы системы.

Все действия описанные ниже были проделаны с использованием дистрибутива ASP Linux 7.3, основанного на RedHat, поэтому они также будут верны для любого другого RedHat-подобного дистрибутива, а для других дистрибутивов возможно потребуются некоторые коррективы. Перейдите в каталог /usr/src и посмотрите на его содержимое. Если там имеется непустой каталог linux, либо linux-a.b.c (a, b, c - числа, обозначающие версию ядра), то значит у вас уже есть исходние тексты ядра. Если таких каталогов не существует, то просмотрите компакт диски с дистрибутивом linux и поищите там пакет, название которого начинается со слова kernel (также в названии присутствует версия ядра), а затем установите его. Исходные тексты ядер можно также скачать с http://www.kernel.org. Там же доступны и патчи к ядрам. Я взял ядро 2.4.20 с www.kernel.org, а также патч patch-2.4.21-pre4 из дистрибутива Linux Mandrake 9.1.

Переходим в каталог /usr/src. Содержимое архива kernel-2.4.20.tar.bz2 извлекаем в /usr/src/linux-2.4.20. Создаем необходимые символические ссылки:

# ln -sf linux-2.4.20 linux
# cd linux/include
# ln -sf asm-i386 asm

создаем символические ссылки на заголовки ядра

# cd /usr/include
# ln -sf /usr/src/linux/include/asm asm
# ln -sf /usr/src/linux/include/linux linux
# cd /usr/src

Эта команда наложит патч patch-2.4.21-pre4 на исходные тексты ядра 2.4.20. Файл patch-2.4.21-pre4 должен находиться в каталоге /usr/src

# patch -p0 < patch-2.4.21-pre4

# cd linux

Эта команда завершит правильную установку исходных кодов

# make mrproper

Далее откройте вашим любимым текстовым редактором файл /usr/src/linux/Makefile и измените строку

EXTRAVERSION = -pre4
на
EXTRAVERSION = -pre4.my1
это позволит отличить собранное вами ядро от уже установленных в системе.

# make menuconfig
Здесь начинается очень ответственный этап - конфигурирование ядра. Этот же этап является наиболее сложным. Вам нужно будет выбрать необходимые пареметры. Тот или иной драйвер или компонент обычно можно включить в ядро статически, либо скомпилировать в виде модуля. Отличие в том, что модуль может быть загружен в память (или выгружен оттуда) когда это удобно вам (системе). Если во время конфигурации возникает вопрос о том, что это за функция и как ее использовать, то прочитайте легкодоступный help ;) Если есть серьезные проблемы с английским то взгляните на страничку http://linuxbegin.ru/unix4all/?cid=&id=238

# make dep
создаются зависимости между частями исходного кода

Компилирование и установка ядра

# make install
# make modules
# make modules_install

После этого необходимо будет указать используемому вами загрузчику местонахождение вашего ядра и, возможно, другие параметры (это зависит от загрузчика).

Следует отметить, что это всего лишь краткое пособие - более детальную документацию можно прочесть в /usr/src/linux/Documentation, Kernel HOWТO, а также во многих других источниках.


На главную

Дизайн и программирование : Sergey Guriev
Вопросы, предложения, комментарии присылайте по адресу webmaster@ja.fatal.ru