Linux Kernel Podróż do wnętrza systemu cz 1


Jądro Linuksa
Linux Kernel (1/7): Wprowadzenie, kompilacja i instalacja
Linux Kernel: Podróż
do wnętrza systemu
Część pierwsza (1/7): Wprowadzenie, kompilacja i instalacja
Rafał Kułaga
Wszyscy wiemy, że jądro jest podstawową częścią systemu operacyjnego, odpowiedzialną za tak
newralgiczne zadania jak zarządzanie zasobami sprzętowymi oraz izolację procesów. Wszystkie
najpopularniejsze dystrybucje systemu Linux dostarczane są w postaci gotowej całości  programów
skompilowanych i skonfigurowanych tak, aby działały bezproblemowo na możliwie jak największej
liczbie komputerów. To właśnie uniwersalność i łatwość konfiguracji przyczyniły się do eksplozji
zainteresowania systemami linuksowymi w ostatnich latach. Czy jednak naprawdę musimy decydować
się na gotowe, ale w dużym stopniu nieoptymalne dla naszych potrzeb rozwiązania?
awno, dawno temu, kiedy nie było jesz- uruchomienia. Takie rozwiązanie ogranicza oczywiście
cze dystrybucji systemu Linux w formie, liczbę architektur sprzętowych, na których może zostać
do jakiej przywykliśmy obecnie, cały sys- uruchomiona dana wersja dystrybucji, pozwala jednak
Dtem należało budować od podstaw. Powo- na dotarcie do szerokiej grupy odbiorców. Dla przeciętne-
dowało to bardzo wiele problemów, głównie ze względu go użytkownika, przyzwyczajonego do systemów z rodzi-
na ogromną wiedzę, jaką należało posiąść przed rozpoczę- ny Microsoft Windows, przesiadka na dowolną dystrybu-
ciem budowy systemu dla określonego komputera. Wyni- cję byłaby z pewnością nieznośna, gdyby nie dostępność
ki były jednak świetne  systemy tworzone według takiej oprogramowania w postaci binarnej.
filozofii były doskonale dopasowane do danego kompute- Dlaczego wspominam o tych zagadnieniach we wstę-
ra, nie tylko poprzez odpowiedni wybór oprogramowania, pie pilotażowego artykułu cyklu o budowie, konfiguracji i
lecz również sztuczki stosowane na etapie kompilacji. Ta- programowaniu jądra Linux? Otóż dlatego, iż odpowied-
kie podejście do dziś ma wielu zwolenników, szczególnie nia konfiguracja jądra systemu może przyczynić się do
wśród starszych użytkowników systemów opartych na ją- znacznego wzrostu wydajności oraz bezpieczeństwa sys-
drze Linux, ogranicza jednak dostępność systemu dla po- temu. Jeżeli nie dokonałeś rekompilacji jądra systemu, to
czątkujących. z bardzo dużym prawdopodobieństwem jest ono nieopty-
W celu rozwiązania wymienionych problemów, po- malne dla Twoich potrzeb.
wstały dystrybucje systemu Linux. Ich wykorzystanie za- Jądro rezyduje w pamięci przez cały czas, gdy uru-
wsze jest kompromisem pomiędzy wydajnością, a wygo- chomiony jest system operacyjny. To ono decyduje o tym,
dą obsługi. Pomimo faktu, iż niektóre dystrybucje pozwa- przez jak długi okres czasu (zwany kwantem czasu) pro-
lają na budowę pakietów ze zródeł w trakcie instalacji (np. ces wykonywany jest przez procesor. Jeżeli jądro napisa-
Gentoo), większość korzysta z tzw. pakietów binarnych ne byłoby w sposób nieoptymalny, to w znacznym stopniu
 zawierających oprogramowanie w formie gotowej do odbiłoby się to na wydajności całego systemu.
