Gentoo Logo

Gentoo Linux kernelbeállítási útmutató

Tartalom:

1.  Bevezetés

A Gentoo rendszer két módszert biztosít a kernel létrehozására: az automatikus (genkernel segítségével) és a kézi módszert. Bár az automatikus mód a könnyebb, a legtöbb Gentoo felhasználó kézzel fordítja a kernelét, különböző okokból: kisebb lesz a mérete, rugalmasabb, gyorsabban fordul, tanulságos, kevésbé unalmas, stb.

Ez a leírás nem ismerteti az automatikus módszert (genkernel). Ha a kernel beállításához és fordításához a genkernelt szeretnéd használni, fordulj a Genkernel dokumentációhoz.

Ez a leírás nem szándékozik dokumentálni a kézi beállítást elejétől a végéig, mivel a folyamat azt feltételezi, hogy képesek vagyunk a józan eszünk alapján döntést hozni, és mély technikai ismeretekkel rendelkezünk a rendszerünkről. Ehelyett bemutatja a kernelbeállítás alapjait, illetve azokat a főbb buktatókat, melyekkel igen gyakran össze lehet futni.

Ez a dokumentum az újabb keletű kernelek beállítását mutatja be a népszerűbb architektúrákon. Néhány részlet a régebbi kerneleknél vagy egzotikus architektúráknál eltérhet, de a legtöbb dolog ugyanaz.

Ennél a pontnál feltételezzük, hogy van egy Linux kernel kicsomagolva a merevlemezen (általában valahol a /usr/src mappában), tudod, hogyan kell belépni a menuconfig konfigurációs segédeszközbe, és tudsz navigálni a menürendszerben. Ha bármit nem ismersz ezek közül, előbb nézd meg a következő dokumentumokat:

2.  A beállítások áttekintése

Alapok

Maga a folyamat rém egyszerű: van egy halom opció különböző menükben és almenükben, ezekből kiválogatod azokat a hardverbeállításokat és egyéb kernelopciókat, amire neked és a rendszerednek szüksége van.

A kernelben van egy alap konfiguráció, amit akkor látsz, amikor először futtatod a menuconfigot egy érintetlen kernelfán. Az alapbeállítások általában átfogóak és praktikusak, ami azt jelenti, hogy a felhasználók többségének viszonylag kevés módosítást kell tennie. Ha le akarod tiltani azt, ami alapból engedélyezve volt, biztosnak kell lenned abban, hogy egészen pontosan tudod, mit csinálsz, az adott opciónak mi a szerepe, és hogy ez milyen változásokat fog okozni a kernel működésében.

Ha ez az első alkalom, hogy Linux kernelt fordítasz, akkor legyél nagyon óvatos: nem szabad vakmerőnek lenni, és csak a legszükségesebb opciókban térj el az alapértelmezéstől! Azonban a konfiguráció egyes részeinek megváltoztatása elengedhetetlen ahhoz, hogy később el tudd indítani a kernelt.

Beépített kontra moduláris

Egyes konfigurációs opciók három állapotúak: nem lesznek lefordítva, közvetlenül a kernelbe lesznek fordítva (Y), vagy modulként lesznek fordítva (M). A modulok külön lesznek tárolva a fájlrendszerben, míg a kernelbe fordított dolgok közvetlenül a kernelbe kerülnek.

Van egy fontos különbség a befordított és a modulként fordított elemek között: pár kivételtől eltekintve a kernel nem próbálja meg betölteni a külső modulokat, hiába lenne rá szükséged (ez a felhasználó feladata). Igaz, hogy a rendszer egyes elemei automatikusan betöltődnek, sőt, automatikus modul- betöltő programok is léteznek, mégis azt javasoljuk, hogy a hardverek támogatását és a kernel egyéb szolgáltatásait fordítsd magába a kernelbe. Így biztosan elérhető minden, amikor szükség lesz rá.

Természetesen néhány opciót feltétlenül a kernelbe kell forgatni. Például, ha a gyökér particióján ext2 fájlrendszer van, nem fogsz tudni bootolni, ha az ext2 fájlrendszer kezelése nem a kernel része (a rendszer keresi a gyökérparticiót, hogy betöltse az ext2 modult, de ez nem megy neki, hiszen nem tudja olvasni a gyökér fájlrendszerét ext2 támogatás híján).

