LAKI PINGVINI<>
052006<><>

Upoznavanje i instalacija kernela

Kad je jezgro nemoćno

Iako Linux bazirani sistemi današnjice odlično prepoznaju hardver, ponekad je potrebno izvesti posebne intervencije

Svi korisnici GNU/Linux sistema sa malo većim radnim stažom svakako se sećaju vremena kada nakon instalacije operativnog sistema skoro ništa od hardvera nije radilo kako valja. Bez malo posla po terminalu i editovanja konfiguracionih fajlova bilo je teško pokrenuti grafiku ili zvuk, da ne govorimo o USB uređajima ili, ne daj Bože, winmodemima. Mnoge distribucije, pre svega vodeća imena u user-friendly taboru, pokušavale su da na razne načine izađu na kraj s tim problemima, praveći sopstvene alatke za prepoznavanje i konfiguraciju.

Razvojem Linux jezgra (engl. kernel) unapređivana je i njegova sposobnost za automatsko prepoznavanje hardvera tako da je danas moguće instalirati neku GNU/Linux distribuciju i odmah imati kompletno funkcionalan sistem. Pored osnovnih uređaja i hardvera, to znači i prepoznavanje periferija poput štampača, skenera ili Web kamere na primer. Usled napretka samog kernela i softvera koji ga okružuje, skoro sve distribucije od početka poseduju sposobnost odlične detekcije hardvera. Neke su otišle i korak dalje, omogućavajući detaljna podešavanja uređaja u grafičkom režimu pa je podešavanje GNU/Linux mašine danas veoma lak posao.

Kako sve to radi

Kernel operativnog sistema je softver koji ima presudnu ulogu u alokaciji resursa računara. Drugim rečima, on omogućava iskorišćavanje hardvera od strane programa koje svi koristimo. Ukoliko kernel ume da komunicira sa hardverom, on će verovatno raditi, i tu dolazimo do poente cele priče. Šta činiti ako kernel ne prepoznaje neki deo hardvera? Pre nego što krenemo u razotkrivanje misterije, dotaći ćemo se još nekoliko bitnih detalja.

Za razliku od Windowsa koji sa sobom donosi drajvere samo za osnovni hardver, Linux kernel u sebi sadrži skoro sve potrebne drajvere. Linux je monolitan, što znači da je ceo kernel praktično jedan fajl i može da ima podršku za hardver na dva načina. Informacija odnosno drajver može da bude uključen direktno u njega ili da bude, grubo rečeno, zapisan u fajlu koji predstavlja kernel. Drugi način jeste omogućavanje podrške u vidu modula koji se kasnije po potrebi može učitati. Ovakav pristup omogućava smanjenje veličine kernela i direktno uključivanje podrške za esencijalne stvari kao što su platforma, procesor i slično.

Automatsko učitavanje modula je do danas dovedeno na veoma visok nivo pa se moduli podrške za pojedine uređaje automatski učitavaju kada sistem uoči njihovo prisustvo. Štaviše, međuzavisnost modula se takođe zadovoljava pa se pri priključivanju USB flash memorije, pored modula potrebnih za njen rad, učitava i modul za fajl-sistem koji je na njoj. No, neki drajveri u kernelu nemaju potpunu podršku za pojedine uređaje. Angažovanje programera koji rade na razvoju Linuxa od strane velikih hardverskih kompanija umnogome je poboljšalo situaciju, ali problemi još uvek postoje. Pojedini proizvođači uz svoje uređaje isporučuju drajvere, mada se često dešava da usled vrlo dinamičnog razvoja slobodnog softvera drajveri zastarevaju pa je najbolje potražiti ih na Webu. Svakako najveći problem danas predstavljaju softverski modemi koji zbog svoje okrenutosti ka jednom operativnom sistemu i svojstva da se oslanjaju na druge delove sistema i softver ponekad prave ozbiljne poteškoće. S druge strane, neke kompanije (poput firme nVidia) uredno ažuriraju drajvere za svoje uređaje. Da bi se ti drajveri instalirali i hardver doveo u funkciju, potrebno je napraviti određene korake bez kojih postupak neće imati pozitivan rezultat.

Srećniji scenario

Ukoliko sam Linux nema podršku za određeni uređaj, ali proizvođač ili neko drugi obezbeđuje drajvere za njega, imamo situaciju koja nije previše problematična. Iako je instalacija pojedinih drajvera za manje napredne korisnike potencijalno stresan posao, u poređenju sa dubljim hirurškim zahvatima na sistemu poput kompajliranja kernela predstavlja sitnicu. Drajveri koji ne stižu uz Linux prilikom instalacije u stvari obezbeđuju module za kernel koji se učitavaju posle njega i daju mogućnost hardveru da funkcioniše. Postoje dve krucijalne stvari koje treba obezbediti kako bi instalacija drajvera prošla kako valja: kompajler i kernel hedere.

