Linux Gazette Prevodi
Sastavljanje Linuks jezgra (kernela)
By R. Krishnakumar
Ovaj članak je za one koji su novi u svetu igranja sa Linuksom i hoće da sastave Linuks jezgro iz izvornih fajlove. Objašnjeni su razni postupci od nabavke izvornih fajlova do startovanja novog imiga jezgra. Takođe su data uputstva za čišćenje izvornog koda, sastavljanje jezgra sa previše dodatnih informacija, itd.

1. Preuzimanje izvornog koda jezgra

Da bi smo sastavili novo jezgro Linuksa, prvo treba da preuzmemo izvorni kod. Možemo ga naći na www.kernel.org. Sajt sadrži sve verzije izvornih kodova. Na primer, recimo da hoćemo da sastavimo verziju 2.6.9 Linuksovog jezgra. Znači treba da preuzmemo 2.6.9 izvorni kod sa http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.9.tar.bz2

Bolje je preuzeti bzip-ovanu verziju, jer je bolje sabijena nego gzip-ovan kolega, tako da je preuzimanje brže. Možeš koristitu komandu wget sa komandne linije

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.9.tar.bz2

Pošto si preuzeo izvor jezgra, traba da ga "bunzip" i "untar". Uradi

tar xvjf linux-2.6.9.tar.bz2

Opcija "x" je za "untar", "v" je za dobijanje više informacija na ekranu, "j" je za to da "bunzip" ide pre "untar" i "f" je za označavanje fajla.

Fajl će biti otpakovan u direktorijum linux-2.6.9. Idi tamo sa komandon "cd" (znači "change directory" ili promeni direktorijum).

2. Konfiguracija jezgra

Pre sastavljanja, jezgro treba da se konfiguriše. Tokom konfiguracije, mi ćemo izabrati delove koji nam trebaju. Recimo da koristimo ext3 fajl sistem. Znači treba da izaberemo podršku za ext3 tokom konfiguracije. Obično koristimo komandu koja nas vodi na ekran za konfiguraciju.

make menuconfig

Postoje i druge opcije kao 'make xconfig' and 'make config'. Prva počinje konfiguraciju u grafičkom modu, a druga u tekstualnom. Znači kada izaberemo delove jezgra koji nam trebaju, onda izlazimo iz konfiguracionog ekrana. Ne zaboravi da pre izlaska sačuvaš izabranu konfiguraciju.

Posle opisane konfiguracije jezra, možemo naći fajl .config u prvom gornjem direktorijumu izvornih fajlova.

Ovo je konfiguracioni fajl. Sadrži razne opcije i njihove statuse (bez obzira da li su izabrane ili ne). Na primer, ako izaberemo PCI podršku u našem jezgru, onda imamo liniju:

CONFIG_PCI=y

u .config fajlu. Slično ovome, opcije koje nisu izabrane imaće informaciju da nisu potrebne. Ako nismo izabrali podršku za XFS fajl sistem, onda imamo liniju

# CONFIG_XFS_FS is not set

Odlična karakteristika jezgra 2.6 je da ako koristimo "make menuconfig" (ili xconfig ili config) po prvi put, onda nam ekran pokazuje trenutnu konfiguraciju jezgra. U mom slučaju, ja imam Fedora Core 1 sistem. Moje jezgro je '2.4.22-1.2115.nptl'. Tako da kada je pokrenem 'make menuconfig' po prvi put, ekran za konfiguraciju sadrži opcije iz '/boot/config-2.4.22-1.2115.nptl'.

3. Praviti zavisne programe (zavisnike)

Ovo je neophodno u jezgrima pre verzije 2.6 (ja ovde govorim samo o stabilnim serijama jezgra). Na primer, ako koristimo jezgro verzije 2.4, onda posebno i izričito moramo praviti zavisnike. Moramo koristiti komandu:

make dep

Ovo će napraviti zavisnike. Ovaj korak se može preskočiti u jezgru 2.6. Finalno pravljenje imidža jezgra 2.6 automatski kreira zavisnike.

4. Pravljenje finalnog imidža

Možemo napraviti razne tipove imidža jezgra. Možemo praviti prost imidž, ili sažetu/kompresovanu verziju, obično izbor pada na sažetu verziju ili 'bzImage'. bzImage imidž se pravi sa komandom

make bzImage

U verziji 2.6, ovaj korak će takođe napraviti zavisnike pre pravljenja bzImage imidža.

Kada je sastavljenje zavrženo, možemo naći imidž jezgra u arch/i386/boot/bzImage (važi za procesor tipa 386 - Pentium, AMD, itd).

5. Sastavljanje i instaliranje modula

Ako smo u delu konfiguracije izabrali neke delove da budu moduli jezgra, onda ih moramo sastaviti. To se radi sa komandon:

make modules

Ova komanda sabira komponente (koje su izabrane za sabiranje modula) u module. U verziji 2.4 rezultat su .o fajlovi. Ali u verziji 2.6, fajl je .ko modul. Na primer, ako smo izabrali mrežne drajvere za Realtek kartu da budu sabrani kao moduli, onda posle komande 'make modules' u direktorijumu 'driver/net/' nalazimo fajl 8139too.o ako je verzija Linuks jezgra 2.4 ili 8139too.ko ako je verzija 2.6. Posle sabiranja modula, vreme je za njihovu instalaciju sa komandom (kao korisnik root):

