Linux кернелот е слободен софтвер и спаѓа под лиценцата на GPL и затоа што има многу луѓе кои работат на неговиот развој, неговите надоградби излегуваат скоро на секои 2 недели. Еве пример, пред една недела го симнав најновата надоградба за 2.6.27 кернелот т.е. 2.6.27.7 а денеска дури ја пишувам статијава гледам дека надоградбата 2.6.27.8 е излезена и објавена на главниот сајт.

Статијава е организирана така што ќе се обидам во најголем детал да го објаснам компајлирањето
на кернелот + ставање на најнова закрпа и тоа на 2 начина, едниот е во стил на Debian дистрибуцијата, а другиот е old school компајлирање т.е. компјалирање од 0. Покрај ова, постојат и други закрпи, како закрпата на Андреј Мортон (-mm patches) и -rc закрпите кои се кандидати за понова серија на кернелот (пример, 2.6.28-rc2 е кандидат за излегување на стабилната закрпа 2.6.28.x). Ќе сметам дека имате некое искуство со терминалот на GNU/Linux и дека можете да се снајдете во него (копирање, преместување на датотеки и такви работи).

Ќе се запрашате зошто е потребно да се компајлира кернелот? Компајлирањето го правиме за повеќе причини, една од нив, ако не и најважна, е за да ја подобриме работата на целиот оперативен систем, да ставиме нови закрпи и да ја прошириме компатибилноста со друг хардвер. Во овој случај кернелот го компајлираме за да може да го вклучиме после во акција т.е. да го користиме како кернел на сегашната дистрибуција која ја имаме инсталирано.

Како мало објаснување, под компајлирање се подразбира преведување на код напишан во некој програмски јазик во машински јазик. Во нашиот случај ние го преведуваме т.е. компајлираме "срцето" на GNU/Linux оператвниот систем.

Пред да почнеме да симнуваме кернели и закрпи, потребни ни се неколку алатки кои мора
да ги имаме претходно инсталирано за да можеме да го компајлираме кернелот. Под овие алатки се подразбираат компајлер, разни библиотеки, разни хедери… А за да ги инсталираме овие работи, на Debian базиран систем го пишуваме ова во терминал :

sudo apt-get update ; sudo apt-get install build-essential libncurses5-dev
kernel-package

За друга дистрибуција треба да инсталираме gcc, libc-dev и libncurses5-dev кои ќе ги инсталираме
со помош на пакет менаџерот за таа дистрибуција (на пример, во Fedora ќе го користеме YUM интерфејсот и преку него ќе ги инсталираме потрeбните пакети, иако повеќето rpm базирани дистрибуции доаѓаат со претходно инсталирани алатки).

Откако ќе ја завршиме инсталацијата на потребните алатки ќе преминеме на преземање на најновата верзија на стабилниот кернел, и неговиот најновата закрпа. Кернелот може да се најде на
локацијата http://kernel.org. На главната страна ни се дадени најновите вести за најновите верзии/закрпи на кернелот. Прво ќе го симнеме најновиот стабилен кернел од локацијата http://www.kernel.org/pub/linux/kernel/ или од ftp://www.kernel.org/pub/linux/kernel/.

За време на пишувањето на оваа статија, најновиот кернел е кернелот 2.6 . Во мојот случај
тоа е кернелот linux-2.6.27. Ја симнувам датотеката linux-2.6.27.tar.bz2. Следно, ќе ни е потребна најновата закрпа, тоа може да се види на главната страна т.е. на kernel.org и да се симне директно со кликање на истакнатиот линк. Во овој случај тоа е датотеката patch-2.6.27.8.bz2. Откако ќе ги симнете
2-те архиви, отворете терминал, и логирајте се под root корисничкото име (sudo su) и симнатите датотеки (неотпакувани) копирајте ги во /usr/src. Потоа одиме во таа локација (cd /usr/src) како root корисник.

Напомена, од сега па во продолжение на текстот заменувајте ги бројките на верзијата
со оние кои сте ги симнале. Не значи дека кај вас треба да се истите. Пример, linux-2.6.27.tar.bz2 кај вас може да е друго, пример linux-2.6.32.tar.bz2. Истото важи и за сите други.

Прво што правиме е отпакување на кернелот што сме го симнале, тоа го правиме со:

tar-xvf linux-2.6.27.tar.bz2

Некои програми извршниот код на кернелот го бараат во локацијата /usr/src/linux, па затоа ќе направиме симболички линк на локацијата /usr/src/linux кој ќе укажува на /usr/src/linux-2.6.27 :

ln -sv /usr/src/linux-2.6.27 /usr/src/linux

Следно што правиме е “закрпувањето“ на кернелот со најновата закрпа што ја симнавме:

cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.27.8.bz2 | patch -p1 –dry-run
# Доколку не добиеме грешки:
bzip2 -dc /usr/src/patch-2.6.27.8.bz2 | patch -p1

Сега ќе почне да ги става закрпите на потребните фајлови. После завршување на овој процес следува според мене најтешкиот чекор од компајлирњето на кернелот – неговата конфигурација. Под конфигурација на кернелот се подразбира вклучување/исклучување, дефинирање параметри за модули, означување модули и драјвери за инсталација, специфирање на платформа и други
кернел параметри.

За среќа, можеме да го искористиме нашиот стар конфигурациски фајл со кој бил компајлиран сегашниот кернел и да го специфираме како конфигурациски фајл за новиот кернел. Тоа може да го направиме на 2 начина, или директно да го вклучиме без никакви измени или пак да го вклучиме и плус да поминеме низ чекорите за конфигурација (јас би ви го препорачал вториот начин и
за него и ќе објаснам).

Прво, го копираме стариот фајл:

