4.2 Wybieranie Jądra

Jądro jest częścią systemu operacyjnego, która umożliwia dostęp do sprzętu, kontrolę procesów i całego systemu. Kernel zawiera procedury obsługi urządzeń więc wybranie odpowiedniego dla Twojego systemu jest ważnym etapem konfiguracji.

Slackware zwiera ponad tuzin skompilowanych już jąder. Każdy z nich zawiera standardowy zestaw sterowników oraz kilka specyficznych tylko dla niego. Możesz używać jednego z prekompilowanych jąder lub sam go skompilować ze źródeł. Cokolwiek wybierzesz musisz się upewnić, że Twój kernel zawiera w sobie obsługę posiadanych przez Ciebie urządzeń.

4.2.1 Katalog /kernels na płycie Slackware

Prekompilowane jądra Slackware są dostępne w katalogu /kernels na płycie CD lub na serwerze FTP w głównym katalogu Slackware. Dostępne kernele zmieniają się gdy tworzona jest nowa wersja systemu, więc aktualna dokumentacja dostępna jest zawsze w ich katalogu. Dla każdego jądra w katalogu /kernels utworzony został podkatalog; każdy z nich ma taką samą nazwę jak odpowiadający mu boot disk. Ponadto w każdym z folderów znajdują się niżej wymienione pliki:

Plik Do czego służy
System.map Mapa systemu dla danego jądra
bzImage Plik obrazu jądra
config Plik konfiguracyjny dla danego kenela

Aby użyć wybranego jądra, skopiuj System.map oraz config do katalogu /boot. Obraz jądra zapisz jako /boot/vmlinuz. Następnie uruchom /sbin/lilo(8) aby zainstalować LILO dla nowego kernela. Zrestartuj system. Tak wygląda instalowanie nowego jądra.

Nazwy plików z jądrami IDE kończą się na .i. Nie zawierają one obsługi SCSI. Pliki z jądrami ze wsparciem dla SCSI kończą się na .s. Zawierają również obsługę (oprócz SCSI oczywiście) IDE tak jak to ma miejsce w kernelach *.i.

4.2.2 Kompilacja jądra ze źródła

Pytanie “czy muszę kompilować jądro dla swojego systemu?” często zadawane jest przez nowych użytkowników. Odpowiedź jest jedna: być może. Jest kilka przypadków, w których powinno się to uczynic. Większość jednak może używać gotowych kerneli i ładowalnych modułów by uczynić system w pełni funkcjonalnym. Kompilacja będzie konieczna gdy uaktualnia się kernel do wersji nie zawartej w aktualnej wersji dystrybucji, lub gdy patch'owano źródła jądra w celu dodania obsługi jakichś specyficznych urządzeń. Każdy kto posiada system z SMP na pewno zechce skompilować jądro z jego obsługą. Dodatkowo wielu użytkowników dokonuje tego w celu poprawienia wydajności systemu. Można na przykład skompilować jądro z opcjami optymalizacji dla konkretnego procesora.

Utworzenie własnego kernela nie jest aż takie trudne. Pierwszy krok to sprawdzenie czy na systemie zainstalowanio źródła jądra. Należy się upewnić, że zainstalowano pakiety z grupy K. Ważna jest również grupa D, a w szczególności kompilator C, GNU make oraz GNU binutils. W ogólności warto zainstalować całą grupę D jeżeli planuje się rozwijać w jakikolwiek sposób system. Źródła (najaktualniejsze) kernela pozyskać można również z http://www.kernel.org/mirrors.

4.2.2.1 Komplacja jąder wersji 2.4.x

% su -
Password:
# cd /usr/src/linux

Pierwszą rzeczą jaką należy zrobić to przywrócic źródła do stanu podstawowego. W tym celu wykonujemy poniższe polecenie (zauważ, że warto zachować kopię .config - to polecenie tego jednak nie robi):

# make mrproper

Teraz należy skonfigurować jądro dla swojego systemu. Bieżący kernel oferuje trzy sposoby na dokonanie tego. Pierwszy to klasyczny tekstowy system pytanie-odpowiedź. Zadanych zostaje mnóstwo pytań i na podstawie odpwiedzi budowany jest plik konfiguracyjny. Największy problem polega na tym, że w wypadku pomyłki cały proces należy powtórzyć. Metoda preferowana przez większkość użytkowników to konfiguracja oparta o menu. Ostatnią metodą jest najrzędzie oparte na X'ach. Wybierz tę, która Ci najbardziej odpowiada tj.:

# make config           (wersja tekstowa Q&A)
# make menuconfig       (oparte o menu, również tekstowe)
# make xconfig          (wersja korzystająca z X'ów - upewnij się ze je masz!)

