Konfiguracja jądra Linux
1.
Wprowadzenie
W Gentoo dostępne są dwie metody konfiguracji jądra. Automatyczna
(genkernel) i ręczna. Automatyczna metoda może wydawać się nieco
łatwiejsza, ale większość użytkowników i tak wybiera ręczną konfigurację
jądra. Powody takiej decyzji mogą być różne, zwykle wymienia się większą
elastyczność ręcznej konfiguracji, mniejszy rozmiar jądra, krótszy czas
kompilacji, możliwość nauki i nadmiar wolnego czasu.
W tym tekście nie ma instrukcji dotyczących metody automatycznej. Jeśli ktoś
woli użyć genkernela do kompilacji i instalacji jądra, powinien skorzystać z
opisu Konfiguracji jądra genkernel.
Nie opiszemy tu całego procesu konfiguracji od początku do końca. W wielkim
stopniu zależy on bowiem od samodzielności użytkownika i jego poziomu wiedzy o
używanym sprzęcie. Zamiast tego opiszemy tu najczęściej pojawiające się
problemy.
Dokument ten dotyczy instalacji nowszych jąder dla najbardziej popularnych
architektur. Niektóre jego fragmenty mogą nie dotyczyć starszych jąder i
egzotycznego sprzętu. Większość treści powinna jednak pozostać wspólna.
Zakładamy, że użytkownik posiada źródła jądra Linux na twardym dysku (w
katalogu /usr/src), że potrafi dostać się do programu konfigurującego
jądro za pomocą polecenia menuconfig i że potrafi się po nim poruszać.
Ten dokument nie jest skierowany do osób, które nie spełniają tych warunków.
2.
Opis konfiguracji
Podstawy
Cały proces jest stosunkowo prosty. Użytkownikowi przedstawiana jest pewna
ilość opcji pogrupowanych w kilkustopniowych menu i musi on wybrać te z nich,
które dotyczą jego sprzętu.
Jądro posiada domyślną konfigurację, która jest ustawiana przy pierwszym
uruchomieniu menuconfig na konkretnym zestawie źródeł. Domyślne opcje są
skonfigurowane w bardzo dobry sposób tak, aby były odpowiednie dla większości
użytkowników zmuszając ich jedynie do drobnych poprawek konfiguracji. Nie
należy wyłączać żadnych domyślnych opcji jeśli nie wie się dokładnie do czego
one służą i jakie są konsekwencje ich wyłączenia.
Jeśli jest to pierwsza konfiguracja jądra w życiu, nie należy zmieniać za dużo,
a raczej pozostać przy jak największej ilości domyślnych opcji. Należy również
być bardzo uważnym, niektóre części konfiguracji są kluczowe dla prawidłowego
uruchomienia się systemu.
Wbudowane sterowniki czy moduły
Większość opcji można oznaczyć na trzy sposoby. Jako takie, które
wcale nie zostaną zbudowane, takie, które będą wbudowane w jądro na stałe (Y)
i takie, które zostaną zbudowane jako moduły (M). Moduły znajdują się w osobnym
katalogu na twardym dysku, w odróżnieniu od wbudowanych części jądra, które
znajdują się wewnątrz jego obrazu.
Pomiędzy sterownikami wbudowanymi i modularnymi istnieje jedna zasadnicza
różnica. Poza kilkoma wyjątkami, jądro nie będzie automatycznie ładowało
sterowników zbudowanych jako moduły, niezależnie od tego czy są potrzebne czy
nie. Wprawdzie inne składniki systemu mogą zażądać załadowania konkretnego
modułu, wciąż jednak zalecamy wbudowywanie wszystkich niezbędnych sterowników
bezpośrednio w jądro. Dzięki temu obsługa sprzętu będzie dostępna zawsze,
niezależnie od okoliczności.
Niektóre opcje po prostu trzeba wbudować na stałe w jądro. Przykładem takiej
opcji jest obsługa używanego na partycjach systemu plików. Jeśli korzysta się z
ext2 i zbuduje się jego obsługę jako moduł, system się po prostu nie
uruchomi, ponieważ nie będzie w stanie odczytać modułu ext2 z partycji, której
obsługi nie posiada.
Obsługa sprzętu
Poza wykryciem architektury systemu, program konfiguracyjny nie
przeprowadza żadnych testów sprawdzających jaki sprzęt jest zainstalowany w
komputerze. Istnieją wprawdzie domyślne opcje konfiguracyjne dla najczęściej
używanego sprzętu, ale zwykle nie mają one zastosowania w konkretnym przypadku
i konieczne jest ręczne wybranie obsługi używanego sprzętu.
Wymaga to posiadania pewnej wiedzy na temat używanego komputera, znajomości
sprzętu jaki jest w nim zainstalowany. Podstawową sprawą jest informacja o tym,
jaki chipset ma płyta główna zainstalowana w komputerze, nie jej
konkretna nazwa.
Na szczęście istnieją programy, które umożliwiają wykrycie całego
zainstalowanego w komputerze sprzętu. Program lspci (część pakietu
sys-apps/pciutils) pozwala zidentyfikować wszystkie karty rozszerzeń
podłączone do złącz PCI oraz sprzęt wbudowany w płytę główną, a program
lsusb (z pakietu sys-apps/usbutils) pozwala na identyfikację
wszystkich urządzeń podłączonych przez porty USB.
Sytuacja jest w pewien sposób skomplikowana przez różne stopnie standaryzacji
sprzętu. Jeśli dany komputer nie odbiega za bardzo od domyślnych ustawień,
sprzęt po prostu będzie działał. Dyski IDE czy klawiatura i myszka na PS/2 nie
są problemem. Problem pojawia się gdy standardy niemal nie istnieją, tak jak
na przykład dla kart sieciowych. W takim wypadku trzeba zidentyfikować
konkretny model karty sieciowej i wybrać go z długiej listy podobnych urządzeń
w odpowiednim menu programu konfiguracyjnego.
Kilka opcji domyślnych zapewnia tylko podstawową obsługę sprzętu, nie
pozwalając na wykorzystanie jego pełnych możliwości. Dotyczy to na przykład
obsługi chipsetu IDE, której domyślne ustawienia sprawią, że twarde dyski IDE
będą wprawdzie działać, ale ich praca będzie bardzo wolna.
Opcje jądra
Poza obsługą sprzętu, jądro posiada też szereg opcji dotyczących współpracy z
różnymi typami oprogramowania. Jednym z przykładów jest obsługa systemów
plików, którą trzeba wybrać, aby możliwa była praca na założonych partycjach
głównych i dodatkowych (takich jak VFAT czy karty pamięci USB).
Innym przykładem takich możliwości są zaawansowane opcje sieciowe. Aby móc
skorzystać z zapór ogniowych czy routingu, konieczne jest zaznaczenie
odpowiednich opcji w konfiguracji jądra.
Gotowi?
Po lekturze tego krótkiego omówienia podstawowych problemów związanych z
konfiguracją jądra, należy przystąpić do identyfikacji używanego sprzętu oraz
odszukiwania i włączania jego obsługi w programie konfiguracyjnym jądra.
Pozostała część tego tekstu to próba rozwiązania najczęściej pojawiających się
problemów oraz wyjaśnienienia kwestii, które najczęściej powodują dezorientację
użytkowników. Powodzenia!
3.
Najczęstsze problemy
Dyski SATA jako SCSI
Większość nowych komputerów posiada twarde dyski i napędy CD/DVD oparte na Serial ATA częściej niż na
starszym IDE.
Obsługa SATA w Linuksie jest implementowana w nakładce o nazwie
libata, która znajduje się pod podsystemem SCSI. Z tego powodu
sterowniki SATA znajdują się w tej samej sekcji co sterowniki SCSI. Dodatkowo,
wszystkie inne urządzenia przechowujące dane są traktowane jako urządzenia
SCSI, a zatem potrzebują obsługi dysków/cd-romów SCSI. Dysk twardy SATA ma w
systemie nazwę (na przykład) /dev/sda, a dysk SATA CD/DVD
/dev/sr0.
Chociaż większość tych sterowników obsługuje kontrolery SATA, libata nie
została napisana tylko dla SATA. W niedalekiej przyszłości wszystkie sterowniki
IDE również będą przepisane na libata.
Listing 3.1: Konfiguracja libata |
Device Drivers --->
SCSI device support --->
<*> SCSI device support
<*> SCSI disk support
<*> SCSI CDROM support
SCSI low-level drivers --->
<*> Serial ATA (SATA) support
|
Chipsety IDE i DMA
Pomimo pojawienia się urządzeń SATA, dyski IDE wciąż są bardzo popularne i
używane przez bardzo wiele osób. IDE to dość typowy sprzęt, zatem Linux
obsługuje niemal wszystkie jego typy bez konieczności wybierania jakichkolwiek
dodatkowych opcji.
Niestety, IDE to stara technika i w związku w tym nie jest w stanie
obsługiwać szybkich transferów jakie zapewniają nowe urządzenia. Sterownik IDE
jest ograniczony do prędkości standardu PIO co nie tylko powoduje, że wymiana
danych odbywa się stosunkowo wolno, ale też wywołuje duże obciążenie
procesora.
Jeśli komputer został wyprodukowany po 1995 roku, jego kontroler IDE powinien
posiadać jeszcze jeden standard przesyłu danych bezpośredniego dostępu do
pamięci (Direct Memory Access) nazywany zwykle skrótowo DMA. Jest on
znacznie szybszy i prawie wcale nie zużywa zasobów procesora. Jeśli system
działa strasznie wolno i korzysta się z dysku IDE, najbardziej prawdopodobnym
źródłem problemu jest właśnie nieużywanie DMA.
Uwaga:
Tak jak wspominaliśmy wcześniej, libata jest dostępne także dla dysków IDE.
Użytkownicy libata będą mieli włączone DMA na wszystkich swoich dyskach, także
na tych IDE. Nie trzeba nic dodatkowo konfigurować.
|
Osoby nieużywające libata dla dysków IDE muszą sprawdzić czy jest włączona
obsługa DMA i włączyć ją w razie potrzeby.
Listing 3.2: Sprawdzanie czy DMA jest włączone |
# hdparm -d /dev/hda
/dev/hda:
using_dma = 0 (off)
|
Aby włączyć DMA dla urządzeń IDE, wystarczy zaznaczyć w konfiguracji jądra
odpowiedni kontroler IDE.
Listing 3.3: Konfiguracja kontrolera IDE |
Device Drivers --->
ATA/ATAPI/MFM/RLL support --->
<*> ATA/ATAPI/MFM/RLL support
<*> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
[*] PCI IDE chipset support
|
Kontrolery USB
USB to szeroko stosowane
złącze, które umożliwia podłączenie do komputera dużej ilości różnych
zewnętrznych urządzeń peryferyjnych. Jednym z powodów sukcesu USB jest fakt, że
jest bardzo ustandaryzowany, chociaż urządzenia kontrolera (host controller
devices) nieco się między sobą różnią. Występują ich trzy typy:
-
UHCI (Universal Host Controller Interface) zapewnia obsługę USB 1.1
i jest używane w płytach VIA oraz Intel.
-
OHCI (Open Host Controller Interface) zapewnia obsługę USB 1.1 w
płytach głównych opartych na chipsetach Nvidia i SiS.
-
EHCI (Extended Host Controller Interface) to jeden wspólny
kontroler dla USB 2.0, który jest stosowany we wszystkich płytach głównych
obsługujących USB 2.0.
Większość komputerów posiada dwa z trzech wymienionych wyżej interfejsów. EHCI
(USB 2.0) oraz UHCI lub OHCI (USB 1.1). Ważne jest, aby zaznaczyć w
konfiguracji obsługę obu typów kontrolera występujących w komputerze. Wszystkie
urządzenia USB 2.0 są kompatybilne z USB 1.1, ale spora część urządzeń USB 1.1
nie działa pod USB 2.0 - bo i po co myszce transfery szybsze niż 1.5mbit na
sekundę?
Jeśli nie wybierze się odpowiednich sterowników dla używanych typów USB HCD,
porty USB nie będą działały, a podłączone do nich urządzenia nie dostaną
zasilania ani nie będą w stanie się komunikować z komputerem.
Dzięki pewnej sztuczce związanej z lspci (z pakietu
sys-apps/pciutils) wykrywanie używanych HCD jest banalnie proste.
Ignorując kontroler FireWire, który również spełniał warunki zapytania,
odczytujemy, że system używa OHCI i EHCI:
Listing 3.4: Wykrywanie typu HCD za pomocą lspci |
# lspci -v | grep HCI
00:02.0 USB Controller: nVidia Corporation CK804 USB Controller (rev a2) (prog-if 10 [OHCI])
00:02.1 USB Controller: nVidia Corporation CK804 USB Controller (rev a3) (prog-if 20 [EHCI])
01:0b.0 FireWire (IEEE 1394): Agere Systems FW323 (rev 61) (prog-if 10 [OHCI])
|
Listing 3.5: Konfiguracja USB HCD |
Device Drivers --->
USB support --->
<*> Support for Host-side USB
--- USB Host Controller Drivers
<*> EHCI HCD (USB 2.0) support
<*> OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support
|
Systemy z wieloma procesorami, hiperwątkowość, dwurdzeniowość
Wiele komputerów posiada więcej niż jeden procesor, ale nie zawsze jest to
bardzo oczywiste.
-
Wiele procesorów Intela posiada tak zwany hyper-threading,
czyli hiperwątkowość, co powoduje, że jeden fizyczny procesor jest
traktowany w systemie jak dwa logiczne procesory.
-
Niektóre najnowsze procesory Intela i AMD składają się faktycznie z kilku
fizycznych procesorów wewnątrz jednego opakowania. Są one nazywane
procesorami dual
core - czyli dwurdzeniowymi.
-
Niektóre najnowocześniejsze komputery posiadają kilka fizycznych procesorów
zainstalowanych na jednej specjalnej płycie głównej, co powoduje znaczny
wzrost wydajności pracy w stosunku do systemów jednoprocesorowych.
Użytkownik zwykle doskonale wie, że posiada taki komputer, gdyż nie są one
tanie.
We wszystkich tych przypadkach należy zaznaczyć odpowiednie opcje w jądrze, aby
wykorzystać maksimum wydajności oferowanej przez taki sprzęt.
Listing 3.6: Konfiguracja wieloprocesorowości |
Processor type and features --->
[*] Symmetric multi-processing support
[*] SMT (Hyperthreading) scheduler support
[*] Multi-core scheduler support (NEW)
|
x86, obsługa dużej ilości pamięci
W związku z ograniczeniami 32-bitowej przestrzeni adresowej architektury x86,
domyślna konfiguracja jądra obsługuje maksymalnie 896MB pamięci RAM. Jeśli w
komputerze zainstalowano więcej pamięci, tylko 896MB z niej będzie używane do
czasu włączenia opcji "High Memory Support".
Uwaga:
To ograniczenie występuje tylko na architekturze x86 (IA32). Inne architektury
nie mają problemów z obsługą większych ilości pamięci.
|
Opcja ta nie jest włączana domyślnie, ponieważ powoduje pewien narzut na
wydajność systemu. Nie należy się tym jednak przejmować. Korzyść z posiadania
większej ilości pamięci znacznie przewyższe koszta jej obsługi.
Listing 3.7: Obsługa większej ilości pamięci na x86 |
Processor type and features --->
High Memory Support --->
(X) 4GB
( ) 64GB
|
4.
Inne dokumenty dotyczące konfiguracji jądra
Jak dotąd omówiliśmy tylko ogólne sprawy i kilka specyficznych problemów
związanych z konfiguracją jądra, raczej bez wdawania się w niepotrzebne
szczegóły. Niektóre tematy związane z konfiguracją jądra są tak kompleksowe, że
wymagają osobnych dokumentów - i takie dokumenty należą do dokumentacji Gentoo.
Dokumenty te mogą sporo pomóc przy konfiguracji tych specyficznych opcji, do
których się odnoszą. Jeśli jednak nie jest się doświadczonym użytkownikiem, nie
należy za bardzo na ich podstawie zmieniać konfiguracji jądra. Warto zacząć od
obsługi podstawowych urządzeń i programów, a dopiero później stopniowo dodawać
obsługę dźwięku, drukowania i tym podobnych, gdy już się upewni, że nowe jądro
działa.
-
Konfiguracja sterowników ALSA w
Gentoo zawiera opis konfiguracji jądra jaką należy przeprowadzić w
celu włączenia obsługi karty dźwiękowej. ALSA to jeden z wyjątków od
sugerowanego niebudowania sterowników w modułach. Znacznie łatwiej ją
konfigurować gdy poszczególne jej komponenty są modułami.
-
Bluetooth w Gentoo Linux to
tekst opisujący opcje niezbędne do współpracy komputera z urządzeniami
bluetooth.
-
Router IPv6 na Gentoo to tekst
zawierający informacje niezbędne do włączenia obsługi routingu za pomocą
ipv6.
-
Użytkownicy firmowych sterowników do kart graficznych nVidia powinni
zapoznać się z tekstem zatytułowanym Konfiguracja kart nVidia w Gentoo,
który zawiera opis tego co powinno i tego co nie powinno być włączone w
konfiguracji jądra, aby te sterowniki mogły działać.
-
Warto również zapoznać się z opisem zarządzania zasilaniem,
który zawiera instrukcje konfiguracji jądra związanej z funkcjami zmiany
częstotliwości procesora, usypiania i hibernacji komputera.
-
Dokument PPC FAQ zawiera kilka
rozdziałów na temat konfiguracji jądra na tej architekturze.
-
Tekst Drukowanie w Gentoo
opisuje opcje związane ze sterownikami do drukarek.
-
Tekst Konfiguracja urządzeń USB w Gentoo
Linux szczegółowo opisuje korzystanie pod Linuksem z
najpopularniejszych urządzeń USB takich jak klawiatury, myszki, karty
pamięci czy drukarki.
5.
Problemy
Zmiany w konfiguracji nie odnoszą skutku
To częsty problem. Użytkownik dokonuje zmian w konfiguracji, ale potem popełnia
po drodze jakiś drobny błąd, w rezultacie którego zamiast uruchomić system z
jądrem, które właśnie zbudował, uruchamia go z jakiegoś innego obrazu. Wtedy
zauważa, że pomimo zmiany w konfiguracji jądra ich problem wciąż istnieje i
wnioskuje z tego, że zmiany tej konfiguracji nie wpływają na jego problem.
Proces kompilowania i instalowania jądra nie leży w gestii tego dokumentu,
można o nim szczegółowo przeczytać w tekście Aktualizacja jądra w systemie Gentoo. W
skrócie proces ten polega na konfiguracji jądra, kompilacji, montowaniu
partycji /boot, kopiowaniu na nią obrazu jądra i ponownym uruchomieniu
komputera. Jeśli któraś z tych czynności zostanie pominięta, zmiany nie odniosą
skutku.
Możliwe jest sprawdzenie czy jądro, z którego uruchomiono system jest tym
samym, które znajduje się na dysku, bazując na dacie i godzinie kompilacji.
Zakładając, że używana architektura to x86, a źródła jądra są w katalogu
/usr/src/linux:
Listing 5.1: Sprawdzanie jądra |
# uname -v
#4 SMP PREEMPT Sat Jul 15 08:49:26 BST 2006
# ls -l /usr/src/linux/arch/i386/boot/bzImage
-rw-r--r-- 1 dsd users 1504118 Jul 15 08:49 /usr/src/linux/arch/i386/boot/bzImage
|
Jeśli czas ten różni się o więcej niż dwie minuty, oznacza to, że podczas
instalacji jądra popełniono błąd i że obraz jądra, którego się używa nie jest
tym, którego chce się używać.
Moduły nie ładują się automatycznie
Jak już wspominaliśmy wcześniej w tym dokumencie, ustawienie jednej z opcji
jądra do zbudowania jako moduł (M) zamiast wbudowania jej na stałe (Y) wiąże
się ze sporymi utrudnieniami. Warto powtórzyć to ostrzeżenie, gdyż wielu
użytkowników ma przez takie postępowanie problemy.
Gdy sterownik jest wbudowany w jądro, jego kod znajduje się bezpośrednio w
jego obrazie (bzImage). Kiedy jądro potrzebuje z niego skorzystać, po prostu go
ładuje bez potrzeby jakiejkolwiek ingerencji ze strony użytkownika.
Kiedy sterownik budujemy jako moduł, kod znajduje się w zewnętrzym pliku
zainstalowanym gdzieś w systemie plików. Kiedy jądro chce z niego skorzystać,
nie jest w stanie, ponieważ, z kilkoma wyjątkami, nie robi nic by go najpierw
załadować do pamięci. Tę czynność pozostawia użytkownikowi.
Zatem jeśli na przykład obsługa karty sieciowej została zbudowana jako moduł, a
następnie okazuje się, że nie działa połączenie sieciowe, najbardziej
prawdopodobnym powodem jest to, że moduł ze sterownikiem karty sieciowej nie
został załadowany podczas uruchamiania systemu.
Dlatego warto zaoszczędzić sobie tych kilku straconych na naprawy minut i
wbudowywać wszystkie sterowniki na stałe w jądro, tak żeby system mógł z nich
korzystać za każdym razem gdy są mu potrzebne.
Materiał udostępniany na podstawie licencji Creative Commons -
Attribution / Share Alike.
|