Šta je novo?

Kompajliranje Linux kernela na Ubuntu

Milos_SD

Slavan
Učlanjen(a)
15.02.2005
Poruke
653
Poena
320
Moja oprema  
Mobilni telefon
Samsung Galaxy S8
Pristup internetu
  1. Kablovski internet
Trenutna stabilna verzija kernela: 2.6.31

Starija stabilna verzija kernela: 2.6.30.7

Trenutna razvojna verzija kernela: Nema

Danasnja Linux-next verzija (patch): next-20090923 | Base: 2.6.31

Link ka HowTo za old school kompajliranje kernela (vazi za sve distribucije)


Pitate se verovatno zasto biste kompajlirali kernel kada vec postoji generic. Neki od razloga su: Ubuntu nije bas poznat po update-u na novi kernel u toku trajanja trenutne verzije, a vi zelite da stavite novi kernel jer je u njemu podzana wifi kartica koju imate, dok u starom kernelu nije. Dodatne optimizacije i ubrzanja, ispravljeni bug-ovi, avanturistickog ste duha, i tako dalje. Ovo uputstvo bi trebalo da vam pokaze kako se to "famozno" kompajliranje kernela radi. Vecina sigurno misli da je to veliki bauk, ali posle ovog uputstva necete tako misliti. ;)
Pa da krenemo. :D

1) Instaliranje potrebnih paketa:
Kod:
sudo apt-get install build-essential bin86 kernel-package libqt3-headers libqt3-mt-dev wget libncurses5 libncurses5-dev

2) Prebacite se u direktorijum u kojem zelite da vam bude kernel source. Neki ovde predlazu da to bude /usr/src, ali cu ja u ovom uputstvo uraditi tako da to bude u folderu KERNEL koji ce da se nalazi u vasem home direktorijumu.
- Otvorite terminal: Applications -> Accessories -> Terminal
-Pravimo direktorijum KERNEL:
Kod:
mkdir KERNEL

3) Da ne bi uvek pisali sudo pre svake komande, ukucajte
Kod:
sudo su
da postanete root.

4) Sada cemo uci u naprevljen KERNEL direktorijum, skinucemo i otpakovacemo najnoviji (u toku pisanja ovog uputstva, ali cu ga update-ovati uvek kada izadjene nova revizija) kernel:
Kod:
 cd KERNEL
Kod:
wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.5.tar.bz2 && tar -xvjf linux-2.6.30.5.tar.bz2

5) Sada cemo da udjemo u direktorijum linux-2.6.30.5:
Kod:
cd linux-2.6.30.5

6) Sledeci korak je importovanje konfiguracije i opcija trenutnog kernela:
Kod:
cp /boot/config-$(uname -r) .config && yes "" | make oldconfig

7) Sada cemo ukljuciti graficki konfigurator opcija kernela da podesimo kernel po nasem ukusu:
Kod:
make xconfig

8 ) Otvorice vam se graficki prozor u kome cete imati mnogo opcija za ukljucivanje i iskljucivanje. Ovde cu navesti samo neke vaznije stvari:

- Prvo sto cete uraditi jeste da pritisnete CTRL+F i trazite rec "debug" (bez navodnika naravno), kliknete na Search i iskljucite sto vise opcija koje u sebi imaju red "debug", ovo ce vam mnogo smanjiti velicinu kernel image-a.
- Nakon toga izadjite iz search prozora i
. Tu cete naci opciju
Optimize for size
i stikliracete je.
- Sledeca stvar je da idete u
Processor type and features
i tu cete ukljuciti (ako vec nije ukljuceno):
Tickless System (Dynamic Ticks) i High Resolution Timer Support
Onda cete u delu
Processor family
izabrati familiju vaseg procesora.
Sledece sto trebate da uradite jeste da u
Timer frequency
izaberete 1000Hz.
- Sada idite u
Paravirtualized guest support
i iskljucite
Xen quest support
inace vam se kernel nece boot-ovati. :)

To bi otprilike bilo najvaznije, sada mozete da malo istrazujete i iskljucite neke drajvere za hardware koji nemate, npr. za web kamere i TV kartice koje nemate, ili ako nemate wireless karticu iskljucite Wireless opciju i tako dalje ... Istrazujte malo. ;)

Ako imate Ubuntu 8.10 onda nemate ukljucenu podrsku za ext4 fajl sistem, tako da idite u
i ukljucite sve opcije koje imaju ext4 u sebi, osim debuging opcije.

9) Kada ste zavrsili sa podesavanjima kliknite na Save ikonicu i izadjite iz prozora.

10) Sada u terminalu ukucajte sledece:
Kod:
make-kpkg clean