Hardver-támogatás

Amikor a beállítóeszköz megpróbálja felismerni az architektúra típusát, nem próbál felismerni minden hardvert, ami a gépben van. Így a hardvertámogatásnál csak néhány alapértelmezett opció van beállítva, ezért neked kell megadnod azokat a dolgokat, melyek a rendszeredhez szükségesek.

Ismerned kell azokat az eszközöket, melyek a gépedben vannak. A legtöbb eszköznél nem elég a termék nevét ismerned, tudnod kell, milyen chipset van rajta.

De nem vagy egyedül, mivel van néhány segédeszköz a szükséges információk megszerzésére. Az lspci (a sys-apps/pciutils része) képes felismerni azokat az eszközöket, melyek PCI-on vagy AGP-n keresztül csatlakoznak a géphez, vagy éppen az alaplapra vannak integrálva. Az lsusb (a sys-apps/usbutils csomagból) az USB-s eszközökről ad információt.

A helyzet kissé bonyolult a hardver-világbeli standardizációk miatt. Ha nem térsz el túlzottan az alapbeállítástól, néhány kivételtől eltekintve a merevlemezek "egyszerűen csak működnek", ahogy a PS/2-es vagy USB-s egerek és billentyűzetek is. Egy alapszintű VGA támogatás is lesz. Néhány eszköz azonban, például a hálókártyák, csak félig-meddig standardizáltak, ismerned kell a kártya chipsetjét, és ez alapján tudod kiválasztani hozzá a megfelelő hardvertámogatást.

Míg néhány dolog működik az alapbeállításokkal is, érdemes lehet pár gépspecifikus opciót is beállítani, hogy ki tudd használni a rendszered teljes képességét. Például, ha nem megfelelő IDE chipsetet választasz ki, az IDE merevlemezeid nagyon lassúak lesznek.

Kernel-szolgáltatások

Nem csak a hardvertámogatásra, hanem a programtámogatásra is gondolnod kell a kernel tulajdonságainak a kiválasztásánál. Egy fontos példa a fájlrendszerek támogatottságának a kiválasztása: ki kell választanod a fix merevlemeze(i)d fájlrendszerét, valamint az összes, külső tároláshoz használt fájlrendszer(eke)t (pl. a VFAT az USB flash meghajtókon).

A másik népszerű példa a haladó hálózati funkciók. Ha a későbbiekben szeretnél router vagy tűzfal programot használni, akkor a szükséges elemek meglétéről most kell gondoskodnod.

Készen állsz?

Most, hogy bevezettelek az alapfogalmakba, valószínűleg azonosítani tudod a hardver-elemeidet, majd böngészd végig a menüket és válaszd ki az igényelt kernelfunkciókat.

Az oldal többi részének a célja az, hogy eloszlasson pár téveszmét, illetve tanácsokat ad, hogyan kerülheted el a legsűrűbben előforduló problémákat. Sok szerencsét!

3.  Általános hibák és tévedések

A SATA lemez is SCSI

A legtöbb modern munkaasztalt Serial ATA tárolóeszközökkel (merevlemez és CD/DVD meghajtó) szállítják, eltérően a régebbi IDE (szalagkábeles) példányoktól.

A SATA támogatást a Linuxban a libata réteg végzi, mely a SCSI alrendszer alatt található. Ezért aztán a SATA meghajtókat a kernelbeállításnál az SCSI meghajtókon belül kell megadni. Ráadásul a meghajtókat SCSI egységként is fogja kezelni, úgyhogy szükség lesz az SCSI lemez/cdrom támogatásra. A SATA fix lemezegységed neve (pl.) /dev/sda, a SATA CD/DVD meghajtód neve pedig (pl.) /dev/sr0 lesz.

Habár ezen meghajtók többsége SATA vezérlő, a libata mégsem csak SATA-specifikus. A közeljövőben az IDE meghajtók is ide fognak átkerülni, és ezek után a fenti megfogalmazás rájuk is érvényes lesz.

Kódlista 3.1: A libata beállítása

