Skocz do zawartości
surix

Kompilacja jądra

Rekomendowane odpowiedzi

Kompilacja kernela może wydawać się trudna ale tylko z pozoru ;) opiszę tutaj procedurę ^^ związaną z tzw. metodą debiana. A więc praktycznie systemy bazujące na Debianie (np. Ubuntu, Mint itp.) mają identyczną ścieżkę postępowania. System na którym kompilowałem kernel to Debian Squeeze (stable), stare jądro to 2.6.32, nowe do kompilacji to 3.1.6 ściągnięte prosto z Kernel.org.

 

Przed samą kompilacją warto wiedzieć jaki sprzęt posiadamy, służą do tego następujące polecenia:

 

cat /proc/cpuinfo	//info na temat procesoralspci 			//info na temat kart wlan, muzycznych itp.lsusb			//myszki, drukarki, modemy itp.

Powyższe informacje mogą pomóc w konfiguracji kernela pod nasz sprzęt.

 

Krok 1 to instalacja kilku paczek potrzebnych do przeprowadzenia całego procesu:

Otwieramy konsolę i zapodajemy:

 

sudo aptitude updatesudo aptitude upgrade

żeby mieć pewność że mamy świeży system, jeśli ktoś używa apt-get to może bez problemu go użyć, ważne jest to aby nie mieszać aptitude z apt-get'em. Przy wszystkich poleceniach będę używał sudo, ponieważ mam taki zwyczaj jak najmniej pracować na użytkowniku root :wink:, jeśli chcecie to pominąć wystarczy zalogować się na roota poleceniem su. Następnie:

 

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

powyższe pakiety są potrzebne do kompilacji, libncurses5-dev jest potrzebne jeżeli chcemy pracować w konsoli. Możemy go nie instalować jeśli będziemy konfigurować wszystko przez GUI (musimy mieć wtedy GTK dla Gnome lub QT dla KDE – biblioteki dla interfejsów graficznych).

 

Po zainstalowaniu musimy ściągnąć nasz kernel do kompilacji, wchodzimy na kernel.org i klikamy najlepiej na ostatnią stabilną wersję ;> lub używamy wget'a, w moim przypadku:

 

wget http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.1.6.tar.bz2

po ściągnięciu przenosimy nasz kernel do /usr/src i tam też przechodzimy:

 

sudo mv linux-3.1.6.tar.bz2 /usr/srccd /usr/src

rozpakowujemy archiwum z jądrem:

 

sudo tar xjf linux-3.1.6.tar.bz2

a następnie tworzymy symlink do naszego katalogu z kernelem i przechodzimy do niego:

 

sudo ln -s linux-3.1.6 linuxcd /linux

teraz najwygodniej będzie skopiować plik konfiguracyjny ze starego jądra po to by mieć gwarancję że nowe jądro będzie dobrze działać niż męczyć się z ustawianiem wszystkiego w przypadku braku tego pliku.

 

sudo cp /boot/config-stara_wersja_jądra ./.configls -a

poleceniem ls -a upewniamy się że skopiowaliśmy plik konfiguracyjny.

 

Teraz zaczynamy konfigurację:

 

sudo make menuconfig 	        //jeśli chcecie konfigurować w konsolisudo make xconfig		//jeśli w GUI (QT)sudo make gconfig		// GTK

Ja użyłem menuconfig i dalszy opis jest dla konfiguracji w terminalu. Powinno pojawić się menu konfiguracji podobne do tego poniżej:

 

Dołączona grafika

 

wybieramy Load an Alternate Configuration File i ładujemy plik .config

 

Po menu poruszamy się strzałkami ;] jeśli jest możliwość zaznaczenia czy moduł ma się znajdować, być wkompilowanym w jądro lub ma go nie być to operujemy spacją lub klawiszami Y (wkompilowany), N(nie chcemy w ogóle), M(będzie figurował jako moduł). Po trzech dolnych opcjach (Select/Exit/Help) poruszamy się klawiszem TAB. Jeżeli wchodzimy głębiej w opcje to wyjść musimy poprzez Exit (o jeden poziom w górę).

 

