Anunţ

Caută printre mesajele de pe forum înainte de a scrie unul nou!
Formulează corect întrebarea sau problema pe care o ai.
Respectă regulile forumului și Codul de Conduită!

#1 01 Dec 2010 22:21:54

V3n3RiX
Oaspete

How to: Compilarea unui kernel Linux

Fiecare distributie are unelte specifice pentru a compila un kernel din surse. Voi incerca sa descriu aici compilarea unui kernel in Ubuntu/Debian . Vom folosi sursele nemodificate de pe www.kernel.org, vom aplica diferite patch-uri si vom genera pachetele deb pe care le putem da prietenilor s.a.m.d.


NOTA : In tutorial voi folosi aptitude cand este nevoie de instalarea unor pachete. Intrucat acesta nu se mai gaseste implicit in Ubuntu 10.10 inlocuiti aptitude cu apt-get, sau mai simplu, instalati aptitude.

Cod:

sudo apt-get install aptitude

Pentru inceput este nevoie de cateva unelte pentru procesul de compilare :

Cod:

sudo aptitude install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential

Apoi  ne autentificam ca root si putem incepe:

Cod:

sudo su -
cd /usr/src

Compilarea kernelului Linux se face in /usr/src , de aceea am navigat catre acel folder dupa autentificarea ca root.

Sa presupunem ca dorim sa compilam kernelul 2.6.36.1. Ca patch vom folosi patchsetul CK creat de Con Kolivas. Acesta include printre altele si un alt scheduler, BFS.

Se descarca sursele kernelului de pe www.kernel.org :

Cod:

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

Se descarca si patchsetul CK :

Cod:

wget -c http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/2.6.36/2.6.36-ck2/patch-2.6.36-ck2.bz2

NOTA : - cine doreste poate sa foloseasca patchul minune de 200 de linii. De asemenea se pot aplica si mai multe patchuri. Eu folosesc patchsetul CK in acest tutorial deoarece este mai simplu.

Avem sursele, avem patch-ul, deci sa incepem :

Cod:

tar zxvf linux-2.6.36.1.tar.bz2
ln -s linux-2.6.36.1 linux
cd /usr/src/linux

Am dezarhivat kernelul, am creat un symlink numit linux si am intrat in sursele kernelului. Acum sa aplicam patch-ul :

Cod:

bzip2 -dc /usr/src/patch-2.6.36-ck2.bz2|patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.36-ck2.bz2|patch -p1

Prima linie verifica daca patchul se poate aplica fara nicio eroare. Astfel nu riscati sa stricati sursele daca ati descarcat un patch gresit. Putin probabil, dar e bine sa fim precauti. A doua linie aplica patch-ul asupra surselor kernelului.

Acum vine partea cea mai dificila si anume configurarea noului kernel. Pentru inceput ar fi bine sa folositi configuratia kernelului pe care il rulati deja.

Cod:

cp /boot/config-`uname -r` ./.config

Apoi rulam :

Cod:

make menuconfig

Aceasta ne va aduce in fata meniul de configurare al noului kernel. Navigati pana la Load an Alternate Configuration File si alegeti .config . Dupa aceea puteti naviga prin optiuni si sa va costumizati kernelul dupa cum doriti. Puteti adauga suport pentru diferite componente, in caz ca kernelul cu care vine distributia le suporta, sau puteti elimina suportul pentru componentele pe care nu le aveti.

NOTADe asemenea puteti sa compilati un kernel super usor, care sa contina doar modulele pe care le folositi. Va rezulta un kernel cu 70-80 de module. Compilarea lui va dura extrem de putin si va fi foarte rapid. Se va instala mult mai repede decat un kernel obisnuit deoarece ramdiskul creat va contine putine module si va ocupa foarte putin spatiu pe disc.
In contrast kernelul cu care vine Ubuntu implicit contine cam 2600-2700 de module pe care probabil nu le veti folosi niciodata. Este un lucru bun insa, deoarece ei incearca sa acopere cat mai multe configuratii posibile folosind un singur kernel.

Dupa ce ati terminat de configurat kernelul, alegeti Exit si raspundeti cu Yes la intrebarea
Do you wish to save your new kernel configuration?

Apoi se poate incepe compilarea :

Cod:

make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

Dupa --append-to-version puteti pune orice doriti pentru a identifica noul kernel, dar trebuie sa inceapa cu un minus (-) si sa nu contina spatii. Poate fi nickul de pe forum, etc. Veti avea kernel 2.6.36.1-nick .

