Наши
Сайдбары
   
IRC-канал
Linuxportal.ru
   
Импорт новостей
 
Вход Быстрая регистрация На главную

Поиск:
 
   БИБЛИОТЕКА
     Другие статьи этого раздела:
 

    Система
Другие разделы библиотеки:
   БИБЛИОТЕКА
     последние поступления:
 

Hardware
Перевод Serial-Programming-HOWTO
15.05.2006 | San АНДРЕЕВ
Перевод Linux Power Management Support
03.04.2004 | San АНДРЕЕВ
Варианты решения проблем со смещением геометрии монитора.
10.10.2003 | EsTaF
Multimedia
VideoCD для пингвинов
10.10.2003 | Buddha
Смотрим любимые фильмы с помощью MPlayer
23.07.2003 | Alexey Dmitriev
X-сервер
Включаем Bytecode Interpreter в пакете freetype в некоторых дистрибутивах
05.07.2006 | Alexey Dmitriev
НАСТРОЙКА СЕРВЕРА XDMCP ДЛЯ WINDOWS-КЛИЕНТОВ
09.09.2004 | Kotjara
Type1 и truetype шрифты в LaTeX.
03.05.2004 | geekkoo
Разное
Как самому написать концепцию информационной безопасности
22.03.2007 | Crion
Список рекомендуемой литературы
11.09.2006 | San АНДРЕЕВ
The Multi Router Traffic Grapher
02.06.2004 | Crion
Сеть
"Огненная стена" или строим файрвол на базе iptables
15.03.2005 | Alexey Dmitriev
Защищенная почтовая система
08.09.2004 | Crion
Postfix+Cyrus-SASL
18.12.2003 | geekkoo
Система
Написание драйверов под Linux: рекомендации, типичные ошибки и ловушки.
16.01.2007 | Mr.Nobody
Перевод Linux Daemon HOWTO
21.08.2006 | San АНДРЕЕВ
Усыпляем компьютер
11.01.2006 | San АНДРЕЕВ
   БИБЛИОТЕКА Система    
Автор статьи: Ananas
Дата: 15.10.2003

Установка нового ядра

Установка нового ядра

В статье я попытаюсь описать процесс установки нового ядра в систему так, как это делаю я. Описанный способ не предендует на исключительность.

Сборка ядра

Первое, что необходимо сделать - скачать исходные коды ядра. Их можно взять с Для тех, у кого установлен дистрибутив с оригинальным ядром (например 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, позволяющий работать с датчиками температуры, скорости вращения вентиляторов и пр.) или добавить драйверы для специфического оборудования, доступные в виде патчей к ядру. Скачайте их, если надо, и выполните установочные действия, описанные в документации к таким пакетам.

Очень неплохая страница с патчами для ядра (как для оптимизации работы, так и для расширения функциональности) -

При смене ветки ядра обычно нужно обновлять некоторые прикладные пакеты, например пакет modutils, предоставляющий утилиты для управления модулями ядра. Эти пакеты тоже можно взять на

После этого необходимо убедиться, что директории /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 можно на Этот пакет позволяет создавать загрузочные образы для дискет, 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 -

Графическая загрузка -



Все статьи раздела "Система"

©"Linuxportal.Ru". Материалы сайта можно
использовать свободно при условии
сохранения этой свободы при дальнейшем
распространении, если явно не указано иное

Дизайн и программирование:

Поставьте
нашу кнопку:
Получить код кнопки
Linux Portal.ru ::: Линукс Портал.ру
Наш партнер: