Linux Kernel- Podróż do wnętrza systemu cz.2.pdf

(774 KB) Pobierz
400009968 UNPDF
Jądro Linuksa
Linux Kernel (2/7): Zaawansowana koniguracja i rozruch systemu
do wnętrza systemu
Część druga (2/7): Zaawansowana koniguracja
i rozruch systemu
Rafał Kułaga
W pierwszej części cyklu artykułów omawiających budowę, konigurację oraz programowanie jądra
systemu Linux, zapoznaliśmy się z podstawowymi opcjami, pozwalającymi na dostosowanie jądra
do naszych wymagań. W tym artykule zajmiemy się dokładnym opisem najważniejszych aspektów
koniguracji kernela, opisem procesu uruchamiania systemu oraz wykorzystaniem łatek (patchy) w celu
aktualizacji źródeł jądra. Zapraszam do lektury!
śmy, iż jądro systemu Linux należy do
najbardziej złożonych programów ja-
kie kiedykolwiek napisano. Składa się
z ponad 12 milionów linijek kodu, zawierających imple-
mentację podstawowych funkcji systemu operacyjnego,
obsługę stosów wielu protokołów telekomunikacyjnych
oraz sterowników urządzeń. Taka ilość kodu może wy-
dawać się przytłaczająca, zwłaszcza dla początkujących
użytkowników systemu Linux.
Jednym z najważniejszych problemów, jakie napotyka-
my w trakcie wyboru składników jądra, jest określenie za-
leżności pomiędzy posiadanym sprzętem, a fragmentami ją-
dra niezbędnymi w celu jego poprawnej obsługi. Problem ten
może być szczególnie dotkliwy dla osób przyzwyczajonych
do systemów z rodziny Microsoft Windows, w których pro-
ces instalacji sterowników jest w zasadzie automatyczny. W
przypadku systemów Linuksowych jest to proces znacznie
bardziej skomplikowany, często wymagający długich poszu-
kiwań – okazuje się bowiem, iż część producentów nie do-
starcza sterowników dla tego systemu. Dostępne są jednak
narzędzia, pozwalające określić producenta i typ zainstalo-
wanego w systemie sprzętu, dzięki czemu odpowiednich ste-
rowników będziemy mogli poszukać w internecie.
W tym artykule zajmiemy się wszystkimi najważniej-
szymi aspektami koniguracji jądra. W przeciwieństwie do
pierwszej części, której głównym zadaniem było wprowa-
dzenie Czytelnika do tematyki związanej z rekompilacją ją-
dra, omówimy znaczenie najważniejszych opcji poszcze-
gólnych kategorii w menu programu koniguracyjnego ją-
dra. Omówimy również podstawowe zagadnienia związa-
ne z cross-kompilacją jądra Linux (umożliwiającą jego wy-
korzystanie w systemach niekompatybilnych z architekturą
x86) oraz przyjrzymy się procesowi rozruchu systemu. Pew-
na uwaga zostanie również poświęcona koniguracji usług
uruchamianych przy starcie systemu oraz poziomom uru-
chamiania, pomimo iż są to zagadnienia dość luźno związa-
ne z tematyką rekompilacji jądra.
Patchowanie źródeł jądra
Archiwum zawierające źródła jądra Linux ma rozmiar prze-
kraczający 30 MB. Nie jest to zbyt dużo, jeżeli weźmiemy
pod uwagę przepustowość dostępnych obecnie łączy inter-
netowych. Z drugiej strony, pobieranie pełnych źródeł jądra
46
grudzień 2009
Linux Kernel: Podróż
W pierwszej części cyklu, powiedzieli-
400009968.041.png 400009968.042.png 400009968.043.png
Jądro Linuksa
Linux Kernel (2/7): Zaawansowana koniguracja i rozruch systemu
systemu za każdym razem, gdy pojawią się ja-
kiekolwiek poprawki, powoduje niepotrzebne
obciążenie serwerów. Z tego względu, warto za-
poznać się z narzędziem patch, pozwalającym na
uaktualnienie posiadanych źródeł, bez potrzeby
pobierania dużej ilości danych z internetu.
nicę pomiędzy dwoma dokładnie określonymi
wersjami pliku. Oznacza to, iż wykorzystując
program patch do aktualizacji źródeł jądra, bę-
dziemy musieli dobrać odpowiedni plik łatki na
podstawie znajomości posiadanej wersji źródeł
oraz wersji, do której chcemy je zaktualizować.
Pojawiające się komunikaty informują o plikach,
w których wprowadzane są zmiany. Po zakończe-
niu działania programu patch, możesz sprawdzić
poprawność aktualizacji przy użyciu polecenia:
head -n 5 Makeile
Patch i diff
Działanie programu patch polega na wykorzy-
staniu opisów różnic pomiędzy dwoma wer-
sjami pliku – nowszą oraz starszą. Dzięki temu
oszczędzamy dużą ilość miejsca, ponieważ nie
powielamy tej części danych, która pozostała
w niezmienionej postaci. Do wygenerowania
pliku łatki wykorzystujemy narzędzie diff.
Aby lepiej zrozumieć zasadę działania na-
rzędzi diff i patch, posłużymy się przykładem.
Załóżmy, iż dysponujemy dwoma plikami o na-
zwach old i new . Zawartość pliku old jest nastę-
pująca:
Patchowanie źródeł jądra
Patche do źródeł jądra dostępne są na stronie
http://kernel.org/ . Zanim zaczniesz szukać od-
powiedniego dla Twoich potrzeb pliku, zapo-
znaj się z istniejącymi rodzajami łatek. Dostęp-
ne są trzy typy patchy:
Jeżeli wyświetlony numer wersji odpowiada do-
celowej wersji jądra, oznacza to, iż aktualiza-
cja przebiegła pomyślnie. W takim przypadku,
możesz przystąpić do koniguracji, a następnie
kompilacji jądra.
Przebieg rozruchu systemu
Pod pojęciem rozruchu systemu Linux mamy
na myśli ogół procesów zachodzących od wy-
brania przez użytkownika odpowiedniej pozy-
cji w menu programu rozruchowego, do mo-
mentu rozpoczęcia logowania. W trakcie roz-
ruchu systemu ma miejsce wiele akcji, zwią-
zanych z wczytaniem jądra systemu do pamięci
i jego podstawową inicjalizacją oraz urucho-
mieniem usług odpowiadających danemu po-
ziomowi uruchamiania ( Runlevel ).
Szczegóły rozruchu systemu są w dużym
stopniu zależne od architektury sprzętowej.
Z najciekawszymi zagadnieniami związanymi
z procesem uruchamiania systemu mamy do
czynienia w przypadku systemów wbudowa-
nych – w przypadku klasycznej architektury
x86 proces ten przebiega bardzo podobnie na
wszystkich urządzeniach.
Niezależnie od zastosowanej architektury
sprzętowej, proces rozruchu systemu składa się
z trzech głównych kroków (Rysunek 2):
Łatka stabilnej wersji jądra – używana do
aktualizacji jądra od wersji bazowej (np.
2.6.31) do określonej wersji stabilnej (np.
2.6.31.3);
Łatka bazowej wersji jądra – używana do
aktualizacji jądra od starszej wersji bazo-
wej (np. 2.6.30) do nowszej wersji bazo-
wej (np. 2.6.31). Pamiętaj, iż łatka ta nie
będzie działać dla wersji 2.6.30.X i wersji
2.6.31.Y;
Łatki przyrostowe – używane do aktuali-
zacji jądra od starszej wersji stabilnej (np.
2.6.31.2) do nowszej wersji stabilnej (np.
2.6.31.3). W nazwie łaty przyrostowej
wyszczególnione są obydwie wersje (np.
patch-2.6.31.2-3) .
Ala ma kota.
Natomiast pliku new :
Ala ma psa i kota.
Plik z łatką generujemy przy pomocy następu-
jącego polecenie
diff -a old new > lata.patch
Aktualizację zawartości pliku old przeprowadzi-
my przy użyciu polecenia:
Określenie odpowiedniego patcha gwarantuje
poprawność kodu jądra po aktualizacji.
Wszystkie wymienione typy łatek dostęp-
ne są pod adresem http://www.kernel.org/pub/
linux/kernel/v2.6/ . Łaty przyrostowe dostępne są
w podkatalogu incr . Określenie nazwy pliku za-
wierającego odpowiedniego patcha nie powin-
no sprawić Czytelnikowi większego problemu.
W razie problemów, odwołaj się do przykładów
aktualizacji, przedstawionych na Rysunku 1. Po
pobraniu i rozpakowaniu pliku łatki, przekopiuj-
my go lokalizacji, w której znajduje się katalog
zawierający źródła jądra. Po przejściu do głów-
nego katalogu ze źródłami, wydajmy polecenie:
patch old lata.patch
Po sprawdzeniu zawartości plików old i new
okazuje się, iż są one identyczne. W naszym
przypadku plik lata.patch ma rozmiar więk-
szy od pliku new . Jednak w przypadku bar-
dzo wielu plików o dużych rozmiarach,
w których wprowadzane są jedynie niewiel-
kie zmiany, narzędzia diff i patch sprawdza-
ją się doskonale.
Oczywistą konsekwencją zasady działania
narzędzi patch i diff jest to, iż łatka określa róż-
Wczytanie obrazu jądra do pamięci po-
przez program rozruchowy – proces ten
pozostaje w ścisłej zależności od zastoso-
wanego sprzętu. Etap ten kończy się uzy-
skaniem minimalnego środowiska urucho-
mieniowego, w którym możliwa jest dalsza
inicjalizacja jądra;
�����������������������������������
patch -p1 < ../patch-x
������������������������������������
����������
�������������
�������������
���������������
��������������
������������
����������������
��������������������
��������������������������������������
���������������
�������������
���������������
����������������
��������������������������
���������������������������������������
���������������
Rysunek 1. Zastosowanie różnych rodzajów patchy w celu aktualizacji źródeł jądra
Rysunek 2. Podstawowe etapy rozruchu syste-
mu Linux
www.lpmagazine.org
47
400009968.044.png 400009968.001.png 400009968.002.png 400009968.003.png 400009968.004.png 400009968.005.png 400009968.006.png 400009968.007.png 400009968.008.png 400009968.009.png 400009968.010.png 400009968.011.png 400009968.012.png 400009968.013.png 400009968.014.png 400009968.015.png 400009968.016.png
Jądro Linuksa
Linux Kernel (2/7): Zaawansowana koniguracja i rozruch systemu
Skok do części kodu jądra charakterystycz-
nej dla danej architektury – proces ten ma
na celu przeprowadzenie podstawowej
koniguracji jądra, w sposób charaktery-
styczny dla danej architektury sprzętowej;
Skok do głównej części jądra (niezależnej
od platformy sprzętowej) – proces ten ma
na celu dokończenie inicjalizacji pozosta-
łych podsystemów jądra oraz przejście do
standardowego trybu działania, w którym
możliwe jest uruchomienie usług i proce-
sów przestrzeni użytkownika.
Uruchomienie procesów odpowiadających
domyślnemu poziomowi uruchamiania – za-
danie to realizowane jest przez program init.
ści danej architektury sprzętowej. Wczytanie ją-
dra systemu odbywa się przy użyciu wyspecjali-
zowanych programów rozruchowych, takich jak
U-Boot. Osobom zainteresowanym tą tematyką
polecam zapoznanie się z informacjami dostęp-
nymi na stronach zawartych w ramce W Sieci .
Etap wysokopoziomowy
Dalsza część procesu inicjalizacji jądra syste-
mu odbywa się już w sposób bardziej niezależny
od platformy sprzętowej. Omówimy tu pokrótce
najważniejsze zadania wykonywane na tym eta-
pie, rozpoczynającym się od wyświetlenia infor-
macji o wersji jądra Linux. Pierwszym krokiem
jest koniguracja funkcji zależnych od architek-
tury sprzętowej, takich jak obsługa pamięci oraz
stronicowanie. Na przebieg tego procesu ma-
ją wpływ parametry przekazane przy starcie ją-
dra. Następnym krokiem jest pełne przetworzenie
wszystkich parametrów koniguracyjnych z któ-
rymi jądro zostało wywołane. Więcej informacji
na ten temat znajdziesz w następnym paragraie.
Po przetworzeniu parametrów konigura-
cyjnych, inicjalizowane są najważniejsze struk-
tury, niezbędne do pracy systemu operacyjnego,
takie jak: scheduler, tablica przerwań IRQ, ta-
bela procesów, konsola oraz zegar systemowy.
Szczegółowy opis przebiegu poszczególnych
etapów tego procesu jest bardzo skomplikowa-
ny i stanowi raczej temat na osobny artykuł.
Następny krok może okazać się dla Czy-
telnika dość zaskakujący. Polega on bowiem
na sprawdzeniu obecności w sprzęcie znanych
niedoskonałości konstrukcyjnych. Okazuje się,
iż nie tylko oprogramowanie może zawierać
błędy. Przykładem wady konstrukcyjnej, któ-
ra może mieć wpływ na działanie kompute-
ra, jest tzw. Pentium FDIV Bug , polegająca na
niepoprawnym wykonywaniu operacji dziele-
nia liczb zmiennoprzecinkowych (FDIV to in-
strukcja procesora odpowiadająca za dzielenie
liczb zmiennoprzecinkowych). W dzisiejszych
czasach, skutki błędów w budowie procesorów
można korygować za pomocą odpowiednich
aktualizacji mikrokodu (warstwy pośredniej po-
między kodem maszynowym a sprzętem) – jest
to jedno z zadań realizowanych na tym etapie.
Końcowym etapem inicjalizacji jądra jest
utworzenie procesu bezczynności systemowej
( Idle Thread ), inicjalizacja sterowników urządzeń
oraz przekazanie kontroli nad dalszą częścią roz-
ruchu systemu procesom przestrzeni użytkowni-
ka (standardowo odbywa się to za pomocą pro-
gramu init znajdującego się w katalogu /sbin ).
Etap charakterystyczny
dla platformy sprzętowej
Po wczytaniu obrazu jądra Linux do pamięci,
wykonywany jest skok do adresu, pod którym
znajduje się kod maszynowy odpowiedzialny
za przeprowadzenie podstawowej koniguracji
jądra. Wszystkie opisywane w tym paragraie
funkcje zdeiniowane są w plikach źródłowych
znajdujących się w katalogach arch/x86/boot/
oraz arch/x86/kernel . Jak można się domyślić,
są to zadania pozostające w ścisłym związ-
ku z architekturą sprzętową, wymagające uży-
cia asemblera danego procesora. Wspomniany
już skok odbywa się do miejsca w pamięci, w
którym znajduje się kod odpowiadający za we-
ryikację poprawności obrazu jądra w pamię-
ci, określenia rozmiaru dostępnej pamięci sys-
temowej, inicjalizację karty graicznej, reloka-
cję kodu jądra oraz przełączenie procesora w
tryb chroniony.
Po zakończeniu wymienionych zadań,
utworzony zostaje tymczasowy stos jądra oraz
wykonywane są rozmaite czynności związane z
przygotowaniem pamięci oraz rozpakowaniem
obrazu jądra systemu. Następnym krokiem jest
aktywowanie funkcji stronicowania pamięci
oraz inalizacja procesu tworzenia stosu jądra.
Utworzona zostaje również tablica obsługi prze-
rwań – na razie zawierająca jedynie atrapy funk-
cji obsługujących. Określany jest też typ zainsta-
lowanego w systemie procesora.
Zajmiemy się teraz opisem przebiegu poszcze-
gólnych kroków.
Wczytanie obrazu jądra do pamięci
Po włączeniu komputera, inicjalizacji BIOS i uru-
chomieniu programu rozruchowego, użytkownik
zazwyczaj proszony jest o wybranie jednego z
systemów operacyjnych, których lista zdeinio-
wana jest w odpowiednim pliku. W przypadku
komputerów, na których zainstalowanych jest
kilka różnych systemów operacyjnych, proces
ten może przebiegać zupełnie inaczej, w zależno-
ści od wyboru użytkownika. W przypadku syste-
mów Linuksowych, różne pozycje w menu pro-
gramu rozruchowego mogą odpowiadać plikom
zawierającym różne obrazy jądra systemu.
Proces wczytywania obrazu jądra do pa-
mięci ma szczególnie duże znaczenie w przy-
padku systemów wbudowanych opartych na Li-
nuksie. Jego odpowiednia koniguracja wyma-
ga nie tylko zrozumienia zadań związanych z tą
fazą rozruchu systemu, lecz również znajomo-
Rysunek 3. Zastosowanie narzędzi dmesg i grep w celu zdobycia informacji o urządzeniach USB zainsta-
lowanych w systemie
Init i poziomy działania
Program init służy do uruchomienia wszystkich
pozostałych procesów przestrzeni użytkownika,
niezbędnych do uzyskania kompletnego środowi-
ska roboczego. Init jest rodzicem wszystkich dzia-
łających w systemie procesów, dlatego niemożli-
we jest jego unicestwienie sygnałem SIGKILL.
Init może zostać wywołany w jednym z
sześciu poziomów działania ( Runlevel ), ozna-
czonych liczbami od 0 do 6. Poszczególne po-
ziomy odpowiadają:
48
grudzień 2009
400009968.017.png 400009968.018.png 400009968.019.png 400009968.020.png 400009968.021.png 400009968.022.png
 
Jądro Linuksa
Linux Kernel (2/7): Zaawansowana koniguracja i rozruch systemu
0 – zatrzymanie systemu (nie należy używać
tego poziomu jako poziomu startowego);
1 – tryb jednego użytkownika;
2/3/4/5 – tryby określane przez dystrybucję;
6 – ponowne uruchomienie systemu (nie
należy używać tego poziomu jako poziomu
startowego).
nych opartych na systemie Linux. W przypad-
ku większości urządzeń tego typu nie mamy bo-
wiem urządzeń wyjściowych, pozwalających na
analizę wyświetlanych komunikatów. W takiej
sytuacji, jedynym wyjściem jest zastosowanie
komputera podłączonego do systemu wbudo-
wanego za pomocą interfejsu RS-232.
Najważniejsze opcje koniguracyjne ją-
dra zostały zawarte w Tabeli Przykładowe pa-
rametry przekazywane przy rozruchu syste-
mu . Pamiętaj, że do ich poprawnej interpre-
tacji konieczne jest zachowanie odpowied-
niej wielkości znaków. W przypadku progra-
mu rozruchowego GRUB, parametry mogą zo-
stać zapisane na stałe w pliku koniguracyjnym
/etc/grub/menu.lst lub podawane bezpośrednio
przy uruchomieniu systemu.
Dmesg – komunikaty jądra
Jednym z podstawowych narzędzi, pozwalają-
cych na odczytywanie komunikatów diagno-
stycznych jądra, w tym informacji o podłącza-
nych urządzeniach jest dmesg. Po jego wywoła-
niu, Twoim oczom ukaże się bardzo duża liczba,
niekoniecznie czytelnych informacji. Kluczem
do pełnego wykorzystania możliwości progra-
mu dmesg jest odpowiednia obróbka wyświetlo-
nych danych. Przeszukiwanie wydruków sporzą-
dzonych przez program dmesg byłoby niezwy-
kle czasochłonne, gdybyśmy nie stosowali na-
rzędzi pomocniczych. Jednym z nich jest grep,
dzięki któremu możemy przeiltrować strumień
danych, wyświetlając jedynie linie spełniające
określone wyrażenie regularne. Przykładem za-
stosowania programów dmesg i grep w celu po-
zyskania informacji o urządzeniach obecnych w
systemie może być polecenie:
Znaczenie poziomów działania 2–5 zależne jest
od używanej dystrybucji. Zazwyczaj znajdują się
wśród nich dwa poziomy odpowiadające pełne-
mu trybowi wielu użytkowników: graicznemu
oraz tekstowemu. Domyślny poziom działania
określony jest w pliku /etc/inittab w linii:
id:2:initdefault:
W tym przypadku jest nim poziom 2. Poziom
działania można również zmienić w trakcie pra-
cy systemu, przy pomocy polecenia init N ,
gdzie N – żądany poziom działania (wymaga-
ne są w tym celu uprawnienia użytkownika ro-
ot). Przy pomocy polecenia runlevel spraw-
dzimy aktywny poziom. Powinniśmy pamię-
tać, aby wyłączyć automatyczny start usług, z
których nie korzystamy. Większość dystrybucji
zawiera specjalne narzędzia graiczne, pozwala-
jące na wygodną modyikację tego aspektu pra-
cy systemu operacyjnego, jeżeli jednak zmian
wolisz dokonać własnoręcznie, to odpowied-
nie pliki koniguracyjne znajdziesz w katalogu
/etc/rcN.d , gdzie N – poziom działania systemu.
Przygotowanie
do koniguracji jądra
Zanim przejdziemy do opisu zaawansowanej
koniguracji jądra systemu, warto zastanowić
się, jakie narzędzia będą pomocne w ustaleniu
jakich sterowników urządzeń potrzebujemy.
Problem ten może wydawać się banalny – każ-
dy przecież wie, jaki sprzęt zainstalowany jest w
jego komputerze. Okazuje się jednak, iż w przy-
padku taniego sprzętu producentów z dalekiego
wschodu zazwyczaj nie możemy liczyć na ste-
rowniki dostarczane przez producenta. Co wię-
cej, urządzenia takie nie mają nawet konkret-
nych nazw, pozwalających na poszukanie odpo-
wiednich informacji w internecie.
dmesg | grep -i usb
Jego wykonanie spowoduje wyświetlenie wszyst-
kich linii, zawierających odniesienia do urządzeń
i kontrolerów USB (Rysunek 3). Operator | służy
do przekierowania strumienia danych wygenero-
wanego przez program dmesg do narzędzia grep.
Z pewnością zauważyłeś, że informacje uzy-
skiwane przy użyciu programu dmesg są mało
czytelne. Siłą tego programu jest jednak to, iż wy-
świetla on wszystkie komunikaty diagnostyczne
i informacyjne jądra, przez co pozwala na zdo-
bycie identyikatora producenta i modelu sprzę-
tu. Informacje te możemy następnie wykorzystać
przy poszukiwaniu sterowników w internecie.
Przekazywanie argumentów
przy rozruchu systemu
Po uruchomieniu systemu operacyjnego Linux,
komunikacja z jądrem może odbywać się mię-
dzy innymi za pomocą plików znajdujących się
w katalogach /proc i /sys . Pozwala to aktywo-
wać i zmieniać parametry działania podsyste-
mów jądra oraz odczytywać informacje o za-
instalowanym sprzęcie i dostępnych zasobach.
Przykładem może być plik /proc/cpuinfo , w któ-
rym zawarte są informacje o zainstalowanym w
systemie procesorze.
Zastosowanie programu rozruchowego da-
je nam również możliwość wpłynięcia na pro-
ces inicjalizacji jądra poprzez podanie odpo-
wiednich parametrów. Dzięki temu, możemy
np. przesłać za pośrednictwem sieci komunika-
ty wyświetlane przy uruchamianiu systemu na
inną maszynę. Przy użyciu odpowiednich para-
metrów mamy również możliwość wyłączenia
pewnych podsystemów jądra (np. obsługi AC-
PI) w celu określenia elementów uniemożliwia-
jących poprawne załadowanie systemu. Argu-
menty podawane przy wczytywaniu jądra ma-
ją również ogromne znaczenie w procesie te-
stowania i debugowania systemów wbudowa-
Określanie zainstalowanych urządzeń
Większość dystrybucji i środowisk graicznych
zawiera narzędzia, pozwalające na wyświetlenie
listy urządzeń obecnych w systemie oraz moni-
torowanie ich pracy. Programy te sprawdzą się
doskonale w przypadku, gdy w systemie zain-
stalowane są odpowiednie sterowniki. Jak więc
zdobyć informacje o sprzęcie, który nie został
rozpoznany przez system i dla którego nie dys-
ponujemy odpowiednimi sterownikami?
Lspci i lsusb – co na magistralach piszczy
Lspci i lsusb to dwa bardzo podobne programy,
pozwalające na uzyskanie informacji o obec-
nych w systemie urządzeniach, podłączonych
do magistral PCI i USB (Rysunek 4).
W przeciwieństwie do programu dmesg,
lspci i lsusb wyświetlają informacje w posta-
ci, która nadaje się do analizy przez użytkow-
Tabela 1. Przykładowe parametry przekazywane przy rozruchu systemu
Opcja koniguracyjna Zastosowanie
moduł.parametr= wartość
Ustawienie wartości parametru parametr modułu moduł na wartość
noexec= on/off
Włączenie lub wyłączenie funkcji blokowania wykonania obszarów pamięci
resume= urządzenie
Wznowienie pracy systemu przy użyciu danych z urządzenia urządzenie
maxcpus= N
Ustawienie maksymalnej liczby procesorów wykorzystywanych przez
system SMP na N
ramdisk_size= rozmiar
Ustawienie rozmiaru ramdiska na rozmiar
root= urządzenie
Wybór urządzenia na którym znajduje się główny system plików
acpi= force/off
Wymuszenie włączenia systemu ACPI ( force ) lub jego dezaktywacja ( off )
pci= off
Wyłączenie obsługi magistrali PCI
loglevel= 0-7
Ustawienie poziomu informowania o błędach; 0 – najniższy, 7 – najwyższy
www.lpmagazine.org
49
400009968.023.png 400009968.024.png 400009968.025.png 400009968.026.png 400009968.027.png 400009968.028.png 400009968.029.png 400009968.030.png 400009968.031.png 400009968.032.png 400009968.033.png 400009968.034.png
 
