samo-opusteno Početnici u Linuxu
Pages: 1
Šta je kernel, kako se on kompajlira i sta se dobija time? By: Oasis Date: Novembar 28, 2010, 20:26:33
Šta je kernel, kako se on kompajlira i sta se dobija time?

Kako je sve vise novih korisnika Linux OS, trebalo bi da se i oni upoznaju sa mogucnoscu izmena u osnovi sistema, tj. u kernelu pogotovo ako neko zeli da recimo omoguci podrsku za svoju zvucnu ili TV karticu, podesi mrezne opcije, prilagodi sistem novim komponentama, omoguci pristup NTFS particijama, ... Ovaj tekst opisuje postupak kompajliranja kernela pod u Mandrake Linux-om ali je postupak slicani u drugim distribucijama.

Tekst se sastoji od 5 delova a to su:
1.Podesavanje kernela
2.Kompajliranje i instalacija kernela
3.Podesavanje sistema (nakon instalacije kernela)
4.Podesavanje lilo startera (boot loader-a),
5.Podesavanje GRUB startera.

Sva dodatna pitanja mozete razmotriti u Linux Kernel How To-u na srpskom jeziku koji je prilozen uz ovu poruku.

Podesavanje kernela

Ukoliko zelite da kompajlirate orginalni source sa kernel.org, onda je bolje da instalacioni source kernela koji se nalazi u '/usr/src/linux' ne dirate vec da novi kernel kompajlirate i instalirate iz svog home direktorijuma (jer su 'root' ovlascenja potrebna samo za instalaciju kernela).

Pokrenite tar xfzC [kernel-source].tar.gz u konzoli(terminalu). Ova naredba ce otpakovati source u 'linux' direktorijum.

Ukoliko ste vec kompajlirali kernel iz ovih source-ova, prvo pokrenite make mrproper da bi uklonili stare postavke . Zapamtite da 'mrproper' brise i prethodni '.config' fajl, pa ako vam je bitan bilo bi dobro da ga negde pre toga prekopirate.

Podesavanje kernela se odvija u novom 'linux' direktorijumu. U osnovi, postoje dva nacita da to uradite, kraci koji se sastoji od izmene '.config' fajla i duzi koji se sastoji od upotrebe jednog od ponudenih konfiguracionih alata. Moram reci da je za pocetnike i nove u linux svetu ova druga mnogo bolje resenje. (U Mandrake linux 8.2 to mozete uraditi iz KDE Kontrolnog centra. Startujte ga a zatim otdite na Sistem pa na Podesavanje kernela ili ako koristite engl. lokalizaciju System pa Kernel Configuration).

Pri pristup je ustvari editovanje iliti izmena kopije default kernel konfiguracionog fajla '/usr/src/linux-[...]/arch/[i386|ppc]/defconfig'. On je posebno ureden za situacije kada treba samo da izmenite nekoliko opcija i kada znate sta radite.
Kopirajte 'defconfig' fajl u vasem tekucem direktorijumu i promenite mu ime u '.config'. Ukoliko vec imate '.config' fajl od prethodnog kompajlirnja, mozete da koristite i taj, mada nije lose uraditi i backup tog fajla.
U samom fajlu pronaci cete tri tipa unosa, koji odgovaraju za tri stanja koja su moguca (ne moraju uvek da budu sva tri !): 'build into the kernel', 'build as a kernel module' i 'not included':

1. [OPTION]=y
2. [OPTION]=m
3. # [OPTION] is not set

Dakle, da bi promenili opciju sa 'build as a module' na 'build into the kernel' morate da izmenite liniju

[OPTION]=m
u
[OPTION]=y

Objasnjenja za vecinu opcija mozete pronaci u 'linux/Documentation/Configure.help'.
Izmenite sve sto zelite, zatim sacuvajte izmene a onda predite na sledece poglavlje ovog teksta.

Drugi pristup koristi jedan od ponudenih kernelovih konfiguracionih alata. Kako ste u 'linux' direktorijumu, ili pokrenite make config (konzolni alat), ili make menuconfig (takode konzolni ali sa boljim izgledom i funkcionalnoscu menija) ili make xconfig (ako ste navikli na prozore, dobar X meni, ali malo zahtevniji po pitanju memorije).

Par saveta za dobro konfigurisanje:

1.Procitajte dostupnu i online dokumentaciju.
2.Budite pazljivi sa eksperimentalnim opcijama. Samo ime govori za sebe.
3.Kreirajte module. Manji kernel je bolji, ali budite pazljivi da ne izbacite nesto sto vam je potrebno pri startanju sistema.
4.Ukoliko niste sigurni, nemojte menjati vec podesene opcije. Zavisnosti su ponekada veoma tanane i tesko se podesavaju.. Bolje je da je kernel za koji kilobajt i veci nego kernel koji ne radi dobro.

Kompajliranje i instalacija kernela

Sada sacuvajte izmene u novoj konfiguraciji. Izmenite i fajl 'Makefile' u nekom od editora i popunite vrednost za 'EXTRAVERSION' ili vam se moze desiti da dobijete dva razlicita kernela sa istim imenom.

Pokrenite : make dep && make clean && make bzImage && make modules

Vreme kompajliranja zavisi od sistema (kolicine memorije, procesora...) i konfiguracije kernela. Na vecini masina, kompajliranje traje izmedu 15 i 45 minuta (PREPORUKA: kada podesite sve izmene, zatvorite X-ove i kompajlirajte kernel u konzoli).
Ako se kompajliranje zavrsi uspesno, postanite root pomocu komande su i instalirajte kernel i njegove module:

make modules_install && make install

Poslednja komanda ce pozvati '/sbin/installkernel' skriptu preko 'linux/arch/i386/boot/install.sh' - sto ce opet pokrenuti skripte u '/usr/share/loader' za:

1. instaliranje kernela u '/boot/vmlinuz-[Version]',
2. kreiranje initrd image u '/boot' ukoliko je potrebno,
3. i dodati unose za novi kernel u '/etc/lilo.conf', '/boot/grub/menu.lst' ili '/etc/yaboot.conf' (na PPC masinama).

Podesavanje sistema

Ukoliko je sve proslo kako treba, trebalo bi da sada imate dva nova fajla u '/boot': 'System.map-[new version]' i 'vmlinuz-[new version]'.
Proverite da li su fajlovi 'System.map', 'vmlinuz' i (u starijimm Mandrake verzijama) 'modules.info' u '/boot' diremtorijumu. Ovi 'fajlovi' su ustavri samo linkovi. Dve stvari mozete da uradite:

1.Ostavite ih takve kakvi su jer bi Mandrake-ov init script treba da stavri postavi na pravi nacin, tj. da izmeni ove linkove za kernel koji startujete.
2.Izbrisite ih i izmenite konfiguracioni fajl vaseg startera (npr. lilo) da koristi tacno odredenu verziju kernela.

Ukoliko su vam potrebni SCSI uredaju pri startanju sistema (npr. SCSI hard disk) a imate iskompajliranu podrsku za SCSI kao modul, 'installkernel' skripta bi trebala da kreira novi initrd image u '/boot' direktorijumu kao i da doda potrebne linije u konf. fajl vaseg startera.
Ukoliko radije zelite da sami kreirate ovaj image, to mozete uraditi pomocu naredbe mkinitrd /boot/[name of image] [new kernel version]. Mozete izabrati bilo koje ime za image, sve dok se ono razlikuje od imena vec postojeceg fajla. Naravno, kada ga kreirate morate da izmenite i kofig. fajlove LiLo ili GNU GRUB startera da bi znali za ovaj image.
Ako imate dodatnih pitanja mozete ih postaviti na nasem forumu.

Podesavanje LiLo

