Gentoo Linux kernelbeállítási útmutató
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
|
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
|
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
|
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
[*] SMT (Hyperthreading) scheduler support
[*] Multi-core scheduler support (NEW)
|
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
|
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
# 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
|
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.
Ez a dokumentum a Creative Commons -
Attribution / Share Alike licensz védelme alatt áll.
|