Kompajler se isporučuje uz svaku distribuciju i zove se GCC (GNU C Compiler). Ukoliko se nekim slučajem dogodi da kompajler nije instaliran, to se vrlo lako može uraditi. U zavisnosti od distribucije i paket menadžera (SK 4/2006), treba pretražiti bazu paketa po „gcc” i rezultat pretrage će pokazati koji paket treba instalirati. Štaviše, obično postoje i metapaketi pod nazivom gcc čijom se instalacijom nedostatak rešava brzo i lako. Pored kompajlera, treba imati instaliran i make, a posao instalacije je analogan GCC-u.

Da bi drajver bio iskompajliran, potrebno je da ima određene informacije. Te informacije se nalaze u hederima kernela i potrebno ih je instalirati. U zavisnosti od distribucije, paket koji treba instalirati može se pronaći pretragom po kernel-headers ili na novijim izdanjima Debiana i Ubuntua i verovatno svim Debian baziranim pretragom po linux-headers. Treba obratiti pažnju na to da verzija hedera odgovara verziji kernela za koji se drajver kompajlira, a verzija kernela se može saznati komandom uname -r.

Ovim bi infrastruktura za kompajliranje drajvera bila obezbeđena. Najčešće problematičan hardver jesu softverski modemi za koje je često potrebno upustiti se u kompajliranje drajvera (SK 10/2005). Posle modema, verovatno najzastupljeniji hardver zbog kog treba zaviriti u terminal jesu grafičke kartice, mada dosta distribucija isporučuje ove drajvere u binarnom formatu za svoj sistem.

Operacija Linux

Neke situacije nalažu preduzimanje radikalnijih koraka od onih s kojima smo se sreli do sada. U većini situacija je to slučaj kada treba nadograditi kernel nekom mogućnošću koja podrazumevano ne postoji. Ovo je slučaj sa jednim od bootsplash sistema za Linux, na primer. Doskoro je bilo potrebno kompajlirati kernel i za neke od USB ADSL uređaja, no na sreću to više nije slučaj.

Pošto je Linux slobodan softver objavljen pod GNU GPL (SK 4/2006), njegov izvorni kôd je dostupan javnosti. Distribucije koriste izvorni kôd i pripremaju kernel u binarnom formatu jer je tako proces instalacije daleko brži. No, ukoliko korisnik želi, može sam da iskompajlira kernel iz izvornog kôda i prilagodi ga sopstvenim potrebama. Distribucije mahom isporučuju modularni kernel, što znači da je veći deo kernela iskompajliran kao modul usled velike raznovrsnosti hardvera. S druge strane, skoro sve distribucije uključuju kernel sa generalnom podrškom za generaciju procesora (i586, i686), bez obzira na konkretan model. Ukoliko je potrebno izvući apsolutni maksimum performansi, kompajliranje kernela može pomoći jer se tako može obezbediti podrška za konkretan model procesora (Athlon XP, Pentium 4, Sempron 64) i tako najbolje iskoristiti njegove mogućnosti. Pored toga, prilikom kompajliranja je moguće isključiti sve što je nepotrebno i time obezbediti maksimum performansi.

Izvorni kôd Linux kernela se može preuzeti u obliku arhive. U zavisnosti od tipa arhivera kojim je kôd zapakovan odnosno ekstenzije arhive, treba izvršiti različite komande. Za tar.gz arhivu treba pokrenuti tar -zxvf linux-2.6.xx.tar.gz, a za tar.bz2 komandu tar -jxvf linux-2.6.xx.tar.bz2. Raspakivanjem arhiva dobiće se novi direktorijum koji sadrži izvorni kôd kernela. Treba preći u njega komandom cd linux-2.6.xx. Ovde xx označava broj verzije koja je aktuelna odnosno preuzeta. Ovom prilikom govorimo o Linuxu serije 2.6 koja je najnovija i tehnološki najsavršenija. Pored preuzimanja sa zvaničnog sajta, većina distribucija isporučuje izvorni kôd kernela koji se koristi, a paket se može pronaći pretragom po „kernel-source” odnosno „linux-source”.

U situacijama kada je potrebno nadograditi kernel, sama nadogradnja u vidu nove mogućnosti se distribuira u vidu zakrpe (patch). Usled toga je pre samog procesa kompajliranja potrebno patchovati kernel. Zakrpe su obično kompresovane arhiverima gzip ili bzip2 pa se u zavisnosti od toga koriste različite komande. Patch treba iskopirati u direktorijum koji sadrži izvorni kôd kernela i ukoliko ima ekstenziju gz, kernel patchovati komandom gzip -cd patch-2.6.xx.gz | patch -p1. Ako zakrpa nosi ekstenziju bz2, treba izvršiti komandu bzip2 -dc patch-2.6.xx.bz2 | patch -p1. Ukoliko patch nije zapakovan, dovoljno je uraditi patch -p1 < patch-2.6.xx. Nakon toga kompajliranje može da počne.

