Home  |  Aktualności  |  e-Komunikacja  |  WWW  |  Bezpieczeństwo  |  Linux  |  Programy  |  GSM/UMTS  |  Rozrywka

Jądro systemu Linux

Kompilacja jądra systemu Linux


Kompilacja jądra Linuksowego wielu osobom przysparza dużo problemów. Począwszy od samego pojęcia kompilacja, do przygotowania odpowiedniej konfiguracji i instalacji. W tym artykule przedstawimy krok po kroku proces przygotowywania, kompilacji, instalacji i konfiguracji końcowej. Jądro (kernel) jest centralnym miejscem systemu operacyjnego

Czym jest jądro systemu Linux?


Jądro (kernel) jest centralnym miejscem systemu operacyjnego. To on decyduje o uruchomieniu danej aplikacji, a co wiąże się z tym przydzieleniem jej odpowiedniego miejsca w pamięci wewnętrznej jądra oraz pamięci RAM (również SWAP), obsługa komunikatów, komunikacji między procesorowej, warstwa wirtualna, warstwa systemu plików i wiele innych rzeczy które potrzebuje aplikacja do istnienia. Jądro również zawiera odpowiednie sterowniki (w systemie Linux mówimy o modułach jądra do obsługi sprzętu (modules) modułami mogą być również aplikacje działające jako deamony (aplikacje działające w tle). Podsumowując - gdyby nie było jądra, nie było by systemu.

Jądro systemu Linux jest systematycznie uaktualniane.


Co jakiś czas dostępne są nowe wersje kernela pod wyższymi od poprzedników numerkami (np. Aktualny numer jądra to 2.6.22 a poprzedni był 2.6.21.5). Dostępny jest cały kod / źródło jądra bądź tylko patche (nakładki) na stare jądra. My w artykule zajmiemy się tylko kompilacją całego źródła. Jest ona trochę czasochłonna ale zapewnia powodzenie (przy dobrze dobranej konfiguracji :-)). Więc przejdźmy do sedna sprawy.

Co i skąd pobrać, zdobyć, czego potrzebuję?


Do kompilacji naszego nowego jądra potrzebujemy zainstalowane w naszym systemie narzędzie make (najlepiej w najnowszej wersji), kompilator gcc, g++, g77, initrd-tools.


Jak wcześniej zapowiedzieliśmy - zajmiemy się tylko instalacją jądra z całego źródła, a nie nakładając patche na aktualnie zainstalowane jądro. A więc, aby pobrać najnowszą wersje jądra odsyłam na stronę główną projektu:

http://kernel.org.

 

Znajdujemy najwyższy numer wersji jądra, i obok klikamy na literę F (skrót z angielskiego Full - pełny). Waga jądra wacha się w okolicach powyżej 40MB. Jest to paczka spakowana w formacie .tar.bz2 (tzn, jądro jest starowane następnie skompresowane przez bzip2). Zapisujemy plik na dysku, domyślnie jest on nazwany linux-2.6.XX.tar.bz2, gdzie XX to numer szczegółowy wersji. Aby go rozpakować klikamy na paczkę (w zależnie od ustawień raz bądź dwa razy) aż uruchomi się program do rozpakowywania plików skompresowanych (może to być File-Roller lub inny).

W przypadku gdy nie korzystamy z systemu graficznego (Gnome, KDE, Xfce, IceWM lub innego, tzn korzystamy z systemu tekstowego), wydajemy komendy (przypominam, że musimy się znajdować w lokalizacji, gdzie plik z kodem jądra został zapisany.


Dodatkowo wszystkie komendy wydawane w konsoli / terminalu wydawać najlepiej z poziomu użytkownika root):

$ tar -xf linux-2.6.22.tar.bz2

Uwaga! proces dekompresji może trochę potrwać, zależnie od prędkości Twojego sprzętu.

Następnie musimy skopiować folder z kodem jądra (tj. linux-2.6.XX) do folderu /usr/src/.

Dla systemu tekstowego, wydajemy komendę:

# cp -rf linux-2.6.XX /usr/src/

Uwaga! kopiowanie również może trochę potrwać, tam jest około 30 tysięcy plików o łącznej wadze ok 300Mb.