Device Drivers  --->
 SCSI device support  --->
  <*> SCSI device support
  <*>   SCSI disk support
  <*>   SCSI CDROM support

  SCSI low-level drivers  --->
   <*> Serial ATA (SATA) support
    Válaszd ki a chipsetednek megfelelő drivert az opció alatti listából

IDE chipsetek és a DMA

A SATA bevezetése ellenére az IDE ezsközök még sok mindenkinek létfontosságú maradt. Az IDE egy általános technológia, és a Linuxban majdnem az összes vezérlő külön kijelölés (beforgatott driver nélkül) támogatott - a kontroller-specifikus dolgokat is beleértve.

De akárhogy is nézzük, az IDE egy régi technológia, az eredeti programozott input/output kivitelezés miatt képtelen a mai gyors adatsebességet produkálni a modern tárolóeszközöknek. Az általános IDE meghajtó csak ezt a PIO átviteli módot ismeri, ez pedig lassú adatátvitelt és magas CPU használatot eredményez a lemezről/lemezre való adatátvitel idején.

Ha neked nem 1995 előtti rendszered van, akkor az IDE vezérlőd támogat egy alternatív átviteli módot, a Közvetlen Memória Elérés-t (Direct Memory Access), azaz a DMA-t. A DMA sokat gyorsít és a CPU-t alig terheli, mialatt az adatátvitel történik. Ha a rendszered általános teljesítménye kicsi, és IDE lemezeket használsz, akkor valószínűleg nem használod ki a DMA nyújtotta lehetőséget.

Kódlista 3.2: DMA engedélyezettségének ellenőrzése az IDE lemezeden

# hdparm -d /dev/hda

/dev/hda:
 using_dma    =  0 (off)

A IDE vezérlőkhöz igazán egyszerű a DMA-t engedélyezni. Csak be kell kapcsolnod a megfelelő opciót az IDE vezérlő beállításánál.

Kódlista 3.3: Az IDE vezérlő opcióinak konfigurálása

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
  [*]       Generic PCI bus-master DMA support
    Válaszd ki a chipsetednek megfelelő drivert az opció alatti listából

USB Host vezérlők

Az USB egy széles körben elterjedt busz a külső perifériák csatlakoztatására. Ennek oka döntően az, hogy ez egy nagyon standardizált protokoll, még akkor is, ha az USB hoszt kontroll eszköz (host controller devices, HCDs) a számítógép típusától függően kicsit más lehet. Három fő típus létezik:

  • UHCI (Universal Host Controller Interface): Támogatja az USB 1.1 protokollt, általában a VIA és a Intel chipset-es alaplapokon található.
  • OHCI (Open Host Controller Interface): Szintén az USB 1.1-et támogatja, viszont az Nvidia és a SiS chipset-es alaplapokon található.
  • EHCI (Extended Host Controller Interface): ez támogatja az USB 2.0 protokollt, és minden olyan alaplapon megtalálható, amelyik támogatja az USB 2.0-át.

A legtöbb rendszeren a fentiekből kettő is megtalálható: egy EHCI (USB 2.0) és vagy egy UHCI, vagy egy OHCI (USB 1.1) vezérlő. Mindkét típust ki kell választanod! Bár az összes USB 2.0 eszköz visszafelé kompatibilis az USB 1.1- el, a legtöbb USB eszköz (még a mostanság gyártottak is) az 1.1-es USB csatolóra épülnek. Ugyan, miért lenne szüksége egy USB egérnek 1.5mbit/sec átviteli sebességnél többre?

Ha a rendszeredben található USB HCD típusokhoz nem választod ki a megfelelő beállításokat, 'halott' USB-portokat kapsz eredményül: hiába csatlakoztatsz hozzá egy eszközt, nem kap áramot, vagy nem válaszol.

Egy ügyes lspci (a sys-apps/pciutils csomag része) trükk segítségével megtudhatod, mely HCD-k vannak a gépedben. A szintén kilistázott FireWire vezérlőt figyelmen kívül hagyva, könnyen észreveheted, hogy a saját rendszerem OHCI és EHCI támogatást igényel:

Kódlista 3.4: lspci használata a HCD típusának a meghatározására

# 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])

Kódlista 3.5: USB HCD-k beállítása

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
  Válaszd ki a rendszerednek megfelelő HCD-ket, vagy ha bizonytalan vagy, akkor mind a hármat.