Po wejściu w General setup ważne jest opcja Initial RAM filesystem.... podświetlona na screenie. Jeśli nie chcemy bawić się po instalacji z ram dyskiem należy tą opcję pozostawić jako wbudowaną w jądro. Inaczej musieli byśmy ręcznie wygenerować plik inicjalizujący system plików.

 

Dołączona grafika

 

Kolejną opcją wartą do przejrzenia jest sekcja Procesor type and features, zaznaczamy tam przede wszystkim rodzinę procesora (dla mnie Pentium M), ponieważ Celeron M jest blisko związany z tą rodziną a opcji Celerona M nie ma. Odznaczyłem też Support for big SMP... ta opcja dotyczy maszyn wieloprocesorowych. Jako że kompilacja przygotowuje kernel dla laptopa to odznaczam także wcześniej zaznaczone Toshiba/Dell laptop support bo do mojego Asusa nie są one potrzebne. Wszystko widać na poniższym screenie ;]:

 

Dołączona grafika

 

Jasne jest to iż nie zmieniamy opcji których nie jesteśmy pewni albo nie wiemy co robią ale jeśli np. wiemy że mamy kartę od Nvidi to śmiało możemy odznaczyć sekcję ze sterownikami do Radeona, zintegrowanych kart Intela ipt. Tak jak poniżej ja odznaczam AMD/Via C7/Cyrix i nForce2.

 

Dołączona grafika

 

Ostatnim podstawowym działem jest File system, zaznaczone są tam moduły dotyczące obsługi różnych systemów plików. Zostawiłem wszystko tak jak było standardowo, nigdy nie wiadomo co zamontujemy w naszym systemie ;>

 

Dołączona grafika

 

Po tej krótkiej konfiguracji cofamy się do głównego menu i dajemy Save an Alternate Configuration File lub zaznaczamy Exit, potwierdzamy i kiedy wyskoczy opcja zapisu pliku konfiguracyjnego zatwierdzamy Yes :]

 

teraz jedna ważna rzecz, podczas pierwszej kompilacji pojawił mi się błąd

 

Documentation/lguest: No such file or directory.  Stop.

I wiem że jest to w tym momencie powszechny problem, aby go rozwiązać należy otworzyć nasz plik konfiguracyjnym dowolnym narzędziem do edycji tekstu (jesteśmy cały czas w /usr/src/linux) np.

 

sudo gedit .config

odszukujemy

 

CONFIG_LGUEST_GUEST=yCONFIG_PARAVIRT_SPINLOCKS=yCONFIG_LGUEST=y

i te opcje zmieniamy na

 

# CONFIG_LGUEST_GUEST is not set# CONFIG_PARAVIRT_SPINLOCKS is not set# CONFIG_LGUEST is not set

i to załatwia sprawę (niestety czasem takie bugi się zdarzają.... powyższy wynika z umieszczenia lguest w ./Documentation/virtual, w starszych wersjach plik był w ./Documentation i dlatego teraz sypie się wszystko)

no i ostatnie polecenie:

 

sudo make-kpkg --initrd --append-to-version=-name --revision=1.0 kernel_image kernel_headers

gdzie

--append-to-version =– nasza nazwa kernela

--revision = numer naszej autorskiej wersji

 

i teraz dość długa przerwa, jądro się kompiluje. Zabiera to chwilę czasu (w moim przypadku około 2 godz.). Do powyższego polecenia można dodać opcję -jX gdzie X to liczba rdzeni procesora.

 

Po skompilowaniu w katalogu nadrzędnym (/usr/src) stworzyły się dwie paczki, jedna z kernelem a druga z plikami nagłówkowymi. Obie instalujemy

 

sudo dpkg -i linux-image-xxx.debsudo dpkg -i linux-headers-xxx.deb

po instalacji uruchamiamy ponownie sprzęt i wybieramy w menu Gruba nowe jądro :D

 

PS. Plany na przyszłość to opis tworzenia initrd oraz patchowanie kernela. ;)

  • Upvote 2

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.
Uwaga: Twój wpis zanim będzie widoczny, będzie wymagał zatwierdzenia moderatora.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...