Компиляция ядра Linux

Матеріал з Wiki.Zina
Версія від 15:35, 12 червня 2009, створена >WikiSysop (→Ссылки)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

1. Подготовка

[ред. | ред. код]

Узнайте текущую версию ядра, установленного на вашем компьютере:

uname -r

Авторизуйтесь как root бессрочно:

sudo -s -H

2. Установка пакетов, необходимых для компиляции ядра

[ред. | ред. код]
apt-get update && apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

Также рекомендуется установить ccache - это позволит сократить время перекомпиляции и компилировать в несколько потоков:

apt-get install ccache
export CONCURRENCY_LEVEL="5"

3. Скачайте исходные тексты ядра

[ред. | ред. код]

Нужно на http://www.kernel.org/ найти ссылку на ядро в архиве .bz2 и скачать в папку /usr/src.

cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.tar.bz2

Затем распаковать исходники и создать символическую ссылку на папку с исходниками ядра.

tar -jxvf linux-2.6.29.tar.bz2
ln -s linux-2.6.29 linux
cd /usr/src/linux

4. Конфигурирование ядра

[ред. | ред. код]

Хорошей мыслью будет использование конфигурации вашего текущего ядра в качестве основы для конфигурирования нового ядра. Скопируйте текущую конфигурацию в /usr/src/linux:

cp /boot/config-`uname -r` ./.config

Дальше есть 2 пути:

  1. Скомпилировать ядро с настройками из существующего .config:
    make oldconfig
  2. Сконфигурировать вручную:
    make menuconfig

Вы попадете в меню конфигурации ядра. Выберите "Load an Alternate Configuration File", затем выберите .config (который содежит вашу текущую конфигурацию ядра) в качестве файла конфигурации.

Затем просмотрите меню конфигурации ядра и… сделайте ваш выбор! (о том, что нужно убрать, а что – оставить, можно книгу написать. В 2.6.18 много экспериментальных фич, многое из поддержки железа вам не понадобится в силу того, что этого железа у вас не и не будет… смотрите сами). Когда вы закончите, выберите Exit и на последующий вопрос (Do you wish to save your new kernel configuration?) ответьте Yes.

См. Параметры компиляции в Linux


Отключить ненужное

[ред. | ред. код]

В секции Block layer я отключаю строку

[ ] Support for Large Block Devices

за ненадобностью: ну нет у меня дисковых устройств более 2 терабайт объемом.

В секции Processor family следует подобрать возможно близкий тип процессора. В моем случае (32-битный Sempron) это будет, очевидно,

(X) Athlon/Duron/K7

Сам по себе Sempron в списке доступных типов процессоров отсутствует.

Здесь же можно отключить такие явно ненужные вещи, как

< > Toshiba Laptop support  
< > Dell laptop support

Если, конечно, ядро не собирается именно для этих ноутбуков. Ну и такие Intel-специфические вещи, как

< > /dev/cpu/microcode - Intel IA32 CPU microcode support 
< > /dev/cpu/*/msr - Model-specific register support 
< > /dev/cpu/*/cpuid - CPU information support

также выглядят лишними. В общем, для отключения в ядре архитектурных излишеств - перспективы огромные. Главное - не увлечься и не отключить что-либо критически важное. И еще: поскольку ранее решено было отказаться от initrd при загрузке, следует очень внимательно проверить, что поддержка устройств и файловых систем, несущих корневую файловую систему, была встроена в ядро, а не собиралась как загружаемый модуль.

То же самое относится к чипсету - очевидно, что в конкретной машине он будет один, наример, в моем случае

<*> ATI IXP chipset IDE support

Поддержку же прочих, не имеющих быть в наличии, чипсетов можно спокойно отключить. Аналогично поступив и с многочисленными SCSI-адаптерами - хотя сама по себе поддержка SCSI-интерфейса

<M> SCSI device support

родового класса SCSI-устройств

<M> SCSI disk support

и SCSI-дисков

<M> SCSI generic support

в разделе SCSI device support следует оставить - они обеспечивают работу с USB-накопителями любого рода и носителями цифровых камер.

В большинстве случаев можно смело отключать и опцию

[*] Multiple devices driver support (RAID and LVM)

в разделе Multi-device support (RAID and LVM). Если, конечно, LVM и программный RAID действительно не используются.

Наконец, нет ни малейшей необходимости в поддержке всего наличного изобилия сетевых устройств и протоколов.

Linux kernel variables (others)

[ред. | ред. код]

Источник: http://exs.elm.ru/wordpress/?p=259

  • dev.rtc.max-user-freq
  • dev.hpet.max-user-freq

Определяет количество опросов таймеров обычной и высокой точности в секунду. Значение по-умолчанию небольшое, всего 64, в принципе для сервера вполне потянет, в серверах не часто используется непосредственное взаимодействие с таймерами ядра. Однако, если у вас не сервер, а система, которая пользуется медиа подсистемой (воспроизводит и/или записывает например звук и/или видео), то это значение наверняка стОит поднять. Обычно рекомендуют значение 1024, однако я предлагаю значение чуть более высокое 3072 или даже 4096.

  • kernel.threads-max

Задаёт количество потоков которые может обслужить ядро. Достаточно часто сервера бд, в частности Oracle, рекомендуют повысить это значение, но ставить что-то типа 16777216 я бы не советовал, ибо переключение между потоками тоже отжирает некоторое количество ресурсов процессора, значения 16384 или на крайняк 32768как правило вполне достаточно даже в очень тяжёлых случаях.

5. Компиляция ядра

[ред. | ред. код]

Чтобы скомпилировать ядро, выполните следующие команды:

make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

Здесь

  • fakeroot задает "правильное" root-окружение,
  • make-kpkg выполняет собственно сборку ядра и модулей (подменяя собой обычные make vmlinuz и make modules),
  • --append_to_version, --sempron и --revision=rev.01 задают дополнения к имени собираемого пакета, каковым в качестве basename выступает kernel_image.

После –append-to-version= вы можете вписать все что угодно – все, что поможет вам в дальнейшем идентифицировать «ваше» ядро, но это название должно начинаться на минус («-») и не содержать пробелов.

Теперь потерпите – компиляция ядра может занять несколько часов, все зависит от того, как вы сконфигурировали ядро и от того, насколько быстр ваш процессор.

6. Инсталляция нового ядра

[ред. | ред. код]

После того, как компиляция нового ядра успешно завершится, в директории /usr/src появятся два deb-файла:

cd /usr/src
ls -l

Установить их:

dpkg -i ./*.deb

Теперь можно проверить grub - в него добавится новое ядро:

vi /boot/grub/menu.lst

См. также

[ред. | ред. код]

Ссылки

[ред. | ред. код]

Параметры ядра Linux