от Никола Антонов(1-06-2002)

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

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


Компилиране на Linux-ядрото за начинаещи и не толкова напреднали, част I: Въведение

Н. Антонов,

pcradio@netbg.com

Такива текстове има много. Мрежата изобилства от тях и ако не ви се чете, не го правете. Особено ако сте по-напреднал потребител и се интересувате от нещо задълбочено и професионално. Ако обаче и понятие си нямате от компилацията на Linux-ядрото или не ви се полагат повече усилия в четеното на чуждоезични текстове, можете да продължите.

      Малко общи приказки

        Ядрото (kernel)

Linux-ядрото е сърцето на операционната система. Всъщност, то е собствено самата операционна система. Нарича се още kernel. Зарежда се със стартирането на компютъра и се зазижда в паметта до изключването на машината. Има две основни задачи:

    обслужва хардуера на ниско ниво (напр. - прекъсванията);

    създава средата, необходима за работата на процесите (неслучайно се нарича още “платформа”);

Linux-ядрото се характеризира като монолитно - един голям изпълним файл (обикновено между 850k - 1Mb), съдържащ множество логически разделени компоненти.

Както знаете, ядрото се разпространява с отворен изходен текст. Не код, а текст, защото е написан на човешки език, макар и разбираем само от програмистите. Текстът ще стане код след компилацията, защото ще придобие вид, разбираем само за процесора. Можете да го изтеглите от ftp://ftp.kernel.org/pub/linux/kernel. Там са публикувани всички версии на ядрото. Интересува ни серията 2.4.х. Серията 2.2.x все още се използува, но ако искате да опитате по-нов хардуер или например невероятната файлова система ReiserFS, ще ви трябва ядро от по-новата серия 2.4.х и дори по възможност последна версия. За ReiserFS например пише, че до версията 2.4.16 ядрата имат сериозни бъгове и не е желателно да се използуват с тази файлова система. ßдро от серията 2.4.х ще ви трябва и ако искате да използувате последните новости в областта на мрежовата защита, осигурявана с помощта на iptables. За 2.2.х ядрата има ipchains.

Версиите с нечетно число след точката са нестабилни, “хакерски”, предназначени за тестване и не се препоръчват за системи, които искат стабиност и сигурност. Такава е серията 2.5.х, която се разработва активно в момента.

ßдрото се разпространява под формата на bzip2 или gzip архив. Именувано е така: linux-x.y.z.tar.bz2. Този вид компресия е по-добра и дава по-малки по обем файлове. Под x.y.z разбирайте номера на версията. Изтеглете последната версия с четен номер след точката.

След като изтеглите файла, можете да го разархивирате на произволно място, но е добре да създадете символичен линк към неговата директория в /usr/src под името linux. Може и да ви потрябва след време, а може и да не ви потрябва. Обикновено разни пачове търсят по подразбиране изходния текст (сорс) на ядрото в тази директория. Ако нямате опит при работата с такива архиви, можете да използувате mc (Midnight Commander), който ги отваря и манипулира с тях като със стандартни файлове и директории.

        Модулите

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

Ако искате да видите модулите, които работят в паметта или просто изчакват да бъдат извикани, използувайте командата lsmod. С комнадите modprobe и insmod можете да зареждате конкретни модули, стига да знаете тяхното име. Командата modprobe е за предпочитане за тази цел. С rmmod можете да изчиствате модулите от паметта, но само ако не са заети с някоя задача.

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

        Защо да компилираме собствено ядро?

Всяка дистрибуция идва с набор от ядра “по подразбиране”. Макар и компилирани за различни конкретни нужди (многопроцесорна поддръжка, завишено ниво на сигурност, 64-битова система и т.н.), те все пак са замислени да поддържат широк набор от процесорни семейства и да работят с разнообразни видове хардуерни устройства (SCSI, USB и т.н.). Вероятно вашата система не използува голяма част от функциите, които ядрото по подразбиране поддържа. Аз например нямам SCSI-устройства, RAID не ми трябва, а процесорът ми е Celeron. Това са само малки примери. В действителност, нещата са много по-сложни. Ако ограничите ядрото да включва в себе си само хардуера, който ползувате, ще получите по-малък файл, оптимизиран за конкретната система. Излишно е да обяснявам, че това ще ускори и подобри като цяло работата на вашия Linux, особено ако имате по-екзотичен хардуер.

Понякога компилирането на собствено ядро се налага и поради публикуването на нови кръпки за подобряване на сигурността или заради излизането на подобрения във файловите системи, както и на нови версии на драйверите за отделни устройства.

      Конфигуриране на ядрото

Обикновено това е най-интересната част, защото ви засяга пряко. Няма как да участвате в самата компилация, нали:-)

И така, 'cd /usr/src/linux'. За да конфигурирате ядрото, можете да използувате три режима:

    make config - пита за всичко наред и нямате възможност да се върнете назад, ако нещо объркате (работи изцяло в текстов режим и е предназначен за мазохисти:) );

    make menuconfig - удобно и подредено меню в текстов режим (предпочитано от мнозина); можете да разлеждате и задавате опциите в произволен ред;

    make xconfig - графичен конфигуратор, аналог на make menuconfig, но предназначен за работа с Х (с малко объркваща подредба);

Какъв е принципът?

ßдрото може да съдържа зададената от вас функция или драйвер за устройство като 1) вграден вътрешен код (y), като 2) външен модул (m), който да се зарежда в паметта при поискване или 3) изобщо да не се компилира (n), ако например съвсем не ви трябва.

И така, да започваме!

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

make menuconfig

Стартира се конфигурационният скрипт. Появява се едно обширно меню. Опции, опции, опции...

Предлагам ви един примерен подход към конфигурирането на ядрото. Разбира се, че всичко зависи от съответния хардуер и именно затова не мога да предложа никакво универсално решение. Конкретната задача изисква конкретно решение. Ето защо, аз също подхождам конкретно, а означенията [y/m/n] са просто препоръки и по никакъв начин не гарнатират правилната и оптималната работа на системата, ако се съобразите с тях. Те са просто едно от възможните решения.

Към датата на приключване на матераила, актулната версия на Linux-ядрото е 2.4.18.

Следва



<< Компилация на Linux-ядрото, част II: Първите стъпки | КАК ДА СЕ БЪЛГАРИЗИРАМЕ - нов тертип >>