- A kada to zavrsi ukucajte sledece:
Kod:
CONCURRENCY_LEVEL=3 make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

Napomena: CONCURRENCY_LEVEL je korisna opcija ako imate neki multicore procesor kao sto su Core2Duo/Quad ili AMD X2,X3,X4. Broj iza znaka "=" oznacava Cores+1, tako da, ako imate dual core upisite tu 3, a ako imate quad core upisite 5.

Opcija --append-to-version= sluzi da upisete naziv ravizije kernela. Tu mozete upisati bilo sta umesto ovog "custom", samo sto MORA da ostane "-". Na primer:
Kod:
--append-to-version=-bench
. Tako da ce vam se kernel zvati 2.6.30.4-bench.

Gore navedena komanda ce poceti kompajliranje kernela i pravljenje .deb paketa za kernel image i kernel headers. Ako imate neki multicore procesor, kompajliranje ne bi trebalo da traje duze od pola sata, ali ako imate neki single core procesor, kompajliranje ce sigurno potrajati od sat vremena, pa cak i to 4 sata ako imate neki stariji komp. Tako da mozete otici da popijete kafu, odigrate koju partiju basketa (lepo je vreme) ili sta god zelite. :)

11) Kada se kompajliranje zavrsilo, vreme je da instalirate naprevljene pakete:

Kod:
 cd ..
Kod:
 dpkg -i *.deb
*.deb opcija kaze da instalira sve .deb pakete u trenutnom folderu, a to je folder KERNEL.

Napomena: Najverovatnije svi imaju instaliran paket nvidia-common koji ce praviti probleme pri instaliranju ovog kernela, tako da pre izvrsavanja gore navedene komande "dpkg" uradite:
Kod:
apt-get purge nvidia-common
Nakon toga uradite gore navedenu dpkg komandu da bi instalirali novi kernel. Kada se kompajliranje zavrsi, instalirajte ponovo nvidia-common:
Kod:
apt-get install nvidia-common
Ne znam da li ova napomena vazi za sve, ili samo za one koji imaju Nvidia graficke, tako da je preporucljivo da svi to uradite za svaki slucaj.

12) Ako imate instaliran neki vlasnicki drajver za ATI ili Nvidia graficke kartice, obrisite ga i restartujte komp u novi kernel. Najverovatnije ce vas docekati konzola ili okruzenje bez 3D akseleracije. Da bi ste instalirali vlasnicki drajver za ATI ili Nvidia uradite sledece:

Posto nemam ATI karticu, ne znam kako se instalira, ali imate uputstvo na OVOJ stranici. Zanima vas samo deo: "Install from ati.com (latest version of drivers)"

A sto se tice Nvidia drajvera, ispratite sledece uputstvo:
http://www.ubuntu-rs.org/forum/viewthread.php?tid=6717&goto=search&pid=78339
A drajver za vasu karticu skinite sa:
http://www.nvidia.com/Download/index.aspx?lang=en-us

To bi bilo to narode. Ako budete imali bilo kakvih problema, uvek mozete izabrati -generic kernel iz grub-a. :)

Dodatak: Preporucljivo je da u make xconfig-u pretrazite sve sto ima u sebi rec "debug" i iskljucite. Pretragu vrsite preko precice: CTRL+F. Ovo je preporucljivo jer bi vam inace kernel image bio preko 100 MB, a bez oko 15-20 MB, ako ne i manje. :)
 
Poslednja izmena od urednika:
Lepo je to ali toplo ne preporucujem da ovo iko radi iz razloga stabilnosti.. Ubuntu se testira pod kernelom pod kojim je izbacen... novi kernel-> netestiran i potencijalno nestabilan sistem..
Performanse i da jesu bolje ne mobu da budu bolje od shuma, ako neki drajver sada radi super, ali novi kernel -> svi moduli koji su pre toga radili a shipovali su se sa ubuntom automatski prestaju da rade i tako dalje....
preporuka ko ne zna neka ne cacka
 
Ubuntu se testira pod kernelom pod kojim je izbacen... novi kernel-> netestiran i potencijalno nestabilan sistem..
Performanse i da jesu bolje ne mobu da budu bolje od shuma, ako neki drajver sada radi super, ali novi kernel -> svi moduli koji su pre toga radili a shipovali su se sa ubuntom automatski prestaju da rade i tako dalje....
preporuka ko ne zna neka ne cacka

Pa neznam baš?!
Recimo Slackware redovito dolazi s vanilla kernelom, eventulano s minimalnim brojem patcheva. Da li je zbog toga nestabilan?? Upravo suprotno.
S novim kernelom se buildaju i novi moduli/driveri (make && make modules && make modules_install), to je procedura, dakle nebi trebalo biti problema. Sve "vanjske" drivere je potrebno reinstalirati/rekompajlirati za novi kernel (nvidia, ati).