cp /boot/config-`uname -r` /usr/src/linux

И потоа го вклучуваме визардот за конфигурација преку кој ќе ги лоадираме старите подесувања. Визардот (или може да се нарече мени за конфигурација) може да го стартуваме на неколку начини :

  • make menuconfig – стар начин кој покажува *GUI* во терминалот и го користи пакетот libncurses5-dev.
  • make oldconfig – чекор по чекор начин за користење на нашиот претходен конфигурациски фајл од /boot/ при кој ни кажува кои се новите можности на кернелот и дали сакаме да ги активираме. Истотака е во терминал.
  • make gconfig – Прикажува GUI базиран на GTK т.е. работи најдобро под GNOME десктоп средината.
  • make xconfig – GUI базиран на QT библиотеките, работи најдобро на KDE десктоп средината.

Во нашиот случај ќе претпоставам дека користите GNOME како десктоп средина и ќе го вклучиме make gconfig :

Сега кликнуваме на ‘Load’ и го одбираме нашиот стар конфигурациски фајл :

Ви препорачувам да ги отворите сите опции, за сите има објаснување во долниот дел на прозорчето па ако ви падне нешто на око слободно активирајте/деактивирајте го. Од искуство кажувам дека најдобриот начин да се научи нешто е преку експериментирање. Па и да го расипеме кернелот секогаш ќе може да се вратиме на стартиот кернел :)

Откако го конфигурираме кернелот, кликнуваме ‘Save’ и го затвораме прозорецот. Сега се враќаме на терминалот кој треба да е активен нонстоп. Следниот чекор е всушност она главното, компајлирањето на кернелот. Тоа ќе го изведеме на 2 начина како што спомнав прво во стил на Debian а после старомодниот начин.

Прво во стилот на Debian. Овде од кернелот ќе направиме .deb пакет кој подоцна ќе го инсталираме на системот и истотака ќе ги направиме хедерите од кернелот кои ќе бидат инсталирани подоцна, истотака во .deb пакет. За оваа цел ќе ја користеме алатката make-kpkg со следните параметри:

make-kpkg –initrd –append-to-version=-it kernel_image kernel_headers

Аргументот –append-to-version е за специфирање на наше сопствено име или прекарот кој ќе биде додаден на кернелот, во овој случај јас го додавам ‘-it’ прекарот.

Сега ќе започне процесот на компајлирање. Времетраењето на компајлирањето варира од компјутер на компјутер и зависи од количеството на меморија и типот/брзината на процесорот. Кај мене на Pentium D 2.66 GHz со 1GB RAM 667MHz траеше 1.5 – 2 часа. Откако ќе се искомпајлира, во /usr/src/ ќе ни се создадат 2 нови .deb фајлови кои во мојот случај беа:

linux-image-2.6.27.7-it_2.6.27.7-it-10.00.Custom_i386.deb
linux-headers-2.6.27.7-it_2.6.27.7-it-10.00.Custom_i386.deb

Првата архива е самиот компајлиран кернел која ќе ја инсталираме со:

dpkg -i linux-image-2.6.27.7-it_2.6.27.7-it-10.00.Custom_i386.deb

При инсталација ќе ни се појави порака дека /boot/grub/menu.lst фајлот треба да се измени (претпоставувам дека користите GRUB boot loader) одберете да се измени т.е. да се замени со новиот.

Следно, ги инсталираме хедерите:

dpkg -i linux-headers-2.6.27.7-it_2.6.27.7-it-10.00.Custom_i386.deb

Следно што правиме е да го рестартираме компјутерот и да го одбереме новиот кернел од менито.

Вториот начин, или оној старомодниот кој ми е најомилен на мене е следниот:
Откако го затвораме прозорецот за конфигурирање, во истиот терминал, на истата локација каде што бевме претходно (/usr/src/linux) пишуваме

make

и компајлирањето почнува. Откако овој дел ќе заврши треба да ги инсталираме модулите за новиот кернел. Тоа го правиме со:

make modules_install

Откако ќе се искомпајлира, се создава слика на кернелот во arch/i386/boot/bzImagе. Сега сликата и System.map фајлот (System.map.x е користен од апликации за логирање на пораките од кернелот) треба да ги копираме во /boot :

cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.27.7
cp System.map /boot/System.map-2.6.27.7

Сега треба да го направиме initrd дискот кој го вметнува кернелот во меморија. Тоа го правиме со :

mkinitramfs -o /boot/initrd.img-2.6.27.7 2.6.27.7

За крај, треба да го едитираме нашиот конфигурациски фајл за boot loader-от и со тоа заврушуваме и со овој начин на компајлирање. Пример за GRUB:

Ги додаваме следниве линии во /boot/grub/menu.lst:

title Мојот
кернел 2.6.27.7

root (hd0,1)

kernel /boot/vmlinuz-2.6.27.7 root=UUID=54193bf9-a011-4de3-9c88-19c8b0d272a4 ro quiet
initrd /boot/initrd.img-2.6.27.7

Зачувајте, рестартирајте и одберете го новиот кернел.

Сега успешно компајлиравме Linux кернел. Но секако мора нешто да се напомене, при компајлирањето, сите модули кои беа компајлирани од програми на претходниот кернел, за новиот треба да се прекомпајлират. Во нив спаѓаат и графичкити драјвери, така да не се плашете ако го стартувате компјутерот со новиот кернел и десктопот се поремети или воопшто не се вклучи. Реинсталирајте ги драјверите и Xorg ќе се среди.

Секои забелешки, критики и коментари се добредојдени. Слободно пратете ми ги на aleksandar@it.com.mk

Коментирај

Вашата адреса за е-пошта нема да биде објавена.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Слични статии