Acum trebuie sa aveti rabdare, compilarea unui kernel poate dura cateva ore in functie de viteza procesorului si de configuratia aleasa. Dupa terminarea compilarii in /usr/src se vor gasi doua pachete deb. Unul va contine kernelul, iar celalalt va contine headerele necesare compilarii de module pentru kernel (gen vbox, nvidia).

Se instaleaza cele doua pachete :

Cod:

sudo dpkg -i linux*deb

Grub ar trebui sa detecteze noul kernel si sa genereze grub.cfg in consecinta, dar pentru orice eventualitate rulati si un :

Cod:

sudo update-grub

La reboot veti putea alege intre vechiul kernel, si noul kernel proaspat compilat. Daca totul este in regula puteti dezinstala vechiul kernel. Puteti chiar sa oferiti cele doua pachete deb si altor utilizatori sa beneficieze de munca voastra.

Cum fac eu, cand am timp si chef de compilari de ore intregi. Succes tuturor!

Editat ultima oară de V3n3RiX (02 Dec 2010 19:42:44)

 

#2 02 Dec 2010 07:10:36

(--eRRoR--)
Membru
Locaţie: Petrosani/Hunedoara
Înregistrat: 02 Aug 2010
Mesaje: 41
Site web

Re: How to: Compilarea unui kernel Linux

chiar cautam un tutorial


Cica nu exista oameni fara minte, doar oameni care nu si-au gasit inca manualul de utilizare.

Offline

 

#3 02 Dec 2010 09:50:04

ropetili
Membru
Înregistrat: 10 Nov 2009
Mesaje: 515

Re: How to: Compilarea unui kernel Linux

V3n3RiX,
Ai ca intreci masura la compilari.... wink Sa stii ca recent cautam detalii despre asta. Astept...

Offline

 

#4 02 Dec 2010 19:43:15

V3n3RiX
Oaspete

Re: How to: Compilarea unui kernel Linux

*Bump*

Sa stie lumea ca e gata tutorialul :-P

 

#5 02 Dec 2010 19:55:58

Iulian62
Membru
Locaţie: Iasi
Înregistrat: 12 Nov 2009
Mesaje: 193

Re: How to: Compilarea unui kernel Linux

E putin mai simplu decat celalalt tutorial cu "creearea de pachete .deb" la acela ma incurcam putin...
Multumim de tutorial!


*Be smart and choose Linux/Open Source
*Choose Freedom

Offline

 

#6 07 Dec 2010 09:26:53

kkady32
Membru
Înregistrat: 11 Nov 2008
Mesaje: 320

Re: How to: Compilarea unui kernel Linux

pt cei ce vor sa compileze un kernel intr-un mod simplist si automatic:
http://linuxpoison.blogspot.com/2010/12 … +Poison%29

Offline

 

#7 07 Dec 2010 12:00:37

XeNNo
Membru
Locaţie: Navodari - Constanta
Înregistrat: 03 Oct 2009
Mesaje: 881
Site web

Re: How to: Compilarea unui kernel Linux

Intrebare?
Daca apare vreun update de kernel in Ubuntu imi va aparea la updates ?
Pentru ca de exemplu daca fac aceasta compilare si instalez kernelul meu, pentru ca mai apoi sa nu fiu atent si sa dau ceva de genul

Cod:

sudo aptitude update && sudo aptitude upgrade -y

ma voi trezi cu un nou kernel ?
Ar trebui sa fiu atent la update-uri?


EN | RO |

Offline

 

#8 07 Dec 2010 12:17:22

V3n3RiX
Oaspete

Re: How to: Compilarea unui kernel Linux

Nu...daca dezinstalezi versiunea din repo nu vei mai primi actualizari pentru kernel...ramai doar cu cel compilat de tine...

 

#9 07 Dec 2010 22:10:59

satwien
Membru
Locaţie: Bucuresti
Înregistrat: 21 May 2009
Mesaje: 565

Re: How to: Compilarea unui kernel Linux

Imi da o eroare:

Cod:

root@ubu:/usr/src# tar zxvf linux-2.6.36.1.tar.bz2
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
root@ubu:/usr/src#

Am descarcat fisierul de doua ori, nu pare a fi eroare de download. Ce sa-i fac?


Edit 1
Am reusit sa dezarhivez folosind Gnome Commander, merg mai departe ...

Edit 2
Doua mici corectii:
1. Inainte de comanda de instalare, trebuie data comanda cd .. (pachetele deb sunt un nivel mai sus).
2. La comanda de instalare, din viteza ai scapat punctul intre * si deb.
In rest, compilarea si instalarea au mers fara probleme. Multumesc.

Edit 3
Buteaza, incarca SO-ul pana la un punct, dupa care se opreste, cica UUID-ul nu este corect, probabil cand face mount pentru partitiile de pe HDD. Hmmm, acum nu mai am timp sa sap, trebuie sa fug la servici.

Editat ultima oară de satwien (08 Dec 2010 08:31:37)


Ubuntu 10.10 Maverick Meerkat (x86_64 Desktop)
Q9650 OC 3.9 GHz (racire pe apa) / nVidia GT240 / P5QL Pro

Offline

 

#10 08 Dec 2010 19:44:00

d.marcu
Membru
Locaţie: Sibiu
Înregistrat: 22 Sep 2008
Mesaje: 606

Re: How to: Compilarea unui kernel Linux

Intrebare din partea unui "lenes". Exista vre-un script care sa imi detecteze hardware-ul si sa imi genereze fisierul de configurare? Nu de alta dar cand ajung la partea cu

make menuconfig

ocupa prea mult timp sa tot scot din optiuni. Sau vre-un program in care sa trec manual ce hardware sa suporte si sa scoata restul.


debian wheezy amd athlon 64 2.4 Ghz, 3 GB RAM,
nvidia GT 520 1 GB, sunet Creative Audigy SE CA0106

Offline

 

#11 08 Dec 2010 20:44:46

V3n3RiX
Oaspete

Re: How to: Compilarea unui kernel Linux

Exista in kernel o functie care te ajuta sa il compilezi doar cu modulele care le ai incarcate. Adica care se limiteaza doar la hardware-ul tau. Insa trebuie sa incarci manual unele module care nu tin de hardware. Cum ar fi isofs pentru a putea citi CD-uri, vfat pentru a putea citi stickuri de memorie. De asemenea exista un script care tine minte toate modulele care le-ai folosit vreodata. Adica, tu pornesti cu kernelul implicit ubuntu, bagi cd-uri, stickuri, tot ce crezi tu ca ai putea folosi, iar el tine minte aceste module intr-o baza de date. Apoi daca doresti sa compilezi kernelul, poti citi modulele din acea baza de date si sa le activezi doar pe acelea.

Ti-am facut un deb cu scriptul, intrucat contine si un fisier de configurare si sa nu te chinui cu plasatul fisierelor.

http://dl.dropbox.com/u/6539285/Debian/ … l_i386.deb

Cum il folosesti?

Il instalezi, apoi din terminal rulezi :

Cod:

sudo modprobed_db

Vei obtine ceva de genul :

Cod:

No db present so making /var/log/modprobed.db
The db currently contains this many records: 69

Apoi vei vedea ca in /var/log/modprobed.db se gaseste o lista cu modulele tale. Adaugi in continuare manual modulele care te intereseaza, apoi mai tastezi odata comanda.

Exemplu :

Cod:

sudo modprobe isofs
sudo modprobed_db

Rezultat :

Cod:

The db currently contains this many records: 69
New modules detected.  Updating db...
The db now contains this many records: 70

Cand te hotarasti sa compilezi kernelul doar cu aceste 70 de module ai de facut urmatoarele :
Urmezi tutorialul meu pana la :

Cod:

cp /boot/config-`uname -r` ./.config

Asta inseamna ca ai copiat configuratia kernelului pe care il rulezi deja si vrei sa o folosesti si in compilarea noului kernel. Ca sa elimini din ea toate celelalte module si ramai doar cu cele 70 faci asa :

Cod:

cd /usr/src/linux
chmod +x scripts/kconfig/streamline_config.pl
./scripts/kconfig/streamline_config.pl > config_strip
cp config_strip .config

Apoi continui tutorialul meu incepand cu :

Cod:

make menuconfig

Daca primesti o eroare de genul :

Cod:

An error about ksource in line 118 .........

Sa nu te sperii, este ceva normal, deoarece nu gaseste si configuratia pentru eventualele module 3rd party, adica nvidia, vbox etc.

Succes! Sper ca am reusit sa ma fac inteles.

 

#12 08 Dec 2010 21:01:56

d.marcu
Membru
Locaţie: Sibiu
Înregistrat: 22 Sep 2008
Mesaje: 606

Re: How to: Compilarea unui kernel Linux

am inteles, mersi V3n3RiX


debian wheezy amd athlon 64 2.4 Ghz, 3 GB RAM,
nvidia GT 520 1 GB, sunet Creative Audigy SE CA0106

Offline

 

#13 08 Dec 2010 21:08:01

V3n3RiX
Oaspete

Re: How to: Compilarea unui kernel Linux

Exista si un inconvenient in asta totusi. Daca iti iei orice alta componenta, va fi nevoie sa recompilezi kernelul.

 

#14 08 Dec 2010 22:14:53

Ăla mic
Moderator
Locaţie: Constanța
Înregistrat: 10 Feb 2010
Mesaje: 5592

Re: How to: Compilarea unui kernel Linux

Oarecum OFF.

Întrebare : de ce nu-mi pornește "anticul" 2.6.34 pe Jolicloud 1.1 care se bazează pe 10.04 LTS  ?

2.6.34 îmi merge mie cel mai bine la toate distribuțiile bazate pe Ubuntu 10.04 instalate : Ubuntu, MInt9, Pinguy, în sensul că-mi asigură cea mai mică încărcare medie a sistemului din toate versiunile de kernel încercate (implicite sau actualizate) pe laptopul meu (Intel 2 x T7250).

2.6.35.8-1-jolicloud cu care "a venit dotat" Jolicloud 1.1 se mișcă f. bine dar, pt. aceleași activități desfășurate, încarcă sistemul de 3-4 ori mai mult ajungând chiar la valori supraunitare de 2,  3, lucru cu care nu sunt obișnuit.

.

Editat ultima oară de Ăla micu' (08 Dec 2010 22:16:58)


[REZOLVAT] ? => DONEAZĂ !   GRUB2   E1-571    Ce este un forum?   Anti-troll   Ubuntu = umanitate către ceilalți

Offline

 

#15 08 Dec 2010 22:54:19

V3n3RiX
Oaspete

Re: How to: Compilarea unui kernel Linux