Prednosti kompajliranja kernela su, kako je navedeno:
- precizno podešavanje arhitekture procesora
- podešavanje koliko će memorije kernel koristiti
- biranje schedulera
- optimizacija za desktop/server upotrebu (Timer frequency/scheduler/ ...)
- uključivanje/isključivanje podrške za rad s više jezgri/procesora
- uključivanje podrške za paravirtualizaciju, ako će sustav raditi kao guest pod Xen hypervizorom
- po potrebi se mogu isključiti moduli koji se sigurno neće koristiti, a oni koji sigurno hoće (disk kontroler, file system, lvm ...) se mogu staviti u kernel image pa nema potrebe da se koristi initrd
....
 
primer : instaliran ti je proprietary driver za wifi.. instaliras novi kernel, vise ne radi posto je taj drajver stigo sa ubuntum, medjutim ne radi ti vise ni drajver za modem i sta je jos stiglo.... pitanje koliko vremena ces potrositi trazeci source tih drajvera, bildovati ih ponovo instalirati ispodesavati u odnosu na benefit od novog kernela... ja bi reko da ces time izvuci deblji kraj... neko moze da prodje dobro, u sustini benefit ne vidim...
i koliki je gain kad podesis raspolozivu memoriju i arhitekturu procesora? reko bi da ne moz ni da ga primetis :)
 
Teško je reći koliko je realno koristi, osim zadovoljstva tuniranja vlastitog kernela i znanja koje se time stiče. Recimo da ti ne treba ništa extra osim eventualno drivera za grafiku?? Mislim da bi to svako ko nije linux njubi trebao napraviti, makar zbog edukacije i upoznavanja sistema.
 
Meni sve ovo lici na narodnu "Marko Kraljevic cedi suvu drenovinu". Tako sam ja nasao neku iskasapljenu Vistu i podigao je na P-3 i 256MB RAM, pun je internet iseckanih XP verzija. Mislim da je opravdano kompajlirati kernel samo ako je masina specificne namene npr. radi samo video nadzor ili sluzi kao neki kontroler.
 
Poslednja izmena od urednika:
Slazem se... podelis disk na 5 particija i kazes , ovaj linux mi je za gledanje filmova i onda iskompajliras kernel za tu namenu, ovaj linux mi je za igranje igrica i onda cepnes drugi kernel i tako :)
jel sam te dobro shvatio :D
 
brate mili. kompajliranje kernela.....zadnji put na p2 400mhz i slack 10.2....i cemu to i dalje se pitam ,osim ako nije embedded uredjaj pa ti treba samo kao masina za slovima JEDNU aplikaciju ...nikako LAMP kombinacije ..vec nesto egzoticnije.. i cak i tada diskutabilno je govoriti o prakticnim benefitima te akcije,ali dokon popa i jarice krsti, nista pametno nisam naucio iz toga osim sistematizacije podsistema kernela i modula i njihovog nacina loadovanja u memoriju...ali to sam mogao i iz man pages i iz gugla
 
@ genuine
ne treba 5-6 particija , dovoljno je samo dodati u grub ili lilo ili loadlin odgovarajuce linije :D

sad sto je sve to jedan isti sistem pa su aplikacije kompajlirane prema drugom kernelu to nema veze :D...vazno je da ja imam x kernela i sistem za pravog muskarca kako stoji u opisu podforuma :D
Salim se malo ali salu na stranu, jednostavno u vecini situacija nema potrebe za tim osim u svrhe edukacije
ako sta vredi kompajlirati na linuxu onda su to aplikacije sa nazalost staticki linkovanim bibliotekama...kernel je previse low level...ne cujes ga...ne vidis ga.....a tesko da ces ga i osetiti sem u extremu
 
Poslednja izmena:
x kernela ima ovako il onako, pokupiš "novi" kernel svako malo sa redovnim update-om, osobito na distrama kao što je Fedora, OpenSuse i slične.

A sjetio sam se i jednog razloga zašto sam na Debianu bi prisiljen kompjlirati kernel ... instalacija NV drivera. Prvo se buni da headeri ne odgovaraju kernelu, zatim da verzija gcc-a kojom je kompajliran difoltni kernel nije ista ko trenutni gcc koji je na sistemu. Nema druge nego da zakompajliraš vlastiti kernel s postojećim hederima i gcc-om.
 
Kompajliranje Ubuntu, SUSE i ostalih ***** friendly distroa nema puno smisla. Ko već želi da se bavi finim tjunovanjem sistema treba da koristi distroe koje furaju takvu filozofiju (Gentoo, Slack, Arch).
 
Nazad
Vrh Dno