Gentoo Logo

Konfiguracja jądra Linux

Spis treści:

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
    Z poniższej listy należy wybrać chipset płyty głównej komputera

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
    Należy wybrać odpowiedni chipset z poniższej listy

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
  Należy zaznaczyć obsługę używanych w systemie HCD - można zaznaczyć wszystkie trzy jeśli się nie wie, które wybrać

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
 Opcję powyżej należy zaznaczyć w każdym z opisanych powyżej przypadków
 [*]   SMT (Hyperthreading) scheduler support
 Ta opcja dotyczy procesorów z hiperwątkowością (HT)
 [*]   Multi-core scheduler support (NEW)
 Ta opcja dotyczy systemów dwurdzeniowych (dual core)

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
  Opcja 4GB dotyczy wszystkich sytuacji, gdy system posiada mniej niż 4GB pamięci

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
Powyższe polecenie wyświetli datę i godzinę skompliowania jądra, z którego uruchomiono system

# 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
Powyższe polecenie wyświetli datę i godzinę skompliowania jądra, które znajduje się na dysku

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.



Drukuj

Zaktualizowano 21 czerwca 2008

Podsumowanie: Ten dokument opisuje główne założenia ręcznej konfiguracji jądra oraz szczegółowo omawia najczęstsze związane z nią problemy.

Daniel Drake
Autor

Curtis Napier
Redaktor

Justin Robinson
Redaktor

Łukasz Damentko
Redaktor i tłumacz

Jonathan Smith
Redaktor

Joshua Saddler
Redaktor

Donate to support our development efforts.

Support OSL
Gentoo Centric Hosting: vr.org
Tek Alchemy
SevenL.net
Global Netoptex Inc.
Bytemark
Online Kredit Index
Copyright 2001-2009 Gentoo Foundation, Inc. Questions, Comments? Contact us.