'installkernel' skripta ce sama detektovati vas starter (boot loader) i podestiti njegov konfiguracioni fajl. Ukoiko ste zainteresovani kako to sami da uradite, evo kako:

Podesavanje LiLo startera se zavrsava sa izmenom '/etc/lilo.conf' fajla, bilo da ga editujete u editoru ili pomocu 'DrakBoot' alata iz 'Mandrake Kontrolnog Centra' (iliti 'DrakConf'). Prvo izmenite postavku starog kernela:

1.Promenite image=/boot/vmlinuz u puno ime kernela (starog) kernel image-a. Ovo je potrebno samo onda ako ste izbrisali 'vmlinuz' link u '/boot'.
2.Promenite label=linux u nesto tipa label=starilinx. Ovo ce vam omoguciti da pokrenete i stari kernel ukucavanjem starilinx u boot promptu.

Zatim dodajte linije za novi kernel na kraju fajla:

image=/boot/vmlinuz-[new kernel version]
label=linux
root=/dev/[root partition]
initrd=/boot/[initrd image]
readonly

'root partition' je ista kao i za stari kernel. Oznaka label=linux ce po default pokrenuti novi kernel.
initrd="/boot/[initrd image]" ce vam biti potreban samo ako se vasa instalacija GNU/Linux sistema system nalazi na SCSI disku i ako je SCSI podrska ukljucena kao modul. Ako je to slucaj apsolutno je neophodno da kreirate novi 'initrd' image sa

mkinitrd /boot/[initrd image] [new kernel version]

Ime novog ne sme da se poklapa sa imenom starog initrd image-a. Zatim uputite initrd liniju novog kernela u '/etc/lilo.conf' na ovaj novi image.

Pokrenite l ilo. Ovo morate da uradite! Ukoliko ne dobijete poruku o gresci, mozete da restartujete masinu.

Podesavanje GNU GRUB

Ukoliko koristite GNU GRUB kao starter (boot loader), dodajte ove linije u '/boot/menu.lst' (ili koristite 'DrakBoot' u 'Mandrake Kontrolnom Centru'):

title [menu entry]
kernel (hd

title odreduje kako ce se zvati vas novi kernel na meniju pri podizanju sistema. 'x' i 'y' govore GNU GRUB -u gde je '/boot', koji sadrzi kernel image, lociran: 'x' oznacava broj hard diska (u zavisnosti da li je u pitanju IDE ili SCSI disk) pocevsi od '0', 'y' je broj particije, takoze pocinje od '0'. Pa tako, (hd0,0) govori GNU GRUB-u: "potrazi prvu particiju na prvom hard disku u boot lancu". Kada jednom pronade particiju, GNU GRUB mora da zna o lokaciju i ime krenela, npr. /boot/mynewkernel.
Kako 'init', inicijalni GNU/Linux boot proces, takode mora da zna na kojoj se particiji nalazi kernel, onda morate da mu kazete sa root=/dev/hda1. Ukoliko ste kreirali ramdisk image, dodajte initrd /boot/[name of initrd image] kao i bilo koji drugi kernel parametar(e) koji su vam potrebni.
Zapamtite da ukoliko se '/boot' nalazi na prvoj logickoj particiji na hardu (/dev/hda5), linija mora da bude (hd0,4), u zavisnosti od broja primarnih particija na disku.

Izmenom broja u default polju (ili kreiranjem polja u 'DrakBoot'), mozete reci GNU GRUB-u da startuje kernel po default-u. Zapamtite da GNU GRUB posinje da broji od '0', pa da bi pokrenulinovi kernel treba da promenite, u '/boot/grub/menu.lst', broj u '1'.

Nakon svega, sacuvajte izmene i restartujte masinu.
Odg: Šta je kernel, kako se on kompajlira i sta se dobija time? By: Broker Date: Februar 08, 2011, 03:40:03
Svaka čast, odličan članak. :ok