Kolejnym krokiem jest dostanie się do lokalizacji /usr/src/linux-2.6.XX/ najlepiej w konsoli bądź terminalu (dla systemu graficznego).

# cd /usr/src/linux-2.6.XX/

W tym miejscu chwila przerwy. Musimy się zdecydować na sposób konfiguracji przed kompilacją. Dostępnych jest 11 typów konfiguracji:

"make config"

konfiguracja tekstowa, dużo pytań na temat obsługiwania sprzętu, sieci, sterowników, systemów plików i innych -
zalecane dla zaawansowanych użytkowników

"make menuconfig"

kolorowa konfiguracja tekstowa, dodatkowo opisy elementów konfiguracyjnych.

"make xconfig"

graficzne menu, wybór modułów przez zaznaczenie krzyżykiem odpowiedniego pola, podział na kategorie i pod kategorie, opisy elementów. Wymaga zainstalowane elementy Qt3 bądź Qt4, wszelkie biblioteki graficzne Qt.

"make gconfig"

graficzne menu, wybór modułów przez zaznaczenie krzyżykiem odpowiedniego pola, podział na kategorie i pod kategorie, opisy elementów. Wymaga zainstalowane elementy GTK, glib, libglade, wszelkie biblioteki graficzne GTK+.

"make oldconfig"

konfiguracja taka sama co aktualnie zainstalowanego jądra, dodatkowe pytania, głównie co do nowości zaimplementowanych w jądro, często ciekawe i przydatne. Ten sposób jest przez nas zalecany!

"make silentoldconfig"

konfiguracja taka sama co aktualnie zainstalowanego jądra, bez pytań co do kompilacji nowości.

"make defconfig"

konfiguracja na podstawie domyślnych ustawień dostarczonych wraz z jądrem.

"make allyesconfig"

wszystko jest ustawiane na Instaluj (wszystkie moduły są dodawane do kompilacji).


"make allmodconfig"

wszystkie moduły są instalowane, ale pytanie co do obsługi innych rzeczy są zadawane.


"make allnoconfig"

wszystkie pytania są automatycznie oznaczane jako Nie instaluj (minimalna wersja jądra), nie zalecana dla niezaawansowanych użytkowników.

"make randconfig"

coś w stylu "wybierz co chcesz", system sam wybiera co będzie zainstalowane a co nie, również nie zalecamy dla niezaawansowanych użytkowników.

My zalecamy wybór "make oldconfig", ponieważ zostaniemy poproszenie o udzielenie około 30 pytań na które odpowiadamy y (yes - tak), n (no - nie), m (modules -moduł).

Pytania dotyczą instalacji nowości które zostały zaimplementowane w najnowszą wersję jądra, reszta jest wyciągana ze starego pliku konfiguracyjnego aktualnie zainstalowanego jądra. Do szerszego opisu wszystkich sposobów odsyłamy do pliku README w folderze głównym ze źródłem jądra (../linux-2.6.XX/README).

Więc po odpowiednim wybraniu odpowiedniej wersji konfiguracji wydajemy polecenie:


# ./configure


To narzędzie sprawdzi dostępność wymaganych narzędzi czyli obecności,
make, gcc, g++, g77 oraz przygotuje specjalny plik

Następnie wydajemy komendę do konfiguracji:

# make oldconfig


Oczywiście może się ta komenda różnić. Można wpisać jeden z 11 dostępnych możliwości konfiguracji, które podaliśmy wyżej.
Narzędzie make, w wypadku gdy wybierzemy sposób xconfig lub gconfig sprawdzi dostępność wszystkich bibliotek graficznych, w razie ich braku zwróci błędy. Uwaga! Polecenia "make xconfig" bądź "make gconfig" nie możemy wydać w przypadku gdy używamy TYLKO systemu graficznego, z tego powodu iż nie mamy dostarczonych wymaganych bibliotek oraz zainstalowanego systemu Xów (graficznego).  W tym momencie make również zadaje odpowiednio pytania.


Następnym krokiem jest kompilacja. Trwa ona stosunkowo długo, jest to również zależne od prędkości naszego sprzętu. Przy sposobie "oldconfig" trwa on około 30-40min. Przy sposobie "allnoconfig" może trwać około 15-20min (Uwaga! proszę się nie sugerować długością kompilacji jądra, tym że będzie szybciej). A więc wydajemy polecenie i czekamy:

# make


Podczas kompilacji będą się pokazywać nazwy modułów, plików które są aktualnie kompilowane. Podczas procesu kompilacji nie zalecamy korzystania z dużych programów czy gier - kompilacja będzie trwała krócej. Nie można również wyłączać komputera. Po prostu czekamy do zakończenia kompilacji. Na koniec tego procesu nie zostanie wyświetlony żaden komunikat. Zostanie wyświetlony normalny znak zachęty i będzie możliwość wydawania dalszych komend. W przypadku nie powodzenia zostanie wyświetlony stosowny komunikat. Uwaga, podczas kompilacji mogą wyskoczyć komunikaty typu: Warnig. Przeważnie tyczą tego, że jakaś zmienna w kodzie została zdefiniowana a następnie nie jest w żadnym momencie wykorzystywana (zajmuje nie potrzebnie miejsce w pamięci teoretycznie) ale tak naprawdę może być ona wykorzystywana przez inne programy, więc się tym nie martwimy.

Następnie wydajemy komendę:

# make modules


Kompiluje ona moduły takie jak sterowniki i inne. Potem wydajemy komendę:

 

# make modules_install


Instaluje ona wyżej skompilowane moduły.

I na (prawie) koniec:

# make install


Instaluje ona nasze nowe jądro w folderze /boot o nazwie vmlinuz-2.6.XX tworzy również odpowiednie pliki w tym samym folderze jak System.map-2.6.XX oraz config-2.6.XX.
Następnie tworzymy obraz początkowy ramdysku, aby to wykonać wydajemy polecenia:
 

# mkinitrd -o /boot/initrd.img-2.6.XX 2.6.XX



Uwaga! Musimy podać cały numer wersji jądra jest to bardzo ważne! Jeśli np. paczka z jądrem nazywa się: linux-2.6.22.tar.bz2 to podajemy sam numer czyli: 2.6.22.

Czekamy chwilę aż mkinitrd utworzy nowy obraz ramdysku...

Następnie w konfiguracji naszego bootloadera (programu startowego) dodajemy wpis (o ile poleceniem make install nie stało się to automatycznie) do pliku konfiguracyjnego (na przykładzie GRUBa):

Wchodzimy do folderu:

# cd /boot/grub/


W przypadku systemu graficznego możemy to zrobić w przeglądarce plików.

Edytujemy plik menu.lst

# nano menu.lst


nano to program konsolowy do edycji tekstów, jeśli go nie posiadamy to możemy użyć vim, emacs, vi lub mcedit lub inny jaki posiadamy, w przypadku systemu graficznego klikamy na plik menu.lst i otworzy się domyślny program do edycji.

Musimy na końcu pliku dodać taki wpis:

title           NAZWA_SYSTEMU, kernel 2.6.XX
root            (hdX,X)
kernel          /boot/vmlinuz-2.6.XX root=/dev/hdaX ro // tu mogą
znaleźć się inne parametry przekazywane do jądra initrd 

/boot/initrd.img-2.6.XX

Gdzie NAZWA_SYSTEMU podajemy nazwę naszej dystrybucji Linuksa, np. openSuSE 10.2, Debian GNU/Linux, Arch Linux Voodoo, Ubuntu 7.05 lub inne. Gdzie (hdX,X) podajemy numer dysku i partycji na którym jest zainstalowany nasz system. Najlepiej skopiować tą sekcje z wpisy wyżej. Tak samo w sekcji kernel, miejsce root=/dev/hdaX. Zapisujemy plik.

Koniec.

I to już koniec naszej przygody z kompilacją naszego nowego jądra.
Ten proces można powtarzać za każdym razem, gdy wyjdzie nowsze jądro, najlepiej gdy są jakieś stanowcze zmiany, które będą wspomagać pracę na naszym komputerze.

Dodatkowe linki, które mogą się przydać:

http://kernel.org - stąd możemy pobrać najnowszą wersję jądra,

http://linux.pl   - tu możemy zasiąść fachowej wiedzy na temat systemów linuksowych.

Zapraszamy również do naszego forum, gdzie grupa techników chętnie odpowie na każde Wasze pytanie.

---

Michał