listopad 2009
28
linux@software.com.pl
Jądro Linuksa
Linux Kernel (1/7): Wprowadzenie, kompilacja i instalacja
Aby w pełni zrozumieć zasadę działania W celu zapewnienia możliwości jedno- uwagę, że taka ingerencja w zawartość pa-
jądra systemu oraz poszczególnych jego me- czesnego wykonywania wielu procesów, wy- mięci zawierającej kod jądra mogłaby stano-
chanizmów, konieczne jest zapoznanie się z korzystywana jest część jądra zwana schedu- wić ogromne zagrożenie dla bezpieczeństwa
podstawowymi paradygmatami związanymi lerem, odpowiadająca za określanie, który systemu  pamiętajmy, że to jądro decyduje,
z budową tej części systemu. W tym cyklu ar- proces ma mieć w danej chwili dostęp do pro- czy dany użytkownik uprawniony jest do do-
tykułów zostaną poruszone zagadnienia takie cesora oraz czasu tego dostępu (zwany kwan- stępu do danego pliku, wywołania systemo-
jak: rekompilacja jądra, proces uruchamiania tem). Po upłynięciu kwantu, lub zaistnieniu wego itp.
systemu, zarządzanie procesami oraz zasoba- innego zdarzenia powodującego koniecz- Skoro procesy nie mają dostępu do prze-
mi, obsługa systemów plików, mechanizmy ność przerwania wykonywania danego pro- strzeni jądra, to w jaki sposób odbywa się ich
sieciowe systemu Linux, mechanizmy zabez- cesu, dokonywane jest wywłaszczenie zada- komunikacja z jądrem? Pamiętamy przecież,
pieczeń na poziomie jądra (SELinux), tworze- nia. Wskutek wywłaszczenia, następne zada- że każdy z procesów działa w osobnej, wir-
nie modułów jądra oraz pisanie prostych ste- nie (określane przez algorytm kolejkowania) tualnej przestrzeni adresowej. W celu zapew-
rowników urządzeń. uzyskuje dostęp do procesora. Jądro systemu nienia możliwości komunikacji międzypro-
Nie szkodzi, jeżeli wcześniej nie miałeś pozwalające na jednoczesne działanie wielu cesowej wykorzystywane są rozmaite techni-
styczności z tymi zagadnieniami  wszyst- procesów, nazywamy wielozadaniowym. ki, takie jak deskryptory plików, sygnały, se-
ko zostanie przejrzyście omówione na przy- Każdy z uruchamianych programów mafory, gniazda oraz kolejki wiadomości. Ich
kładach. Aby jednak w pełni skorzystać z in- wymaga do poprawnego działania wła- działanie polega na wykorzystaniu funkcji za-
formacji zawartych w tym cyklu, powinie- snej przestrzeni adresowej. Przy wywoła- pewnianych przez jądro systemu. Wywołanie
neś opanować język C przynajmniej w stop- niu programu, jądro alokuje niezbędną pa- większości z nich odbywa się przy użyciu tzw.
niu podstawowym  jest to bowiem język mięć (m. in. stos) oraz wykonuje skok pod wywołań systemowych (ang. system calls, po-
programowania w którym zostało napisa- adres określający początek kodu aplikacji. tocznie syscalls).
ne jądro. Każdy z procesów działa w podobny spo- W obrębie jądra systemu (lub jako tzw.
W tej części cyklu zajmiemy się pod- sób, w jaki byłby wykonywany gdyby był moduły) funkcjonują sterowniki urządzeń.
stawami budowy jądra systemu operacyjne- jedynym zadaniem wykonywanym przez Ich działanie opiera się na zapewnieniu war-
go. Podstawowym tematem tego artykułu jest procesor  wszelkie funkcje związane z za- stwy abstrakcji dla funkcji realizowanych
jednak wybór odpowiedniej wersji jądra Li- pewnieniem ochrony obszarów wykorzysty- w ścisłej zależności od wykorzystywanego
nux, jego kompilacja oraz wykorzystanie w wanych przez inne aplikacje przejmuje ją- sprzętu. Dzięki temu, programista nie musi
systemie. Zapraszam do lektury! dro systemu. Stosowane w tym celu tech- znać szczegółów działania sprzętu, lecz jedy-
niki nazywane są pamięcią wirtualną  po-
Jądro systemu zwalają bowiem na nadawanie obszarom pa-
Zanim przejdziemy do dalszej części artykułu, mięci fizycznej dowolnie określonych ad-
w której zajmiemy się praktycznymi aspekta- resów, które następnie wykorzystywane są
Aplikacje użytkownika
mi konfiguracji jądra Linux, warto zastanowić przez procesy. Funkcje te wymagają wspar-
się nad budową tej części systemu oraz jego cia ze strony procesora, a konkretnie jego
System operacyjny
miejscem w architekturze nowoczesnego sys- części zwanej MMU (ang. Memory Mana-
(J dro systemu operacyjnego)
temu operacyjnego. gement Unit).
W trakcie wykonywania programów, bar-
Zadania jądra dzo często okazuje się, że ilość pamięci RAM
Urz dzenia
Pamięć
CPU
We współczesnym modelu warstwowej bu- naszego komputera jest niewystarczająca do
I/O
dowy systemu komputerowego, jądro syste- przechowywania wszystkich niezbędnych da-
mu odpowiada za zapewnienie środowiska nych. W takiej sytuacji, nowoczesne jądra sys-
dla aplikacji uruchamianych przez użytkow- temu zapisują określone fragmenty pamięci
Rysunek 1. Budowa systemu operacyjnego z ją-
nika. We współczesnych systemach ope- na urządzeniach pamięci masowej, takich jak
drem monolitycznym
racyjnych działa jednocześnie wiele róż- dyski twarde. Gdy zaistnieje potrzeba odwoła-
nych aplikacji, a jak wiemy, procesor mo- nia się do danych znajdujących się na partycji
że jednocześnie wykonywać tylko jeden wymiany (ang. swap partition), jądro wczytu-
program (pomijam tu procesory wielordze- je określony obszar do pamięci operacyjnej.
niowe lub systemy wieloprocesorowe). Pro- Technika ta pozwala na wydajniejszą obsługę
Aplikacje
Serwery
blemem jest również zapewnienie izolowa- dużych aplikacji.
użytkownika
I
nego środowiska działania dla każdego pro- W celu skutecznego wykonywania swo-
P
cesu  niemożliwe jest bowiem wykorzysta- ich funkcji, jądro musi zostać odizolowane
C
nie jednej przestrzeni adresowej przez wie- od wykonywanych aplikacji. Umożliwia to
le programów. Konieczne jest także zdefi- zastosowanie podziału na przestrzeń użyt-
niowanie mechanizmów obsługi urządzeń kownika (ang. userspace) oraz jądra (ang.
J dro systemu operacyjnego
wejścia/wyjścia oraz zapewnienie możli- kernelspace). Procesy działające w przestrze-
wości komunikacji międzyprocesowej, oraz ni użytkownika nie mają dostępu do danych
wywołań systemowych, wykorzystywanych znajdujących się w przestrzeni jądra. Wsku-
w celu komunikacji procesów z jądrem (Ry- tek tego, dane jądra nie są narażone na mo- Rysunek 2. Budowa systemu operacyjnego korzy-
sunek 1). dyfikację przez niepowołane procesy. Zwróć stającego z mikrojądra
www.lpmagazine.org 29
Jądro Linuksa
Linux Kernel (1/7): Wprowadzenie, kompilacja i instalacja
nie zestawy wywołań, służących do obsługi na przestrzeń jądra oraz przestrzeń użytkow- więc, w dużym skrócie, charakteryzuje się
mechanizmów abstrakcji. nika. Większość z Czytelników z pewnością programowanie w przestrzeni jądra?
miała do czynienia z tworzeniem aplika- Będąc w przestrzeni jądra, mamy pełen
Przestrzeń jądra cji działających w przestrzeni użytkowni- dostęp do wszystkich zasobów systemu. Wy-
a przestrzeń użytkownika ka. Cykl ten ze względu na naturę tematyki nikają z tego nie tylko bardzo duże możliwo-
Jak już powiedzieliśmy, w większości syste- będzie zajmował się głównie zagadnienia- ści, lecz również odpowiedzialność  musi-
mów operacyjnych istnieje wyrazny podział mi związanymi z przestrzenią jądra. Czym my mieć świadomość, że każdy z błędów mo-
że spowodować zawieszenie systemu, lub,
co gorsza, narażenie przechowywanych da-
nych. Z tego względu, w zagadnieniach zwią-
zanych z realizacją funkcji charakterystycz-
nych dla jądra, istnieje tendencja do przeno-
2.6.30
szenia ich do przestrzeni użytkownika, gdzie
mogłyby być realizowane przez wyspecjalizo-
wane serwery.
Następną różnicą, której bardzo często nie
2.6.30.1
2.6.31-rc1
uświadamiają sobie początkujący programiści,
jest to, iż moduły jądra (oraz jego część głów-
na, nazywana statyczną) nie mają dostępu do
2.6.31-rc2 2.6.30.2
funkcji biblioteki standardowej C. W modu-
le jądra nie możemy więc wywołać np. funk-
cji printf(), ponieważ kod ten nie jest linko-
2.6.31-rc3 2.6.30.3
wany z biblioteką standardową (cechę tę okre-
śla się jako samodzielność). Większość funk-
cji posiada jednak odpowiedniki, które może-
2.6.31-rc4
my wykorzystać w tworzonych przez nas mo-
2.6.30.4
dułach jądra, np. dla funkcji printf() jest nim
kprintf().
2.6.31-rc5
Oczywiście istnieje jeszcze wiele innych
różnic, które omówimy w następnych czę-
ściach cyklu, a w szczególności w części do-
2.6.31-rc6
tyczącej tworzenia modułów jądra.
Rodzaje jądra systemu
Istnieje wiele metodologii budowy jądra sys-
temu operacyjnego. Głównym parametrem,
2.6.31
pod względem którego dokonywany jest po-
dział na poszczególne kategorie, jest rozdzie-
lenie zadań jądra pomiędzy serwery działają-
ce w przestrzeni użytkownika oraz część ją-
Rysunek 3. Schemat numeracji wersji jądra Linux serii 2.6 dra rezydującą w przestrzeni jądra. Nie moż-
na jednoznacznie orzec, która z tych meto-
dologii jest najlepsza  każda ma swoje za-
lety i wady oraz znajduje zastosowania w in-
nej klasie systemów operacyjnych (np. syste-
mów dla urządzeń wbudowanych).
Najważniejsze z istniejących obecnie filo-
zofii budowy jądra systemu to:
" Jądro monolityczne;
" Mikrojądro;
" Jądro hybrydowe;
" Nanokernel i exokernel.
Przyjrzyjmy się krótko każdemu z tych typów.
Jądro monolityczne
Koncepcja jądra monolitycznego (ang. mo-
Rysunek 4. Strona główna kernel.org nolithic kernel) polega na budowie jądra ja-
listopad 2009
30
Jądro Linuksa
Linux Kernel (1/7): Wprowadzenie, kompilacja i instalacja
ko jednolitego, dużego programu działają- Jak już wspomnieliśmy w paragrafie do- z serwerami może zajmować znacznie więcej
cego w przestrzeni jądra (Rysunek 1). Kla- tyczącym jąder monolitycznych, główną wa- pamięci niż standardowe jądro monolityczne.
syczne jądro monolityczne zajmuje się obsłu- dą mikrojądra jest duży wydatek oblicze- Wynika to z faktu, iż każdy serwer jest osob-
gą wszystkich funkcji jądra systemu, jednak niowy związany z przełączaniem pomiędzy nym programem, który dodatkowo może być
większość wykorzystywanych obecnie ją- serwerami działającymi w przestrzeni użyt- napisany w języku wysokiego poziomu. Pro-
der, budowanych w oparciu o tą metodolo- kownika. Co więcej, w rozbudowanych sys- blematyczne jest również zapewnienie ko-
gię posiada możliwość dynamicznego dołą- temach operacyjnych, przeznaczonych dla munikacji pomiędzy procesami użytkowni-
czania modułów, gdy nastąpi taka potrzeba komputerów typu desktop, mikrojądro wraz ka a serwerami.
(np. po podłączeniu do komputera urządze-
nia pamięci masowej USB). Przykładem ją-
dra monolitycznego jest Linux oraz jądra sys-
temów UNIX.
Największą zaletą jądra monolitycznego
jest jego wysoka wydajność, wynikająca z za-
stosowania jednej, spójnej przestrzeni adreso-
wej, w której działa większość mechanizmów
jądra. Dzięki temu, nie jest konieczne przełą-
czanie kontekstów procesów przy wykonywa-
niu podstawowych funkcji systemu, tak jak ma
to miejsce w mikrojądrach, wykorzystujących
dużą liczbę serwerów przestrzeni użytkowni-
ka. Znacznie ułatwiona zostaje również komu-
nikacja pomiędzy poszczególnymi elementa-
mi jądra.
Główna wada jądra monolitycznego wy-
nika z tej samej cechy, która jest zródłem
wszystkich jego zalet, a mianowicie  zasto-
sowania jednorodnej przestrzeni adresowej.
Podejście takie powoduje bowiem znacz-
ną komplikację rozwoju jądra oraz dużą po-
datność na błędy. Co więcej, wspólna prze-
strzeń adresowa oznacza, iż błąd w jednej
części jądra może spowodować awarię całe-
Rysunek 5. Program konfiguracyjny jądra działający w trybie tekstowym
go systemu.
Mikrojądro
Zupełnie inne podejście do realizacji za-
dań jądra systemu reprezentuje koncepcja
mikrojądra. Opiera się ona na implemen-
tacji jedynie podstawowych i zupełnie nie-
zbędnych funkcji w programie działającym
w przestrzeni jądra. Pozostałe funkcje reali-
zowane są przy użyciu tzw. serwerów  pro-
gramów działających w przestrzeni użyt-
kownika (Rysunek 2). Przykładem mikro-
jądra jest jądro systemu BeOS, MINIX oraz
Mach i L4.
Podstawową zaletą mikrojądra jest teo-
retycznie większe bezpieczeństwo, wynika-
jące ze znacznego uproszczenia kodu dzia-
łającego w trybie jądra. Serwery działają w
przestrzeni użytkownika, przez co podlega-
ją podobnym ograniczeniom co większość
procesów. Mikrojądra doskonale nadają się
do zastosowania w systemach wbudowa-
nych, dzięki znacznie mniejszej ilości pa-
mięci zajmowanej przez programy niezbęd-
ne do wykonywania podstawowych funk-
cji systemu.
Rysunek 6. Program konfiguracyjny jądra działający w trybie tekstowym
www.lpmagazine.org 31
Jądro Linuksa
Linux Kernel (1/7): Wprowadzenie, kompilacja i instalacja
Jądro hybrydowe wanie pełnowartościowego, wolnego syste- no bowiem tych, którzy nie budowali systemu
Jądra posiadające zarówno cechy mikroją- mu operacyjnego, ale również największy od podstaw.
dra jak i jądra monolitycznego, nazywamy na świecie program o otwartym kodzie zró- W ostatnich latach znacznie wzrosło za-
hybrydowymi. Podstawowe założenie pozo- dłowym. Zajmiemy się teraz krótko histo- interesowanie Linuksem wśród początkują-
staje w ich przypadku takie samo, jak w mi- rią, budową oraz architekturami, na których cych użytkowników komputerów. Stało się
krojądrach  znaczna część funkcji realizo- działa jądro Linux. to głównie za sprawą dystrybucji takich jak
wana jest przy pomocy serwerów działają- Ubuntu, które główny nacisk kładą na ła-
cych w przestrzeni użytkownika. Jądra hy- Historia Linuksa twość instalacji i konfiguracji. Z pewnością
brydowe charakteryzuje się jednak realizacją Wszyscy wiemy, iż osobą odpowiedzialną za jest to zjawisko bardzo korzystne dla całej
pewnych funkcji w programie działającym w rozpoczęcie prac nad jądrem Linux jest Linus społeczności  producenci sprzętu kompute-
przestrzeni jądra, w celu zwiększenia wydaj- Torvalds. Za datę powstania systemu przyjmu- rowego zaczynają bowiem postrzegać Linuk-
ności. Przykładem jądra hybrydowego jest je się 26 sierpnia 1991, kiedy to wysłał on na sa na równi z systemami Microsoft Windows.
jądro wykorzystywane w systemach rodziny grupę dyskusyjną wiadomość, informującą o Oznacza to nie tylko zwiększoną dostępność
Microsoft Windows NT. tworzonym amatorsko systemie operacyjnym. sterowników, lecz również znacznie lepszą
Linus Torvalds z pewnością nie mógł przewi- kompatybilność urządzeń z systemami spod
Nanokernel i exokernel dzieć, że jego dzieło stanie się początkiem re- znaku pingwina.
Wraz z rozwojem systemów operacyjnych wolucji.
przeznaczonych dla urządzeń wbudowanych, Jak wiemy, system operacyjny skła- Budowa jądra Linux
coraz większe znaczenie ma minimalizacja da się ze znacznie większej ilości kompo- Jądro Linux jest typowym jądrem monolitycz-
wymagań sprzętowych jakie narzuca jądra. nentów niż samo jądro. W celu utworzenia nym. Obsługuje jednak możliwość dynamicz-
Odpowiedzią na te potrzeby są dwa nowe typy kompletnego systemu operacyjnego, jądro nego dołączania fragmentów kodu, w postaci
jądra systemu: nanokernel oraz exokernel. Linux połączono z narzędziami przestrzeni tzw. modułów.
Pod pojęciem nanokernela rozumiemy ją- użytkownika, zapewnianymi przez projekt Obecnie, jądro Linuksa składa się z pra-
dro zbudowane w oparciu o założenia charak- GNU, zapoczątkowany we wrześniu 1983 wie 12 milionów linii kodu. Jest to jeden z naj-
terystyczne dla mikrojądra, ze szczególnym roku przez Richarda Stallmana. Zdaniem większych i najszybciej rozwijanych progra-
naciskiem na minimalizację objętości progra- części osób ze społeczności związanych z mów na świecie.
mu znajdującego się stale w pamięci. Nano- tymi projektami, prowadzi to do konieczno- Nie chcę jednak wyprzedzać treścią na-
kernel ma za zadanie realizować jedynie pod- ści określania całości jako GNU/Linux (jest stępnych artykułów  budową wszystkich
stawowe funkcje jądra, w sposób jak najbar- tak np. w dystrybucji Debian GNU/Linux). najważniejszych mechanizmów jądra oraz
dziej efektywny. Nie będziemy tu roztrząsać tego tematu, po- tworzeniem modułów i prostych sterow-
Exokernel jest nanokernelem, w którym nieważ nie jest on zbyt ważny z punktu wi- ników zajmiemy się w dalszych częściach
zadania związane z zarządzaniem zasobami dzenia cyklu artykułów. Obiektywnym fak- cyklu.
systemu zostały przekazane aplikacjom prze- tem pozostaje jednak, iż rozwój Linuksa nie
strzeni użytkownika. Zadaniem jądra jest je- byłby możliwy bez narzędzi dostarczanych Obsługiwane architektury
dynie zapewnienie, że procesy nie będą nad- przez projekt GNU. Systemom opartym na jądrze Linux często
pisywać danych należących do innych pro- Już w 1993 roku powstały pierwsze dys- zarzuca się niedopasowanie do potrzeb ty-
cesów. trybucje systemu Linux, pozwalające na je- powego użytkownika komputera. Z opinią
go wykorzystanie przez zwykłego użytkow- tą można się zgadzać lub nie, trzeba jednak
Jądro Linux nika  Slackware i Debian. Znamienne jest, iż przyznać, iż jest to niezwykle elastyczny
Po zapoznaniu się z podstawami budowy nazwa dystrybucji Slackware, obecnie uzna- system, który znajduje bardzo wiele zasto-
systemów operacyjnych, nadszedł czas aby- wanej za przeznaczoną dla zaawansowanych sowań, począwszy od zabawek i systemów
śmy skupili się na jądrze Linux. Nie jest to użytkowników, oznacza w wolnym tłuma- wbudowanych, aż do najszybszych super-
jedynie zbiór wielu milionów linii kodu, czeniu oprogramowanie dla leniwych. W po- komputerów na świecie.
który na początku lat 90 umożliwił zbudo- czątkach systemu Linux, za leniwych uznawa- Niektóre z architektur wspieranych przez
jądro Linux to: x86 (większość kompute-
Listing 1. Przykładowy wpis konfiguracyjny dla nowego jądra w programie rozruchowym GRUB rów osobistych), 64-bitowe rozwiązania Inte-
la i AMD, mikrokontrolery oparte na rdzeniu
title Kernel 2.6.30.5  nowy # etykieta ARM (wykorzystywanego w ogromnej ilości
root (hd0,0) # dysk główny systemów wbudowanych), procesory oparte
kernel /boot/bzImage-2.6.30.5 root = /dev/sda1 ro quiet # ścieżka do na rdzeniu MIPS (sieciowe systemy wbudo-
obrazu jądra i opcje wane), PowerPC (wydajne procesory RISC,
przeznaczone m.in. dla systemów wbudowa-
Listing 2. Przykładowy wpis konfiguracyjny dla nowego jądra w programie rozruchowym LILO nych), Microblaze (architektura, którą może-
my implementować w układach logiki progra-
image=/boot/bzImage-2.6.30.5 # ścieżka do obrazu jądra mowalnej FPGA).
label=Kernel 2.6.30.5 - nowy # etykieta Na rynku urządzeń mobilnych widać ten-
read-only # tryb tylko do odczytu dencję do stosowania systemów opartych na
root=/dev/sda1 # partycja główna jądrze Linux. Dotyczy to nie tylko sprzętu ta-
kiego jak netbooki, lecz również PDA i smart-
listopad 2009
32
Jądro Linuksa
Linux Kernel (1/7): Wprowadzenie, kompilacja i instalacja
fony. Przykładem mogą być chociażby platfor- le nie dadzą się uruchomić. Jeżeli po rekom- (Rysunek 3). Załóżmy, że ukazuje się wer-
my Android oraz Moblin. pilacji jądra zauważyłeś problemy, powinie- sja 2.6.30 jądra. W trakcie prac, dewelo-
neś zainstalować nowsze wersje odpowied- perzy odnajdują błędy, które zostają usu-
Przygotowanie nich programów. nięte w kolejnych wersjach stabilnych ją-
do kompilacji jądra Część programów, które mogą wyma- dra, oznaczanych jako 2.6.30.1, 2.6.30.2
Zanim zajmiemy się omówieniem procesu gać uaktualnienia po instalacji nowego ją- itd. W tym samym czasie, trwają intensyw-
pobrania i instalacji najnowszej wersji jądra, dra, to: ne prace nad nowymi funkcjami, wskutek
warto zastanowić się, jakie pakiety będą nam czego powstają wersje testowe, oznaczane
potrzebne do jego konfiguracji oraz kompila- " module-init-tools  narzędzia służące do 2.6.31-rc1, 2.6-31-rc2 itd. Po kilku miesią-
cji. Po instalacji nowego jądra, często okazu- obsługi modułów jądra; cach, wersja 2.6.31-rcX zostaje uznana za
je się również, że do poprawnej pracy syste- " udev  narzędzia służące do dynamiczne- stabilną i cykl powtarza się.
mu konieczna jest aktualizacja pakietów wy- go tworzenia plików urządzeń w katalogu
mienionych poniżej. /dev; Pobranie i rozpakowanie jądra
" util-linux  zbiór podstawowych narzę- Zdecydowanie polecam Ci pobranie najnow-
Narzędzia kompilacji dzi wykorzystywanych w systemach szej dostępnej wersji stabilnej jądra. Mo-
Jeżeli jesteś początkującym użytkownikiem Linux; żesz tego dokonać wchodząc na stronę http:
systemu Linux, to z pewnością masz nieprzy- " Narzędzia do obsługi systemów plików. //www.kernel.org/ i klikając w link Full Source
jemne wspomnienia związane z kompilacją znajdujący się obok najnowszej wersji ozna-
programów ze zródeł. Błędy, które z pewno- Pobranie najnowszej wersji jądra czonej jako stable (Rysunek 4). yródła jądra
ścią często napotykałeś (zwłaszcza przy okazji Najnowsza wersja jądra Linux jest zawsze do- zajmują około 55 MB.
budowania mniej popularnych aplikacji) wy- stępna na stronie http://www.kernel.org/. Znaj- Jeżeli chcesz pobrać zródła w trybie tek-
nikały z używania niewłaściwej wersji pakie- dują się tam nie tylko pełne wersje zródeł, lecz stowym, to możesz tego dokonać za pomo-
tu GCC lub błędów samego programisty. Mam również tzw. patche  pliki umożliwiające ak- cą polecenia:
przyjemność poinformować Cię, że w przy- tualizację posiadanych zródeł jądra. Więcej o
padku jądra, prawie na pewno nie napotkasz ich wykorzystaniu powiemy w następnej czę- wget http://kernel.org/pub/linux/
żadnych problemów  jest to bowiem kod o ści cyklu, kiedy zajmiemy się optymalizacją kernel/v2.6/linux-2.6.x.x.tar.gz
znaczeniu absolutnie krytycznym, dokładnie konfiguracji jądra.
przeanalizowany przez najlepszych programi- Po otworzeniu strony ze zródłami jądra Aby wyświetlić informacje o najnowszych
stów na świecie. W celu sprawnej kompilacji Linux, z pewnością zauważysz, że dostęp- wersjach jądra, możesz skorzystać z poleceń:
powinieneś jednak upewnić się, że dysponu- nych jest wiele różnych wersji, z których część
jesz najnowszymi wersjami kilku pakietów, a oznaczona jest jako stabilna, część jako wersje wget http://kernel.org/kdist/finger_
mianowicie: kompilatora GCC, narzędzi binu- testowe. Którą powinieneś wybrać? banner
tils oraz programu make. cat finger_banner
Jako że jądro Linux napisane jest w ję- Oznaczenia wersji jądra
zyku C (ze wstawkami w asemblerze), bę- W większości przypadków, najodpowiedniej- Po pobraniu, zródła możesz rozpakować przy
dziesz potrzebował możliwie najnowszej szym rozwiązaniem będzie pobranie najnow- użyciu polecenia:
wersji kompilatora GCC. Jest on dostępny w szej stabilnej wersji jądra. Warto jednak po-
repozytoriach wszystkich dystrybucji, więc znać system oznaczeń wersji, aby mieć świa- tar -xzvf linux-2.6.x.x.tar.gz ~/
na pewno nie będziesz miał problemów z je- domość, w jaki sposób odbywa się rozwój tej linux-src/
go instalacją. części systemu.
Do przeprowadzenia kompilacji jądra, Jeżeli używałeś Linuksa jeszcze w cza- Zapoznamy się teraz ze strukturą katalogów ze
będziesz również potrzebował pakietu binu- sach jądra z rodziny 2.4, to z pewnością pa- zródłami jądra Linux.
tils, zawierającego narzędzia służące do ope- miętasz podział na dwie gałęzie: gałąz roz-
rowania na plikach binarnych (m. in. linker i wojową (development) oraz stabilną (sta- Struktura katalogów ze zródłami
asembler). ble). Wersje testowe oznaczane były za po- Po rozpakowaniu archiwum ze zródłami, z
Program make wykorzystywany jest w mocą liczby nieparzystej (np. 2.5.22), zaś pewnością zauważysz, iż zajmują one łącznie
procesie automatycznej kompilacji i linkowa- stabilne przy pomocy liczby parzystej (np. ponad 300 MB. Taka ilość kodu może przy-
nia programów składających się z wielu pli- 2.4.22). Taki system oznaczeń powodował tłaczać, w znakomitej większości są to jednak
ków zródłowych. jednak wiele niedogodności oraz był nie- komponenty, których nie będziesz wykorzy-
zbyt zrozumiały dla początkujących użyt- stywał w swoim systemie. Przyjrzyjmy się te-
Programy zależne od jądra kowników. raz zawartości najistotniejszych katalogów w
Większość programów działających w prze- Wraz z wprowadzeniem jądra w wer- drzewie jądra:
strzeni użytkownika jest niezależna od uży- sji 2.6 zdecydowano się zmienić sys-
wanej wersji jądra systemu. Istnieje jed- tem numerowania wersji. Zrezygnowa- " arch  pliki zawierające implementacje
nak pewna grupa aplikacji, które w znacz- no z utworzenia osobnej gałęzi dla wer- funkcji charakterystycznych dla konkret-
nym stopniu zależne są od działania pew- sji rozwojowych, decydując się na wyko- nych architektur sprzętowych obsługiwa-
nych mechanizmów jądra. Instalacja nowe- rzystanie schematu numeracji z wersjami nych przez jądro;
go jądra może spowodować, że programy -rc (ang. release candidate). Nowy sche- " crypto  pliki zawierające implementacje
te zaczną działać niepoprawnie lub w ogó- mat łatwo wytłumaczyć na przykładzie mechanizmów kryptograficznych jądra;
www.lpmagazine.org 33
Jądro Linuksa
Linux Kernel (1/7): Wprowadzenie, kompilacja i instalacja
" drivers  pliki z kodem zródłowym ste- padku zaczynamy pracę od wczytania Wybór składników
rowników urządzeń; standardowej konfiguracji oraz urucho- Po zapoznaniu się w podanymi informacja-
" firmware  pliki z kodem zródłowym ob- mienia narzędzia menuconfig (Rysunek mi, możesz przejść do konfiguracji jądra.
sługi firmware urządzeń; 5). Jest to zdecydowanie najlepsze roz- Zastosujemy tu wygodną metodę, polega-
" fs  pliki zawierające implementacje sys- wiązanie, gdy budujemy jądro na zdal- jącą na wczytaniu konfiguracji domyślnej,
temów plików; nym systemie, np. przy użyciu połą- a następnie wprowadzeniu modyfikacji w
" init  pliki zawierające implementacje czenia SSH. Należy pamiętać, iż w ce- obrębie interesujących nas funkcji. Pamię-
funkcji niezbędnych do rozruchu systemu; lu kompilacji i uruchomienia programu taj, aby wykonywać te czynności przy uży-
" ipc  pliki zawierające implementację me- menuconfig potrzebna jest biblioteka ciu konta użytkownika bez uprawnień admi-
chanizmów komunikacji międzyproceso- ncurses; nistratora  w przeszłości zdarzały się bo-
wej (semafory, kolejki wiadomości itp.); " Korzystając z narzędzia działającego w wiem błędy, które powodowały uszkodze-
" kernel  pliki zawierające implementację trybie graficznym  podobnie jak w przy- nie ważnych plików systemowych w trakcie
najważniejszych funkcji jądra (obsługa padku programu menuconfig, zaczynamy kompilacji jądra.
przerwań, schedulera itp.); od wczytania konfiguracji domyślnej, a Aby wczytać domyślną konfigurację ją-
" mm  pliki zawierające implementację następnie wprowadzamy w niej zmia- dra, przejdz do katalogu z zródłami i wpro-
mechanizmów związanych z zarządza- ny przy użyciu narzędzia działającego w wadz polecenie:
niem pamięcią; trybie graficznym (Rysunek 6). Mamy do
" net  pliki zawierające implementację wyboru dwa programy: jeden z nich ko- make defconfig
mechanizmów sieciowych jądra; rzysta z biblioteki QT3 (xconfig), drugi z
" security  pliki zawierające implementa- GTK+ (gconfig). Następnie, w celu uruchomienia programu
cję mechanizmów zabezpieczeń jądra; konfiguracyjnego działającego w trybie gra-
" sound  pliki zawierające implementację W tym artykule omówimy dwa ostatnie z wy- ficznym (GTK+), wydaj polecenie:
mechanizmów obsługi dzwięku; mienionych sposobów konfiguracji.
" virt  pliki zawierające implementację make gconfig
mechanizmów obsługi wirtualizacji. Część statyczna a moduły
Większość elementów jądra możemy zbudo- Jeżeli wolisz skorzystać z narzędzia wykorzy-
W głównym katalogu zródeł jądra znajdują się wać jako składnik części statycznej lub jako stującego bibliotekę QT3, możesz wydać po-
również katalogi Documentation (dokumenta- moduł. Jaka jest różnica pomiędzy tymi dwo- lecenie:
cja jądra), include (pliki nagłówkowe jądra), ma rozwiązaniami i czym powinniśmy kiero-
oraz lib (implementacja funkcji bibliotecz- wać się przy podjęciu decyzji? make xconfig
nych jądra). Moduł jest skompilowanym elementem
jądra, który możemy wczytać w dowolnym Po chwili, w czasie której narzędzie konfigura-
Konfiguracja jądra momencie po uruchomieniu systemu ope- cyjne jest kompilowane, Twoim oczom ukaże
Przed rozpoczęciem kompilacji powinieneś racyjnego (za pomocą programu modpro- się program, w którym będziesz mógł zmienić
wybrać komponenty, które chcesz zbudować be). Gdy zdecydujemy, że wczytany do pa- ustawienia jądra.
jako część statyczną jądra oraz moduły. Archi- mięci moduł jest nam już niepotrzebny, mo- Opcje konfiguracyjne zostały podzielone
wum ze zródłami jądra, które przed chwilą po- żemy go usunąć. Moduły w systemie Linux na następujące kategorie:
brałeś z internetu, zawiera również wygodne przechowywane są zazwyczaj w katalogu
narzędzia, pozwalające na szybką modyfika- /lib/modules jako pliki obiektowe z rozsze- " General setup  kategoria zawierająca
cję konfiguracji. rzeniem .ko. Listę obecnych w systemie mo- podstawowe opcje konfiguracyjne ją-
Konfigurację jądra możemy przeprowa- dułów, wraz z podstawowymi informacjami dra;
dzić na trzy sposoby: na ich temat, możesz uzyskać przy pomocy " Processor type and features  kategoria
polecenia lsmod. zawierająca opcje konfiguracyjne wpły-
" Odpowiadając na pytania odnośnie każ- Część statyczna jądra (ang. base ker- wające na obsługę procesora. Niektó-
dego składnika jądra  szczerze odra- nel) to część jądra, która jest zawsze obec- re ze znajdujących się tu opcji dotyczą
dzam Ci zastosowanie tej metody, przy- na w pamięci  nie możemy jej odłączyć. wsparcia konkretnych technologii (np.
najmniej na początku. Proces ten jest bo- Co więcej, dokonanie jakichkolwiek zmian SMP) lub aktualizacji mikrokodu pro-
wiem niezwykle czasochłonny (należy w jej obrębie wymaga ponownego urucho- cesora;
odpowiedzieć na ponad 2000 pytań) oraz mienia systemu, a często nawet rekompila- " Power management and ACPI options
wymaga dużej wiedzy na temat poszcze- cji całego jądra. W części statycznej znaj-  kategoria zawierająca opcje konfigura-
gólnych elementów jądra; duje się zdecydowana większość kodu, od- cyjne dotyczące funkcji zarządzania ener-
" Korzystając z narzędzia działającego powiadającego za realizację podstawowych gią oraz ustawienia systemu ACPI;
w trybie tekstowym  w takim przy- funkcji systemu. " Bus options (PCI etc.)  kategoria zawie-
rająca opcje konfiguracyjne obsługi magi-
strali, takich jak PCI, PCI-E;
" Executable file formats/Emulations  ka-
W Sieci
tegoria pozwalająca na wybór obsługiwa-
" Strona główna jądra Linux  http://www.kernel.org/
nych przez jądro typów plików wykony-
" Strona KernelTrap  http://kerneltrap.org/
walnych;
listopad 2009
34
Jądro Linuksa
Linux Kernel (1/7): Wprowadzenie, kompilacja i instalacja
" Networking support  kategoria zawiera- Po zakończeniu procesu kompilacji, możesz mówi posłuszeństwa, wyświetlając przy star-
jąca opcje konfiguracyjne związane z pra- przejść do następnego kroku, którym jest in- cie ogromne ilości komunikatów o błędach,
cą różnego rodzaju urządzeń sieciowych stalacja modułów. podsumowane krótkim napisem Kernel pa-
oraz stosu TCP/IP; nic. Nie powinieneś się tym jednak przejmo-
" Device Drivers  kategoria umożliwiająca Instalacja modułów wać  wystarczy zresetować komputer oraz
wybór sterowników urządzeń, które chce- Po zakończeniu procesu kompilacji jądra, na- wybrać z menu programu rozruchowego dzia-
my włączyć do części statycznej jądra lub leży zainstalować moduły przy pomocy pole- łający obraz jądra.
skompilować jako moduły; cenia: Istnieje wiele przyczyn, które mogą po-
" Firmware Drivers  kategoria zawiera- wodować powstanie błędów uniemożliwiają-
jąca opcje dotyczące obsługi firmware make modules_install cych uruchomienie systemu z nowym jądrem.
urządzeń; Nie sposób wymienić tu wszystkich, jednak
" File Systems  kategoria umożliwia- Do jego poprawnego wykonania niezbędne są jego wystąpienie zawsze świadczy o tym, że
jąca wybór obsługiwanych systemów uprawnienia użytkownika root. na którymś z opisanych w artykule etapów po-
plików; pełniłeś błąd. Bardzo często Kernel panic jest
" Kernel hacking  kategoria zawierająca Instalacja jądra skutkiem wadliwej konfiguracji programu roz-
rozmaite opcje konfiguracyjne, przydatne W trakcie procesu instalacji wygenerowa- ruchowego.
przy modyfikacji kodu jądra oraz tworze- ny zostaje plik z obrazem jądra, który zosta-
niu własnych modułów; je wczytany do pamięci przez program rozru- Podsumowanie
" Security options  kategoria zawierająca chowy. W celu umożliwienia wyboru nowego Tym sposobem dotarliśmy do końca pierw-
opcje konfiguracyjne wpływające na za- jądra w trakcie uruchamiania systemu, prze- szej części cyklu. Zapoznałeś się w nim z ar-
bezpieczenia wykorzystywane w syste- kopiujemy jego obraz do katalogu /boot oraz chitekturą nowoczesnego systemu operacyj-
mie; odpowiednio zmodyfikujemy pliki konfigura- nego, różnymi metodologiami budowy ją-
" Cryptographic API  kategoria zawierają- cyjne boot loader'a. Opiszemy tu procedurę dra oraz jego zadaniami. Omówiliśmy krót-
ca opcje konfiguracyjne interfejsu krypto- dla programu rozruchowego GRUB, jednak ko historię jądra Linux oraz jego wpływ na
graficznego jądra systemu; w przypadku LILO przebiega ona bardzo po- rozwój ruchu Wolnego Oprogramowania,
" Virtualization  kategoria zawierająca dobnie (Listing 2). W razie wątpliwości, od- poznaliśmy podstawowe cechy jego budo-
opcje związane z technologią wirtuali- wołaj się do dokumentacji wykorzystywane- wy oraz architektury, na których działa. Do-
zacji; go programu. wiedziałeś się również, w jaki sposób po-
" Library routines  kategoria zawierająca Po zakończeniu procesu kompilacji, brać najnowszą wersję jądra, dokonać je-
opcje konfiguracyjne funkcji bibliotecz- obraz jądra znajduje się w pliku ~/kernel- go konfiguracji, rekompilacji oraz instala-
nych. src/linux-2.6.x.x/arch/x86/boot/bzImage. cji w systemie.
Przekopiuj go do katalogu /boot za pomo- Jeżeli jesteś zainteresowany szczegóła-
Dla każdego ze składników jądra możesz wy- cą polecenia: mi związanymi z działaniem jądra systemu
brać jedną z trzech opcji: nieaktywny (N), zbu- operacyjnego oraz jądrem Linux, to polecam
dowany jako moduł (M), wbudowany w część cp ~/kernel-src/linux-2.6.x.x/arch/ Ci odwiedzenie stron wymienionych w tabe-
statyczną (Y). x86/boot/bzImage /boot/bzImage- li W Sieci. Znajdziesz tam wiele informacji
Po zmianie interesujących Cię opcji kon- 2.6.x.x na tematy, dla których zabrakło miejsca w
figuracyjnych, możesz zapisać zmiany korzy- tym artykule.
stając z przycisku Save. Oprócz tego, konieczne jest również prze- W następnej części cyklu zajmiemy się
kopiowanie pliku ~/kernel-src/linux-2.6.x.x/ bliżej procesem optymalizacji jądra poprzez
Kompilacja jądra System.map do katalogu /boot: wybór odpowiednich składników, odpowia-
Sam proces kompilacji nie powinien po- dających naszym potrzebom. Dowiesz się
wodować żadnych problemów  jeżeli tak cp ~/kernel-src/linux-2.6.x.x/ również, w jaki sposób możesz skrócić czas
się dzieje, znaczy to, że powinieneś spraw- System.map /boot/System.map-2.6.x.x uruchamiania systemu oraz zapoznasz się ze
dzić, czy używasz najnowszych wersji na- szczegółami procesu uruchamiania systemu
rzędzi wymienionych we wcześniejszej czę- Następnym krokiem jest konfiguracja pro- Linux. Do usłyszenia!
ści artykułu. gramu rozruchowego. W przypadku pro-
Aby rozpocząć kompilację jądra, należy gramu GRUB jest ona bardzo prosta i pole-
wydać polecenie: ga na dodaniu nowego wpisu na końcu pliku
/boot/grub/menu.lst. Przykładowy wpis został
O autorze
make przedstawiony na Listingu 1.
Po wykonaniu wszystkich opisanych
Autor interesuje się bezpieczeństwem
Jeżeli korzystasz z procesora wielordzenio- czynności, możesz ponownie uruchomić kom-
systemów informatycznych, programo-
wego, możesz znacznie skrócić czas kompi- puter i wybrać nowe jądro w menu programu
waniem, elektroniką, muzyką rockową,
lacji, dzięki zastosowaniu opcji konfiguracyj- rozruchowego.
architekturą mikroprocesorów oraz za-
nej -jN, gdzie N to liczba procesorów pomno-
stosowaniem Linuksa w systemach wbu-
żona przez 2, np. Kernel panic?
dowanych.
W trakcie lektury tego cyklu z pewnością spo-
Kontakt z autorem: rl.kulaga@gmail.com
make -j4 tkasz się z sytuacją, w której nowe jądro od-
www.lpmagazine.org 35


Wyszukiwarka

Podobne podstrony:
Linux Kernel podroz do wnetrza systemu
Joe Vitale Podróże do wnętrza siebie
Podróże do wnętrza siebie(1)
bradley r smith(podroz do wnetrza ludzkich zarodkow)
PODROZ DO WNETRZA ZIEMI 3D (2008)
ONEIRONAUTYKA – PODRÓŻ DO WNĘTRZA UMYSŁU
Podroze Do Wnetrza Siebie Fragment Pd
podroze do wnetrza siebie
Podróż do Wnętrza Ziemi
Podróż do wnętrza ziemi 3D NAPISY
Podróż do wnętrza Ziemi (2008)

więcej podobnych podstron