Установка нового ядра
Сборка ядра
Первое, что необходимо сделать - скачать исходные коды ядра. Их можно взять с http://www.kernel.org/ Для тех, у кого установлен дистрибутив с оригинальным ядром (например Slackware) достаточно будет только выкачать патчи, обновляющие ядро до новой версии. Тем же, у кого ядро только от дистрибутива рекомендуется выкачивать тарбол с исходными кодами в полном объеме, так как наложение патчей на дистрибутивные ядра не всегда приводит к ожидаемому результату.
Нумерация версий ядра следующая: номер состоит из трех чисел - MAJOR_VER.MINOR_VER.SUB_VER
Первые два MAJOR_VER и MINOR_VER определяют ветку ядра, SUB_VER - это номер релиза в ветке. Следует помнить, что для стабильных веток MINOR_VER - четное число. Не стоит брать нестабильные (aka девелоперские) версии ядра, если вы конечно не собираетесь стать kernel-hacker-ом ;)
После получения исходных кодов ядра распакуйте тарбол в директорий /usr/src/linux-MAJOR_VER.MINOR_VER.SUB_VER и создайте симлинк /usr/src/linux на этот директорий.
cd /usr/src
tar -zvxf /path/to/linux-MAJOR_VER.MINOR_VER.SUB_VER
rm -f linux
ln -s linux-MAJOR_VER.MINOR_VER.SUB_VER linux
Если вы скачали патч, обновляющий ядро до следующей версии, наложить его можно следующей командой
cd /usr/src/linux-MAJOR_VER.MINOR_VER.OLD_SUB_VER
zcat /path/to/patch.gz | patch -p1
mv ../linux-MAJOR_VER.MINOR_VER.OLD_SUB_VER ../linux-MAJOR_VER.MINOR_VER.SUB_VER
Кроме этого, вы возможно захотите расширить функциональность ядра за счет каких-либо разработок третьих сторон (например - пакет lm-sensors, позволяющий работать с датчиками температуры, скорости вращения вентиляторов и пр.) или добавить драйверы для специфического оборудования, доступные в виде патчей к ядру. Скачайте их, если надо, и выполните установочные действия, описанные в документации к таким пакетам.
Очень неплохая страница с патчами для ядра (как для оптимизации работы, так и для расширения функциональности) - http://members.optusnet.com.au/ckolivas/kernel
При смене ветки ядра обычно нужно обновлять некоторые прикладные пакеты, например пакет modutils, предоставляющий утилиты для управления модулями ядра. Эти пакеты тоже можно взять на http://www.kernel.org/
После этого необходимо убедиться, что директории /usr/include/asm и /usr/include/linux - это симлинки на соответсвующие директории из /usr/src/linux/include/usr/src/linux/include/asm - это тоже симлинк на директорий с ассеблерными хидерами для вашей архитектуры. Если не удалить старые заголовочные файлы ядра, то впоследствии вас могут ожидать очень неприятные сюрпризы при сборке софта, использующего ядерные заголовочные файлы.
Теперь можно приступить к конфигурированию ядра. Перед этим вам необходимо точно выяснить спецификации вашего компьютера
* тип процессора;
* чипсет материнской платы;
* тип видеокарты;
* тип сетевой платы;
* тип саунд-карты;
* тип жестких дисков;
* usb-устройства;
и т.д.
Процесс создания конфига ядра достаточно прозрачен. Запуск конфигуратора осуществляется командой make menuconfig (консольный вариант) или make xconfig (графический вариант) из корневого директория с исходными кодами ядра (/usr/src/linux). Лично я предпочитаю графический вариант, так как он более нагляден - видны все возможные опции, а не только доступные, как в консольном. Но это - дело вкуса. Для каждого пункта настройки имеется помошь, правда на английском, но - такова жизнь. Без знания технического английского в понимании юниксов (да и вообще) далеко не продвинешься.
Краткое описание подсистем ядра дано ниже.
При создании конфига главное - определиться, какие функции и драйверы встроить в ядро, а какие собрать модулями. Принцип тут прост - редкоиспользуемые функции и драйверы, а также драйверы, которые требуют передачи дополнительных параметров (например - старые звуковые платы на шине ISA) лучше собирать модулями. Остальное - встраивать в ядро. Особенно это касается драйверов для вашего жесткого диска и поддержки основной файловой системы - они должны быть встроены в ядро.
После создания конфига (файл /usr/src/linux/.config) сделайте его резервную копию и можно приступать к сборке. Вот команда, осуществляющая сборку ядра
make dep clean bzImage modules modules_install
После завершения работы команды необходимо скопировать собраное ядро и System.map (это файл с таблицей символов, экспортируемых ядром) в нужное место. Обычно - это директорий /boot.
cp System.map /boot/System.map-MAJOR_VER.MINOR_VER.SUB_VER
cp arch/i386/boot/bzImage /boot/vmlinuz-MAJOR_VER.MINOR_VER.SUB_VER
rm -f /boot/System.map
ln -s System.map-MAJOR_VER.MINOR_VER.SUB_VER /boot/System.map
В RedHat-based системах последняя команда необязательна, так как создание этого симлинка предусмотрено в загрузочных скриптах. Эта фича полезна в том случае, если в системе несколько ядер разных версий. Фича реализуется следующими командами, добавленными в init-скрипт (после монтирования файловой системы)
if [ -L /boot/System.map -a -r /boot/System.map-`uname -r` -a
! /boot/System.map -ef /boot/System.map-`uname -r` ] ; then
ln -s -f System.map-`uname -r` /boot/System.map
fi
if [ ! -e /boot/System.map -a -r /boot/System.map-`uname -r` ] ; then
ln -s -f System.map-`uname -r` /boot/System.map
fi
Для чистюль - после этого можно еще раз выполнить make clean :)
Если у вас RPM-based дистрибутив - вес процесс сборки можно выполнить командой make rpm. После отработки у вас будет готовый rpm-пакет, находящийся в /usr/src//RPMS/i386. Вам достаточно просто установить его при помощи rpm -Uvh. Этот способ более правилен, чем сборка и установка вручную.
Следующий этап - указать новое ядро загрузчику.
Если вы используете lilo, добавьте в /etc/lilo.conf строки
image = /boot/vmlinuz-MAJOR_VER.MINOR_VER.SUB_VER
Label = New
read-only
root = /dev/
и выполните /sbin/lilo
Если в качестве загрузчика используется grub, в его конфиг (обычно /boot/grub/grub.conf)
title New
root (hd0,)
kernel /boot/vmlinuz-MAJOR_VER.MINOR_VER.SUB_VER ro
root=/dev/hda2
Все. Ядро установлено и доступно при загрузке под меткой New. можно перезагружаться и наслаждаться новым ядром. Ну или kernel panic, как это частенько бывает у новичков. При появлении kernel panic главное помнить - don't panic :) Скорее всего вы несколько неправильно сконфигурировали ядро. Проанализируйте ситуацию, при которой возник panic, попытайтесь понять, чего не хватает, перезагрузитесь со старым ядром и повторите процесс конфигурирования сборки и установки ядра.
Загрузка модулей при старте
Бывают ситуации, когда поддержка необходимых для загрузки устройств была собрана модулем. Например, для rescue компакт-диска, когда неизвестно, какие диски будут на машине, всключать поддержку всех возможных вариантов в ядро не хочется, а работать должно везде. Для этих целей служат так называемые загрузочные рамдиски (initial ramdisks). Это файлы-образы для создания виртуальных дисков в памяти, которые содержат модули, необходимые для нормальной загрузки системы. Рамдиски создаются при помощи команды mkinitrd. Подробное описание ключей и принципов использования команды можно прочитать в соответсвующей ман-страничке. Для задания рамдиска который нужно использовать при загрузке используется параметр initrd в конфигурационном файле загрузчика (как для lilo, так и для grub).
Загрузочные дискеты
Загрузочные дискеты (или образы загрузочных дискет) создаются при помощи команд mkbootdisk или mkrescue. Если же Вы желаете создать этот образ вручную (например, для загрузочного cdrom-а) необходимо создать файл образа (при помощи команды dd), подмонтировать его через устройство loop и создать на нем файловую систему msdos. После чего скопировать туда ядро и необходимые конфигурационные файлы и воспользоваться утилитой syslinux для создания загрузочного сектора образа. Подробности можно посмотреть по man syslinux.
Взять пакет syslinux можно на http://syslinux.zytor.com/ Этот пакет позволяет создавать загрузочные образы для дискет, cdrom-ов и сетевых карт.
Краткое описание подсистем ядра
Я сознательно не описываю детально все конфигурационные опции ядра, а даю лишь общее описание пунктов в главном меню ядерного конфигуратора. Включать или не включать - решайте сами. Эксперименты - лучший способ набраться опыта.
Code maturiry level options - включение поддержки новых экспериментальных подсистем и драйверов.
Loadable module support - поддержка модульной структуры ядра и возможности автозагрузки модулей.
Processor type and features - тип процессора, памяти и поддержка многопроцессорности (SMP).
General setup - Включение подержки различных подсистем, в том числе сетевой. Поддержка шин PCI и PCMCIA и управления питанием. Поддержка различных форматов исполняемых файлов.
Memory technology devices - поддержка различных типров памяти, например FLASH, в основном необходима для встраиваемых устройств.
Parallel port support - поддержка параллельного интерфейса.
Plug and play configuration - поддержка устройств PLUG-N-PLAY на шинах PCI и ISA.
Block devices - поддержка блочных устройств (всевозможных дисков), в том числе и loopback устройств, необходимых для работы с обычным файлом, как с отдельным диском.
Multi-device support - поддержка RAID.
Networking options - сетевая подсистема, поддержка различных сетевых протоколов и файрвол (iptables).
Telephony support - поддержка телефонных карт для связи VOICE-OVER-IP.
ATA/IDE/MFM/RLL support - IDE подсистема и драйвера для различных IDE-контроллеров. А также эмуляция SCSI для atapi-устройств.
SCSI suppot - SCSI подсистема и драйвера SCSI-адаптеров.
IEEE 1394 (FireWire) support - поддержка шины FireWire.
I2O device support - поддержка архитектуры Intelligent Input/Output
Network device support - драйвера сетевых карт.
Amateur radio suppport - поддержка устройст для связи по X.25
IrDA (infrared) support - поддержка интерфейса для работы инфра-красным портом.
ISND support - поддержка ISDN адаптеров.
Old CD-ROM drivers - поддержка старых типов cdrom-ов.
Input core support - необходимо для устройст, работающих через USB HID (таких, как мышь, клавиатура, UPS и т.д.)
Character devices - поддержка символьных устройств, таких как последоватьный порт AGP, принтер, псевдотерминалы (необходимы для xterm).
Multimedia devices - поддержка fm-карт и устройств захвата аудио и видеоизображения.
File systems - поддержка различных типов файловых систем, в том числе и сетевых.
Console drivers - поддержка консоли. В том числе и фреймбуфера для консоли.
Sound - драйвера для звуковых карт.
USB support - поддержка USB и различных устройств, работающих через этот интерфейс.
Bluetooth support - поддержка устройств для беспроводной связи.
Kernel hacking - включение отладочного кода ядра, в частности - Magic SysRq.
Маленькие хитрости
* Если вам необходимо держать две разных конфигурации одной и той-же версии ядра, вы можете добавить свои суффиксы к версии. Для этого в /usr/src/linux/Makefile пропишите свой суффикс в переменной EXTRAVERSION. Это нужно для того, чтобы держать модулю для каждого экземпляра ядра в отдельной директории.
* spec-файл для rpm-пакета генерируется скриптом /usr/src/linux/scripts/mkspec. При необходимости добавить свои поля или секции в spec-файл подредактируйте этот скрипт.
* Помните, что модули могут подгружаться автоматически, но выгружаются только вручную. Поэтому лучше использовать скрипты-обвязки, в которых можно загружать и выгружать модули вручную. Например ниже приведен скрипт, который я использую для монтирования cdrom
#! /bin/sh
if [ $# != 1 ]; then
echo "Usage: $0 on|off"
exit 1
fi
case $1 of
on)
mount /mnt/cdrom
;;
off)
eject
modprobe -r isofs
modprobe -r ide-cd
;;
*)
echo "Usage: $0 on|off"
exit 1
;;
esac
Некоторые интересные ссылки
Пакет lm-sensors - http://secure.netroedge.com/~lm78
Графическая загрузка - http://www.bootsplash.org/
Источник - http://linuxportal.ru/
Автор - Неизвестен
Комментариев 3