Nu stiu d`astea. big_smile

Serios acum, 2.6.35 a avut unele mici probleme cu load-ul. Este la fel de performant, dar afiseaza intradevar load-uri mai mari. Eu am compilat kernelul 2.6.36, aplicand patch-ul minune de 200 de linii (o sa fac si un deb pentru doritori cand am timp si chef, deci nu imi sariti in cap), iar rezultatul e acelasi : performanta ridicata, load-uri mai mari...Cert e ca daca desktop-ul raspunde rapid si se misca cum trebuie pot sa am si load 1000. Nu imi pasa.

 

#16 08 Dec 2010 23:21:03

Ăla mic
Moderator
Locaţie: Constanța
Înregistrat: 10 Feb 2010
Mesaje: 5592

Re: How to: Compilarea unui kernel Linux

Scuze pentru OFF, da' mi s-a părut sugestivă comparația pentru-ncepători ca mine.
http://blog.scoutapp.com/articles/2009/ … d-averages
.

Editat ultima oară de Ăla micu' (08 Dec 2010 23:23:04)


[REZOLVAT] ? => DONEAZĂ !   GRUB2   E1-571    Ce este un forum?   Anti-troll   Ubuntu = umanitate către ceilalți

Offline

 

#17 19 Dec 2010 11:40:51

RHADE
Membru
Locaţie: Brașov
Înregistrat: 10 Jul 2009
Mesaje: 434

Re: How to: Compilarea unui kernel Linux

kkady32 a scris:

pt cei ce vor sa compileze un kernel intr-un mod simplist si automatic:
http://linuxpoison.blogspot.com/2010/12 … +Poison%29

Completare cu un tutorial mai detaliat smile
http://www.webupd8.org/2010/12/how-to-c … -easy.html


Prostia înseamnă să faci același lucru în mod repetat, așteptând rezultate diferite.

Offline

 

#18 01 Jan 2011 14:34:49

SergiuM
Oaspete

Re: How to: Compilarea unui kernel Linux

Salut, am incercat si eu, mi-a iesit ceva dar: nu l-am putut face sa-mi recunoasca placa video, am dezinstalat-o si reinstalat-o de 2 ori , nu vroia sa activeze efectele compiz. La reboot imi apareazu pe Plymouth alea cu stoping bla bla , dezactivating swap. Dupa ce se incarca Bios-ul aparea geva gen: could not mount nush ce ext2 ffs , trecea peste . Cred ca am gresit pe undeva, mai exact

Cod:

Navigati pana la Load an Alternate Configuration File si alegeti .config

dupa asta am trecut direct la compilare... Inca ceva: am pus patch-ul ala de 200 de linii pe 2.6.36.2 , am vazut ca nu vrea sa activeze efectele compiz l-am dezinstalat din Synaptic, a fost patchuit si 2.6.32-27 ? intreb asta fiindca vad cpu1 si cpu2 lucrand in tandem ( stiu ca pare o prostie dar nah intreb big_smile ) .

 

#19 02 Jan 2011 12:02:19

SergiuM
Oaspete

Re: How to: Compilarea unui kernel Linux

Am recompilat kernelul si merge tot. Se simte un puls de viteza.

 

#20 02 Jan 2011 12:09:45

HeX
Membru
Înregistrat: 20 Jul 2010
Mesaje: 61

Re: How to: Compilarea unui kernel Linux

Metoda cu compilatu din /usr/src nu este cam outdated?
Am citit ca se poate compila ca root din /usr/src dar cel mai curat si simplu ar putea fi din Home ca user simplu de asemenea uni sunt de parere ca /usr/src este cel mai ok si metoda preferabila voi ce parere aveti?


Utilizator L I N U X din 29 August 2010 !
Linux Registered User #521630
Ubuntu 13.04

Offline

 

#21 02 Jan 2011 16:45:54

TARA24.
Membru
Înregistrat: 23 Dec 2010
Mesaje: 973

Re: How to: Compilarea unui kernel Linux

@Hex
Da, ai dreptate.
Compilarea KERNEL-ului se face din home-ul Userului ne fiind necesar in /usr/src/ nici macar nu ai nevoie de root pentru a compila Kernelul.
Doar la instalarea noului Kernel ai nevoie de root sau sudo.


Orice decizie pe care esti pe cale sa o iei, gandeste-o de cel putin 3 ori.
Din momentul in care ai luat-o nu mai conteaza de cate ori ai gandit-o.
Fi destept, foloseste ce ti se potriveste nu ce ti se impune.

Offline

 

#22 03 Jan 2011 10:11:36

V3n3RiX
Oaspete

Re: How to: Compilarea unui kernel Linux

Sa imi dati de stire cand o sa puteti sa aplicati patch-uri daca compilati in home ok? Pana atunci va urez succes la compilari din /usr/src , intrucat asta este metoda standard. Daca vreti puteti sa il compilati si out-of-tree in /opt , dar asta nu e problema mea.

Editat ultima oară de V3n3RiX (03 Jan 2011 10:15:42)

 

#23 03 Jan 2011 15:09:54

TARA24.
Membru
Înregistrat: 23 Dec 2010
Mesaje: 973

Re: How to: Compilarea unui kernel Linux

V3n3RiX a scris:

Sa imi dati de stire cand o sa puteti sa aplicati patch-uri daca compilati in home ok? Pana atunci va urez succes la compilari din /usr/src , intrucat asta este metoda standard. Daca vreti puteti sa il compilati si out-of-tree in /opt , dar asta nu e problema mea.

Ciudat ca eu nu mai compilez un kernel din /usr/src inca de la versiunea 2.4, iar legat de patch nu stiu ce probleme intampini deoarece eu nu am probleme.
EG:

Cod:

zcat ../patch-2.x.x.x.blab_bla.gz | patch -p1

Cei care chiar nu se descurca pot foarte bine creea un symbolic link din locatia de unde face compilarea in /usr/src

Editat ultima oară de TARA24. (03 Jan 2011 15:18:23)


Orice decizie pe care esti pe cale sa o iei, gandeste-o de cel putin 3 ori.
Din momentul in care ai luat-o nu mai conteaza de cate ori ai gandit-o.
Fi destept, foloseste ce ti se potriveste nu ce ti se impune.

Offline

 

#24 28 Jan 2011 18:38:54

claunick
Membru
Locaţie: Brasov
Înregistrat: 30 Nov 2010
Mesaje: 272
Site web

Re: How to: Compilarea unui kernel Linux

Eu, mai mult ca sigur am facut ceva gresit la compilarea unui nou Kernel. Cum procedez acum sa revin la kernelul vechi. Spun asta ptr ca in momentul in care-am vrut sa pornesc virtualbox mi-a dat mesajul asta
Pot oare sa repar ceva pe-aici, sau ma apuc de reinstalarea Ubuntu?

Offline

 

#25 28 Jan 2011 18:40:41

V3n3RiX
Oaspete

Re: How to: Compilarea unui kernel Linux

Nu e nimic gresit. Dai asa :

Cod:

sudo /etc/init.d/vboxdrv setup

Asteapta un pic sa termine operatiunea, apoi incearca sa pornesti iar masina virtuala.

 
Feed

Antet forum

Powered by FluxBB