make modules_install

Ovo će instalirati module i ostale neophodne fajlove u /lib/modules/2.6.9 direktorijum.

6. Početno startovanje (boot) iz novog jezgra

Pošto smo završili sa instalacijom modula, idemo na automatsku instalaciju jezgra sa komandom

make install

Ovo će nadograditi imidž jezgra u /boot području, nadograditi konfiguracioni fajl za učitavanje početnog startovanja (lilo.conf ili grub.conf) i onda uraditi neophodne korake da bi novo jezgro moglo da se startuje.

Posle ovoga treba restartovati mašinu. Pri novom startovanju, start meni će nas dati opciju da izaberemo novo sabrano jezgro. Izaberemo tu opciju i to je to. Nađemo se u jezgru koje smo sami sabrali.

7. Ručna instalacija jezgra

U slučaju da 'make install' ne radi ili automatska instalacija ne radi iz nekog drugog razloga, onda treba da probamo ručnu instalaciju. Na primer, ako koristimo "grub", onda treba da kopiramo bzImage u particiju za početno startovanje i zatim podesimo '/etc/grub.conf' tako da je fajl svestan prisustva novog imidža. Ako koristimo "lilo", onda treba da kopiramo bzImage u lokaciju iz koje se startuje, pa zatim podesimo lilo.conf fajl i pokrenemo komandu "lilo", što će potvrditi da kada sledeći put pokrenemo mašinu, dobijamo novi imidž kao opciju za startovanje. Sledi komanda koju pokrećemo kao root u slučaju da koristimo lilo učitivač:

cp -a arch/i386/boot/bzImage /boot/bzImage-2.6.9

Posle ovoga dodajemo sledeće linije u /etc/lilo.conf

image=/boot/bzImage-2.6.9
        label=2.6.9-kernel
        root=your_root_disk
I posle ovoga pokrećemo komandu

lilo -v

Posle ovoga restartujemo mašinu. Lilo će nas pitati za opciju startovanja, mi biramo '2.6.9-kernel' i startujemo se u novom jezgru.

8. Sabiranje sa dosta dodatnih informacija

Sabiranje jezgra je vrlo tiho. Tokom sabiranja jezgra, nema mnogo informacija na ekranu.

#make bzImage
  CHK     include/linux/version.h
  UPD     include/linux/version.h
  SPLIT   include/linux/autoconf.h -> include/config/*
  CC      scripts/mod/empty.o
  HOSTCC  scripts/mod/mk_elfconfig
  MKELF   scripts/mod/elfconfig.h
  HOSTCC  scripts/mod/file2alias.o
  HOSTCC  scripts/mod/modpost.o
  HOSTCC  scripts/mod/sumversion.o
  ....
  ....  
Ako nas zanimaju komande korišćenje tokom sabiranja, onda treba da koristimo opciju sabiranja koja daje dodatne informacija. Opcija je:

make bzImage V=1

Ovo pokazuje komande koje se izvršavaju tokom sabiranja. Evo isečka sabiranja:

< ..odsečak..>
make -f scripts/Makefile.build obj=init
  gcc -Wp,-MD,init/.main.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude  -Wall 
  -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -pipe -msoft-float 
  -mpreferred-stack-boundary=2  -march=i686 -Iinclude/asm-i386/mach-default -O2 
  -fomit-frame-pointer     -DKBUILD_BASENAME=main -DKBUILD_MODNAME=main -c -o init/main.o 
  init/main.c
  CHK     include/linux/compile.h
  UPD     include/linux/compile.h
  gcc -Wp,-MD,init/.version.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude  -Wall
  -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -pipe -msoft-float
  -mpreferred-stack-boundary=2  -march=i686 -Iinclude/asm-i386/mach-default -O2 
  -fomit-frame-pointer     -DKBUILD_BASENAME=version -DKBUILD_MODNAME=version -c -o 
  init/version.o init/version.c
< ..odsečak..>
9. Čišćenje izvora fajlova jezgra

Ponekad kada završimo sabiranja jezgra iz izvornih fajlova, mi hoćemo da očistimo fajlove objekata i druge privremene fajlove. Za to koristimo komandu:

make clean

Ovo uklanja privremene fajlove ali čuva konfiguracione. Ako hoćemo potpuno čišćenje, na primer da povratimo izvorne fajlove na stanje pre sabiranja, onda koristimo komandu

make mrproper

Ova komanda bukvalno briše sve privremene, konfiguracione i razne fajlove koji su sačuvani kao kopije. Znači posle ove komande, izvorni fajlovi su isto kao što su bili posle preuzimanja sa sajta.

10. Zaključak

Videli smo kako da preuzmemo izvorne fajlove za Linuks jezgro, kako da if konfigurišemo, kako da saberemo imidž jezgra i module, kako da prvi put startujemo novo jezgro, i kako da podesimo sabiranje sa mnogo više informacija. Takođe smo videli kako da očistimo privremene i konfiguracione fajlove nastale tokom sabiranja. Sledeći korak za one koji hoće više, je izmena izvornih fajlova i eksperimentisanje sa njima.
Napomena prevodioca:
Ја sam 100% amater u prevođenju i veoma se dvoumim kada treba da prevedem neke reči karakteristične za oblast računara.
Biće mi drago ako ima onih koji su veštiji u prevođenju i voljni da razvijaju ovaj sajt.