Többprocesszoros, Hyper-Threading és Dual Core rendszerek

Egyes számítógépekben több processzor is található, de ez első ránézésre nem mindig egyértelmű.

  • Az Intel legtöbb processzora támogatja az úgynevezett hyper-threading technológiát, amikor a rendszer a processzort két logikai processzornak látja.
  • Némelyik mai Intel/AMD processzor úgy épül fel, hogy több fizikai processzor kerül egy közös dobozba. Ezeket dual core processzoroknak hívjuk.
  • Egyes drága rendszerek ténylegesen több fizikai processzort tartalmaznak. Ezek speciális alaplapra kerülnek, lényegesen nagyobb teljesítményt szolgáltatva, mint az úgynevezett uniprocesszoros gépek. Ha ilyened van, bizonyára tudsz róla, mivel igen drágák.

Bármelyik is a helyzet, ki kell választanod a megfelelő kernel-beállításokat, hogy a legjobb teljesítményt hozd ki a rendszeredből.

Kódlista 3.6: Többprocesszoros gép beállítása

Processor type and features  --->
 [*] Symmetric multi-processing support
 Válaszd ezt, ha többprocesszoros géped van (bármelyik típusú)
 [*]   SMT (Hyperthreading) scheduler support
 Válaszd ezt, ha Intel Hyper-Threading processzorod van
 [*]   Multi-core scheduler support (NEW)
 Válaszd ezt, ha dual core processzorod van

x86 High Memory támogatása

Az x86 architektúra 32 bites címtartomány-korlátja miatt a kernel alapbeállításban csak maximum 896mb memóriát tud kezelni. Ha a gépedben ennél több van, csak az első 896mb lesz elérhető, hacsak nem kapcsolod be a high memory támogatást.

Megjegyzés: Ez a korlát csak az x86 (IA32) architektúrát érinti. A többi alapból támogatja a nagyméretű memóriát, ehhez nem kell semmilyen trükközés.

Alaphelyzetben nincs bekapcsolva a high memory támogatás, mivel kissé lelassítja a rendszert. Ne ijedj meg, ez a lassulás elenyésző ahhoz a sebesség- növekedéshez képest, amit az elérhető többlet-memória jelent!

Kódlista 3.7: A high memory támogatás bekapcsolása x86 architektúrán

Processor type and features  --->
 High Memory Support  --->
  (X) 4GB
  ( ) 64GB
  Válaszd a 4GB beállítást, ha a rendszeredben legfeljebb 4GB RAM található.

4.  Egyéb kernelbeállítási dokumentációk

Eddig csak a kernelbeállítás általános koncepcióit és speciális problémáit tárgyaltuk, anélkül, hogy pontosabban elmélyedtünk volna a részletekben. (Ezeket magadnak kell felfedezned!) A Gentoo dokumentáció más részeiben azonban vannak speciális beállításról szólók is.

Ezek a leírások hasznosak lehetnek a speciális területek beállításában, ha azonban még kezdő vagy a kernelbeállítás területén, inkább ne kockáztass. Először legyen egy működő alaprendszered, s a későbbiekben majd beállítod a hangrendszert, nyomtatást, stb.

  • Az ALSA Útmutató részletesen leírja a hangkártya támogatásához szükséges beállításokat. Az ALSA egy kivétel: korábban azt javasoltuk, hogy lehetőleg mindent fordíts a kernelbe. Az ALSA-t azonban sokkal egyszerűbb beállítani és kezelni, ha modulárisan lett lefordítva.
  • A Bluetooth Útmutató a bluetooth eszközök használatához szükséges beállításokat taglalja.
  • Az IPv6 router Útmutató leírja, hogyan állítsd be a kernelt, ha a gépet következő generációs hálózati útválasztókánt szeretnéd használni.
  • Ha a zártforrású nVidia grafikus meghajtókat akarod használni (nagyteljesítményű 3D-megjelenítéshez), az nVidia Útmutató felsorolja, ilyen esetben miket kell kiválasztani, s miket nem.
  • Más egyebek mellett a Power Management Guide elmagyarázza, hogyan állítsd be a kernelt a processzor sebességének automatikus változtatásához, s hogyan érheted el a suspend/hibernálási funkciókat.
  • Ha PowerPC rendszered van, a PPC FAQ tartalmaz pár kernelbeállítási tippet.
  • A Printing HOWTO a Linux alatti nyomtatáshoz szükséges kernelopciókat sorolja fel.
  • Az USB Guide a leggyakoribb USB- eszközök használatához (billentyűzet, egér, háttértár, nyomtató) nyújt beállítási segítséget.

