от Никола Антонов(21-07-2002)

рейтинг (30)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Следконфигурационна настройка, самата компалиация, lilo

Следконфигурационна настройка

Звучи малко тафталогично. Нали преди малко точно това правехме - настройвахме? Все пак, след като сме приключили с 'make menuconfig' и сме записали избраните от нас опции в един скрит файл '.config', който можете да разгледате съвсем безпроблемно, може да искаме да пипнем тук и там, преди да извикаме компилатора да си свърши работата.

Един пример. От един и същи сорс можем да си направим безбройно количество ядра. Всеки път, когато компилираме ново ядро, то ще се именува по един и същи начин и неговите модули ще се инсталират в една и съща директория (/lib/modules/x.x.x). Така, модулите на различните ядра ще се припокриват и ще настане пълна каша. В крайна сметка, единственото работещо ядро ще е само това, което сме компилирали последно. Как да накараме модулите да отиват в отделни директории? Като преименуваме ядрото. А как да го преименуваме? Като редактираме файла 'Makefile' в директорията '/usr/src/linux' преди компилацията.

В първите три реда на този файл, който задава базовите настройки за изработването на новото ядро, е описана именно версията на ядрото. Третият ред - 'EXTRAVERSION' - е празен. В него разработчиците на дистрибуции обикновено вписват номера на кръпката, която правят на ядрото. Вече казахме, че те често пъти добавят нови драйвери или правят собствени корекции в изходния текст. Това не означава, че и ние не можем да го използуваме, разбира се. Именно в него можем да добавим нещо, с което да отличим нашето ядро от останалите. Например:

EXTRAVERSION = -1MyLinux

Така, след компилацията, нашето ядро ще се означава като '2.4.18-1MyLinux', неговите модули ще отидат в директорията '/lib/modules/2.4.18-1MyLinux' и няма да припокрият модулите на другите ядра, които ползуваме. Ето как можем съвсем безопасно да експериментираме свободно с компилацията на ядрото, без да се страхуваме, че нещо ще повредим в системата, ако случайно новото ядро не проработи.

Забележка! Името на ядрото не е тъждествено с файла, който представлява самото ядро и който можем да наречем както си поискаме. Името на ядрото е записано в неговите хедъри, благодарение на които програмите разпознават неговата версия.

Компилация на ядрото и модулите, инсталиране на модулите

Дотук беше нашата работа. Сега следват няколко магически команди и с малко търпение ще имаме ново Linux-ядро.

    make dep

Проверява за зависимости.

    make bzImage

Компилира самото ядро като bzip имидж. Ще го намерите като файл bzImage в директорията 'arch/i386/boot'.

    make modules

Компилира модулите.

    make modules_install

Инсталира модулите.

Можем да ги дадем и наведнъж:

make dep bzImage modules modules_install

Времето, което отнема изпълнението на тези команди, е добър тест за производителността на вашия компютър. При самата компилация в конзолата ще се появи цяла орда от съобщения, от които можете да научите докъде е стигнала процедурата (например, кой модул се компилира в момента) и дали всичко преминава по план. Фатални грешки излизат рядко и обикновено говорят за неправилно конфигуриран или повреден сорс, възможно е да се дължат и на хардуерни проблеми (грешки в модулите на паметта, форсиран процесор). По-чести обаче са предупрежденията (warnings), които не трябва да ви притесняват.

Съществува и друг начин за автоматизирано инсталиране на ядрото - с командата make install. Специален скрипт ще се погрижи да копира файла bzImage в директорията /boot, ще го преименува по подходящ начин и ще редактира файла /etc/lilo.conf така, че да можете да зареждате вече новото ядро. Е, може да не ви хареса начинът, по който ще го именува, но поне ви спестява ръчната настройка, за която ще стане дума по-долу. Имайте предвид, че ако използувате някоя по-екзотична дистрибуция, тази команда може да не се окаже удачното решение. И не забравяйте, че освен ядрото, трябва да инсталирате и модулите, така че make modules_install си остава.

Настройка на lilo за зареждане на новото ядро

Ядрото е готово, модулите са инсталирани. Идва време да кажем на lilo, че имаме ново ядро и трябва да го зареди. Независимо от дистрибуцията, която ползувате, ядрото обикновено се намира в '/boot' под име vmlinuz. Всъщност vmlinuz понякога е символичен линк към самия файл на ядрото. Така, само чрез редактиране на линка можете да стартирате новото ядро, без да се налага до променяте настройките на lilo. В linuxconf също има модул за настройка на lilo, който обаче като че ли отнема повече време, отколкото ако просто отворите /etc/lilo.conf и напишете две-три думи.

Ето ви последователността от команди, с които можете да подготвите новото ядро за зареждане:

1. Вариант с припокриване на оригиналното ядро (не е препоръчителен)

cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz

cp /usr/src/linux/System.map /boot

При това положение /etc/lilo.conf не би трябвало да се нуждае от редактиране, защото той по подразбиране зарежда vmlinuz като оригинално ядро. Преди това се уверете, че наистина е така, разбира се, като проверите дали в /etc/lilo.conf е написано 'image = /boot/vmlinuz'.

Тогава трябва само да стартирате:

lilo

2. Вариант без припокриване на предишното ядро (препоръчителен)

Знаем, че по начало lilo търси и зарежда /boot/vmlinuz. Можем да преименуваме старото ядро:

mv /boot/vmlinuz /boot/vmlinuz.old

mv /boot/System.map /boot/System.map.old

Да копираме новото:

cp /usr/src/linux/arch/i386/boot/vmlinuz.new /boot

cp /usr/src/linux/System.map /boot/System.map.new

Да създадем символичен линк към него под името vmlinuz:

ln -s /boot/vmlinuz.new vmlinuz

ln -s /boot/System.map.new System.map

Да добавим в /etc/lilo.conf опция за зареждане на старото ядро по избор, в случай че не тръгне новото:

image=/boot/vmlinuz.old # Името на файла-ядро

label=OldLinux # Произволно наименование на ядрото

root = /dev/hda1 # root-дяла на вашата Linux-инсталация

И да изпълним командата:

lilo

Готово, вашето ядро е подготвено за зареждане. Сега рестартирайте компютъра и опитайте дали ще се зареди правилно. Ако нещо се обърка, рестартирайте с вълшебната клавишна комбинация и изберете за зареждане старото ядро. Разбира се, ако дистрибуцията ви е по-нестандартна, ще трябва сами да проверите къде е разположено ядрото за зареждане, като разгледате щателно файла /etc/lilo.conf и се запознаете с man lilo.

При зареждането на новото ядро проследете внимателно съобщенията - дали разпознава и конфигуира правилно хардуера, както и на init-системата - всичко ли е [OK]?.

Успех на всички експериментатори!



<< Кирилизация на Debian 3.0 и KDE | Компилация на Linux-ядрото, част V: Network device support >>