Figure 4-1. Menu konfiguracji jądra (Kernel Configuration Menu)

Nowi użytkownicy prawdopodobnie wybiorą menuconfig. Dla każdej części kernela wyświetlane są ekrany pomocy w celu wyjaśnienia ich znaczenia. Po zakończonej konfiguracji wyjdź z programu. Potrzebne pliki zostaną zapisane. Teraz należy przygotować drzewo katalogów ze źródłami do kompilacji:

# make dep
# make clean

Następny krok to kompilacja. Wydaj poniższe polecenie:

# make bzImage

Może to zająć pewien czas, który zależy od mocy procesora jaki posiadasz. Podczas procesu kompilacji na ekranie pokazywane będą informacje od kompilatora. Gdy powyższy etap się zakończy należy skompilować fragmenty jądra oznaczone jako moduły:

# make modules

Teraz należy zainstalować jądro i moduły uprzednio spreparowane. Aby tego dokonać w Slackware następujące polecenia powinny zostać wydane:

# mv /boot/vmlinuz /boot/vmlinuz.old
# cat arch/i386/boot/bzImage > /vmlinuz
# mv /boot/System.map /boot/System.map.old
# cp System.map /boot/System.map
# make modules_install

Dobrym pomysłem jest edycja pliku /etc/lilo.conf w celu dodania sekcji umożliwiającej bootowanie starego jądra na wypadek gdyby coś poszło nie tak. Po wykonaniu tego kroku należy uruchomić /sbin/lilo by zainstalować nowy blok bootujący. Teraz można juz zrestartować system i cieszyć się nowym kernelem :-).

4.2.2.2 Jądra Linux'a wersje 2.6.x

Kompilacja jądra w wersji 2.6 różni się tylko nieznacznie od 2.4 czy 2.2. Istotne jest jednak by zrozumieć róznice przed jej rozpoczęciem. Po pierwsze nie ma juz kroku z make dep oraz make clean. Po drugie podczas procesu kompilacji ograniczeniu uległa ilość wiadomości wyświetlanych na ekranie. Wszystko to powoduje, że kompilacja staje się łatwiejsza do zrozumienia, jeżeli mimo to pojawią się jakieś problemy w jej trakcie zaleca się powrócenie do trybu 'gadatliwego'. Aby tego dokonać należy dodać opcję V=1. Spowoduje to pojawienie się wielu informacji podczas kompilacji, które mogą okazać się przydatne osobom rozwijającym jądro lub koledze, który zna się na rzeczy :-). Być może rozwiąże to twój problem.

# make bzImage V=1

4.2.3 Używanie modułów jądra

Moduły jądra to inna nazwa dla sterowników urządzeń, które można doczepić do działającego jądra. Pozwalają one na poszerzenie listy obsługiwanych przez twój kernel urządzeń bez konieczności zmiany lub ponownej kompilacji jądra.

Moduły mogą być ładowane i usuwanie (wyłączane) w dowolnym czasie podczas pracy systemu. Jest to bardzo użyteczne dla w administratorów wypadku aktualizacji sterowników dokonywanej przez nich. Nowy moduł może zostać skompilowany, stary usunięty, nowy załadowany - i wszystko bez konieczności restartu maszyny.

Moduły przechwywane są w katalogu /lib/modules/kernel version. Mogą być ładowane w czasie bootowania przez plik rc.modules. Jest on opatrzony licznymi komentarzami i przykładami. Aby zobaczyć listę modułów aktywnych w danym momencie użyj polecenia lsmod(1):

# lsmod
Module                  Size  Used by
parport_pc              7220   0 
parport                 7844   0  [parport_pc]

W powyższym przykładzie widać, że na mojej maszynie załadowany jest tylko moduł portu równoległego. Aby usunąć moduł, należy użyć polecenia rmmod(1). Moduły mogą być ładowane komendą modprobe(1) lub insmod(1). modprobe jest zwykle bezpieczniejszy ponieważ spowoduje on załadowanie nie tylko pożądanego modułu ale również wszystkich, od których on zależy.

Wielu użytkowników nigdy nie będzie zmuszonych do ładowania i usuwania modułów ręcznie. Służy do tego autoloader do zarządzania modułami. Domyślnie Slackware zawiera kmod w swoich jądrach. kmod to opcja kernela, która uaktywnia automatyczne ładowanie modułów gdy są wymagane. Aby uzyskać więcej informacji na temat kmod i jego konfiguracji zobacz /usr/src/linux/Documentation/kmod.txt. W tym celu powinieneś mieć zainstalowany pakiet z źródłami jądra lub sciągnąć takowe z http://kernel.org.

Więcej informacji można znaleźć w stronach manuala dla powyższych poleceń oraz w pliku rc.modules

Grenlandia 2012