5.  Hibaelhárítás

A megváltoztatott beállításoknak nincs semmilyen hatása

Nagyon sokszor előfordul, hogy a felhasználó megváltoztatja a beállításokat, de a következőekben elkövet valamilyen hibát. Ezért aztán az újraindítás után egy olyan kernel indul el, amely nem egyezik meg a kívánttal, úgy tűnik, a változtatás nem oldotta meg az eredeti problémát, majd leszűrik: ez a beállítás nem old meg semmit.

A kernel fordításának és telepítésének menete nem fér el a leírás keretei között, egy általános leírást azonban találhatsz a Kernel Upgrade Guide-ban. Röviden: beállítás, fordítás, a /boot csatolása (ha még nincs csatolva), az új kernel odamásolása, újraindítás. Ha bármelyik lépést kihagyod, a változtatások nem lépnek életbe!

A fordítás idejének ellenőrzésével kiderítheted, hogy az elindított kernel megegyezik-e azzal, amit a merevlemezeden fordítottál. Feltéve, hogy x86 architektúrát használsz, a kernelforrás pedig a /usr/src/linux könyvtárban található:

Kódlista 5.1: Annak ellenőrzése, hogy a most módosított kernel indult-e el

# uname -v
#4 SMP PREEMPT Sat Jul 15 08:49:26 BST 2006
A fenti parancs kiírja, hogy a most indított kerneled mikor lett lefordítva.

# 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
A fenti parancs kiírja, a merevlemezeden lévő kernel mikor volt utoljára lefordítva.

Ha a két idő több, mint 2 perccel eltér, azt jelzi, hogy a kernel újratelepítésénél valamilyen hibát követtél el, így nem azt a kernelt indítottad el, amelyet akartál!

A modulok nem töltődnek be automatikusan

Mint már említettük, ha egy kernel-komponenst nem beépítettként (Y), hanem modulként (M) fordítasz, a kernelbeállító szkript egy csomó működést befolyásoló lehetőséget elrejt. Nem ért ezt újra leírni, ugyanis sok felhasználó esik ebbe a csapdába.

Ha egy komponenst beépítesz a kernelbe, a hozzá tartozó kód beépül a kernel- fájlba (bzImage). Ha szükség van rá, a kernel automatikusan bekapcsolja és betölti, a felhasználó közreműködése nélkül.

Ha egy komponenst modulként fordítasz, a hozzá tartozó kód egy kernel modul fájlba kerül, s a merevlemezen tárolódik. A legtöbb esetben, amikor a kernel használná ezt a komponenst, nem tudja! Pár kivételtől eltekintve a kernel meg sem próbálja betölteni ezeket a modulokat - ez teljesen a felhasználóra hárul.

Ha tehát a hálózati kártyád meghajtóját modulba teszed, majd azt veszed észre, hogy nem tudod elérni a hálózatot, valószínűleg azért van, mert a modul nem töltődött be - vagy megteszed kézzel, vagy beállítod a rendszeredet, hogy indulásnál automatikusan betöltse.

Hacsak nincs különösebb okod máshogy tenni, fordítsd ezeket a komponenseket a kernelbe, így az bármikor, automatikusan be tudja neked állítani.



Nyomtatás

Frissítve 2007. július 27.

Ezen dokumentum eredeti változatának utolsó frissítési dátuma 2011. december 26.

Összefoglaló: Ez a dokumentum bevezet a Linux-kernel beállításának rejtelmeibe, és bemutatja a főbb buktatókat.

Daniel Drake
Szerző

Curtis Napier
Közreműködő

Justin Robinson
Közreműködő

Łukasz Damentko
Közreműködő

Jonathan Smith
Szerkesztő

Garami Gábor
Fordító

Lónyai Gergely
Lektor

Sipos Tibor
Lektor

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.