Jądro Linuksa
Linux Kernel (2/7): Zaawansowana koniguracja i rozruch systemu
nika. Uzyskane informacje o zainstalowa-
nych urządzeniach możemy następnie wy-
korzystać w celu poszukiwania sterowników
w internecie.
duł jak i część statyczna, jest obsługa druko-
wania. Jeżeli do Twojego komputera jest na
stałe podłączona drukarka i często z niej ko-
rzystasz, to zdecydowanie najlepszym rozwią-
zaniem jest skompilowanie kodu odpowie-
dzialnego za obsługę wydruku jako część sta-
tyczną jądra. Jeżeli jednak rzadko korzystasz
z drukarki, warto zbudować odpowiedni frag-
ment jądra jako moduł.
Nie tylko sterowniki urządzeń mogą zostać
skompilowane jako moduły. Duża część mecha-
nizmów jądra, takich jak np. specyiczne funk-
cje związane z obsługą mechanizmu iltrowania
pakietów i NAT, może również zostać zbudowa-
na jako dynamiczny fragment jądra.
rych wykonania niezbędne są uprawnienia użyt-
kownika root. Najważniejsze z nich to:
insmod – służący do wczytania modułu i je-
go połączenia z działającym jądrem;
rmmod – służący do usunięcia wczytanego
modułu jądra;
depmod – służący do określenia zależności
pomiędzy modułami;
lsmod – służący do wyświetlenia listy
wczytanych modułów;
modprobe – służący do wczytywania mo-
dułów z uwzględnieniem istniejących po-
między nimi zależności. Użycie programu
modprobe spowoduje automatyczne wczy-
tanie wszystkich modułów od których zale-
ży praca wybranego przez nas modułu.
Co warto zbudować jako moduł?
Początkujący często zastanawiają się, jakie
elementy jądra należy zbudować jako część
statyczną jądra, a które warto skompilować ja-
ko dynamicznie dołączane moduły (więcej in-
formacji o modułach i modularnej budowie ją-
dra znajdziesz w pierwszej części cyklu). Jak
w wielu przypadkach, nie ma tu jedynie po-
prawnych odpowiedzi – przydatność danego
mechanizmu jądra lub sterownika jest ściśle
uzależniona od wymagań danego komputera
lub środowiska w jakim funkcjonuje.
Książkowym przykładem mechanizmu
który może być zbudowany zarówno jako mo-
Obsługa modułów
W celu obsługi modułów jądra obecnych w sys-
temie, korzystamy z zestawu poleceń, do któ-
Skompilowane moduły są zazwyczaj przecho-
wywane w katalogu /lib/modules .
Koniguracja jądra
W pierwszej części cyklu, opisaliśmy krótko za-
wartość każdej z kategorii opcji programu kon-
iguracyjnego jądra. Zajmiemy się teraz dokład-
niejszym opisem zawartości poszczególnych me-
nu. Nie będziemy nawet podejmować próby opi-
sania wszystkich najważniejszych opcji konigu-
racyjnych, ponieważ jest ona skazana na porażkę
– liczba parametrów koniguracyjnych skutecz-
nie uniemożliwia ich opisanie w artykule.
Jednym z najlepszych sposobów poznania
opcji zawartych w programie koniguracyjnym
jądra, jest przeglądnięcie ich wszystkich. Jeżeli
będziesz miał wątpliwości co do znaczenia kon-
kretnej pozycji, w menu programu koniguracyj-
nego wybierz opcję Help .
Rysunek 4. Program lspci pozwala na wyświetlenie informacji o zainstalowanych urządzeniach magistrali PCI
General Setup
W kategorii tej zawarte są opcje dotyczące roz-
maitych aspektów pracy systemu: komunikacji
międzyprocesowej, obsługi partycji wymiany,
sposobu kompresji jądra oraz obsługi przestrze-
ni nazw jądra (Rysunek 5).
Enable loadable module support
W kategorii tej zawarte są opcje dotyczące koni-
guracji obsługi modułów jądra, takie jak np. ob-
sługa odłączania modułów ( Module unloading ).
Rysunek 5. Menu General Setup programu koniguracyjnego jądra
Enable the block layer
W kategorii tej zawarte są opcje dotyczące kon-
iguracji obsługi urządzeń blokowych oraz sche-
dulerów operacji wejścia/wyjścia ( IO schedu-
lers ). Możemy tu aktywować obsługę dużych
urządzeń blokowych i plików (powyżej 2 TB).
Całkowite wyłączenie tej kategorii spowoduje,
że wykorzystanie w systemie urządzeń bloko-
wych będzie niemożliwe.
50
grudzień 2009
400009968.035.png 400009968.036.png 400009968.037.png 400009968.038.png 400009968.039.png 400009968.040.png
 
Zgłoś jeśli naruszono regulamin