Ovaj postupak se sastoji od tri komande. Prva se odnosi na konfiguraciju kernela i ujedno je prelomni deo postupka. Konfiguracija se može obaviti na više načina i odnosi se na definisanje toga šta će kernel podržavati i na koji način. Kada je konzolni režim u pitanju, najbolje je koristiti make menuconfig jer se tada konfiguracioni ekran pojavljuje u vidu menija pa je preglednost na visokom nivou. Komanda make xconfig će omogućiti konfiguraciju u grafičkom režimu, što je preporučljivo za novajlije kojima se preporučuje da prvo učitaju konfiguraciju kernela koji se koristi i na osnovu nje nastave dalje. Ovo je dobro jer samo napredni korisnici znaju da konfigurišu kernel „od nule” pa će ovako većina krucijalnih stvari ostati uključena dok korisnik treba sam da pronađe novu i podesi je (fajl sa konfiguracijom se obično nalazi u direktorijumu /boot i nosi naziv config-xxx gde xxx obično odgovara izlazu komande uname -r).

Kako bi menuconfig funkcionisao, potrebno je imati instalirane razvojne biblioteke ncurses (paket se obično zove libncurses5-dev ili slično). Pre konfiguracije treba znati šta čemu služi i da isključivanje pojedinih delova može dovesti do nemogućnosti funkcionisanja kernela. Zato se pre konfigurisanja treba dobro informisati i proučiti dokumentaciju. Nakon ovog koraka, treba kompajlirati kernel i instalirati i module komandama make bzImage, make modules i make modules_install.

Ukoliko pomenuti koraci prođu kako treba, ostaje da se iskopira fajl koji predstavlja kernel u direktorijum /boot i da se podesi boot loader. Fajl koji je u stvari novi kernel nalazi se u direktorijumu arch/i386/boot unutar direktorijuma koji sadrži izvorni kôd kernela i nosi naziv bzImage. Njega treba iskopirati u folder /boot i nazvati ga po želji, na primer vmlinux-2.6.xx. Treba imati na umu i to da ukoliko je prilikom konfiguracije kernela podrška za fajl sistem koji je na root particiji (/) iskompajlirana kao modul, treba napraviti initrd image koji će se učitati i napraviti virtuelni fajl sistem koji će omogućiti učitavanje modula za fajl sistem. Initrd se pravi komandom mkinitrd -o /boot/initrd.img 2.6.xx.

Ostaje da boot loader dobije informacije o novom kernelu. Ukoliko se koristi GRUB, treba dodati linije koje izgledaju ovako:

title   Moj distro sa novim kernelom
root    (hd0,0)
kernel  /boot/vmlinuz-2.6.xx root=/dev/hda1
initrd  /boot/initrd.img-2.6.xx

Linija initrd treba da postoji ukoliko za initrdom postoji potreba. Ako je pak boot loader LILO, treba uneti:

image = /boot/vmlinuz-2.6.xx
initrd = /boot/initrd.img-2.6.xx
root = /dev/hda1
label = Moj distro sa novim kernelom
read-only

Prilikom restarta sistema u meniju će se pojaviti i novi kernel pa bi, ukoliko je sve urađeno kako treba, on trebalo da se podigne i omogući sistemu pravilno funkcionisanje.

• • •

Konfiguracija kernela je veoma složen postupak, to jest posebna tema. Štaviše, proces kompajliranja kernela se može razlikovati od distribucije do distribucije, pre svega u načinu instalacije pratećeg softvera i lokacije i imena pominjanih fajlova. Zbog toga je neophodno konsultovati dokumentaciju ili neki od foruma kako bi detalji karakteristični za određenu distribuciju bili uočeni. Ono što je bitno jeste da ne treba prepisivati postojeći (originalni) kernel u /boot direktorijumu i konfiguracionom fajlu boot loadera jer će tako kernel koji radi ostati za svaki slučaj. Raspakivanje i kompajliranje može raditi običan korisnik, ali se instalacija kernela i modula te podešavanje boot loadera moraju odraditi pod administratorskim (root) nalogom. Na kraju treba reći da su realno male šanse da će kompajliranje ikada zatrebati prosečnom korisniku, već je deo o kompajliranju modula i drajvera za pojedine uređaje daleko bitniji. Uvek pre kupovine hardvera treba konsultovati forume i specijalizovane sajtove na kojima se nalaze spiskovi hardvera koji radi na Linuxu, kako bi kompletan sistem bio potpuno funkcionalan odmah nakon instalacije.

Ivan JELIĆ

 
Upoznavanje i instalacija kernela
Šta mislite o ovom tekstu?
Knoppix 5.0 DVD
Mandriva Linux 2006

Platforma:
GNU/Linux
Veličina:
38 MB
Cena:
kernel je besplatan
Adresa:
www .linux .org
Home / Novi brojArhiva • Opšte temeInternetTest driveTest runPD kutakCeDetekaWWW vodič • Svet igara
Svet kompjutera Copyright © 1984-2018. Politika a.d. • RedakcijaKontaktSaradnjaOglasiPretplata • Help • English
SKWeb 3.22
Opšte teme
Internet
Test Drive
Test Run
PD kutak
CeDeteka
WWW vodič
Svet igara



Naslovna stranaPrethodni brojeviOpšte informacijeKontaktOglašavanjePomoćInfo in English

Svet kompjutera