Dokumentáció/SL9.3/Rendszer/A Linux-kernel

Icon-project.png A kernel kezeli a Linux-rendszer hardvereszközeit és teszi őket elérhetővé a különböző folyamatok számára. Bár a jelen fejezet senkiből nem fog kernelgurut csinálni, de azt mindenesetre tartalmazza, hogyan lehet végrehajtani a kernel frissítését és lefordítani, illetve telepíteni egy saját vagy új kernelt. Ha a fejezet útmutatásait követi, akkor a korábbi kernel működőképes marad és szükség esetén el is indítható.

Bevezetés

A /boot könyvtárban telepített kernel igen sokféle hardvereszközzel elboldogul. Normál esetben nincs is szükség saját kernel lefordítására, hacsak nem kíván kísérleti funkciókat és illesztőprogramokat tesztelni.

A telepített kernel viselkedése a kernelparaméterek segítségével módosítható. A desktop paraméter például rövidebb időszeleteket állít be az ütemezőhöz, amely a rendszer szubjektív gyorsulását eredményezi. Részletes információt az /usr/src/linux/Documentation könyvtárban lévő kerneldokumentáció tartalmaz, feltéve hogy a kernel-source csomag telepítve van.

A kernelhez számos Makefile-t biztosítottunk a folyamat automatizálására. Válassza ki a hardverbeállításokat és egyéb kernelfunkciókat. Mivel a megfelelő elemek kiválasztásához jól kell ismerni a számítógéprendszert, először érdemes egy meglévő és működő konfigurációs fájlt módosítani.

Kernelfrissítés

Hivatalos SUSE kernelfrissítés telepítéséhez használja a YaST online frissítés funkcióját. Kernelfrissítés után újra kell indítani a rendszert, mivel a régi futó kernel nem fogja megtalálni a megfelelő modulokat a szükséges funkciók biztosításához. A YaST online frissítéssel kapcsolatos további információ: YaST online frissítés.

A frissítés futtatásakor megjelenik egy menü, amely elmagyarázza a szükséges műveleteket. Ha konzisztens rendszert kíván fenntartani, akkor kövesse ezeket az utasításokat.

Kernelforrások

Kernel készítéséhez telepíteni kell a kernel-source csomagot. A többi szükséges csomagot, mint például a C fordító (gcc csomag), a GNU binutils (binutils csomag) és a C fordító include fájljai (glibc-devel csomag) a YaST megjelöli, mint automatikusan telepítendőt és telepíteni is kell őket.

Telepítés után a kernelforrások az /usr/src/linux-<kernel-verzió> könyvtárban találhatók. Ha különböző kernelekkel kíván kísérletezni, akkor bontsa ki őket különböző alkönyvtárakba és hozzon létre egy szimbolikus láncot az aktuális kernelforráshoz. Mivel vannak olyan szoftvercsomagok, amelyek az /usr/src/linux könyvtárban található forrásokra épülnek, ezt a könyvtárat szimbolikus láncként tartsa fenn az aktuális kernelforráshoz. A YaST ezt automatikusan végrehajtja.

Kernelkonfiguráció

Az aktuális kernel beállításait a /proc/config.gz fájl tartalmazza. A beállítások módosításához root felhasználóként lépjen át az /usr/src/linux könyvtárba és hajtsa végre az alábbi parancsokat:
zcat /proc/config.gz > .config make oldconfig

A make oldconfig az /usr/src/linux/.config fájlt használja aktuális kernelkonfigurációként. Az aktuális kernelforrások új beállításai lekérdezésre kerülnek. Ha a .config fájl nem létezik, akkor a kernelforrásokban megadott alapértelmezett konfiguráció kerül alkalmazásra.

A kernel konfigurációs lehetőségeit itt nem tárgyaljuk részletesen. Használja a kernelkonfiguráció során rendelkezésre álló bőséges súgót. A legújabb kerneldokumentációt mindig az /usr/src/linux/Documentation fájl tartalmazza.

Parancssori beállítás

A kernel beállításához lépjen át az /usr/src/linux könyvtárba és adja ki a make config parancsot. Válassza ki a kernel által támogatandó funkciókat. Általában két vagy három lehetőség áll rendelkezésre: Y, N és M. Az M azt jelenti, hogy az eszközt nem kell közvetlenül a kernelbe fordítani, hanem modulként kerül betöltésre. A rendszer indításához szükséges illesztőprogramokat az Y opcióval integrálni kell a kernelbe. A .config fájlból kiolvasott alapértelmezett beállítások megerősítéséhez nyomja meg az Enter billentyűt. A megfelelő opcióval kapcsolatos rövid súgószöveg egy másik billentyű megnyomásával jeleníthető meg.

Beállítás szöveges módban

A menuconfig a kernel beállításának egy jóval kényelmesebb módja. Ha szükséges, a YaST segítségével telepítse az ncurses-devel csomagot. A make menuconfig paranccsal indítsa el a kernel beállítását.

A beállítás kisebb módosításához nem kell az összes kérdésen végigmenni. Ehelyett adott részek közvetlen eléréséhez használja a menüt. Az alapértelmezett beállítások a .config fájlból kerülnek betöltésre. Másik konfiguráció betöltéséhez válassza ki az Alternatív konfigurációs fájl betöltése menüpontot és adja meg a fájlnevet.

Beállítás X Window rendszer alatt

Ha telepítette és beállította az X Window rendszert (xorg-x11 csomag) és a QT fejlesztési csomagot (qt3-devel), akkor a beállításhoz a make xconfig parancs kiadása után grafikus felhasználói felületet is használhat. Ha nem root felhasználóként van bejelentkezve az X Window rendszerbe, akkor a sux parancs segítségével kérjen le egy, a megjelenítőhöz hozzáféréssel rendelkező root-konzolt. Az alapértelmezett beállítások a .config fájlból kerülnek betöltésre. Mivel a make xconfig paranccsal megadott beállítás nem olyan jól karbantartott, mint a többi beállítási lehetőség, a konfigurációs eljárás használata után futtassa le a make oldconfig parancsot.

Kernelmodulok

Nagyon sok fajta PC-hardverkomponenst lehet kapni. A hardver megfelelő használatához egy »illesztőprogram« szükséges, amelyen keresztül az operációs rendszer (Linux esetén a kernel) el tudja érni az eszközt. Az illesztőprogramok alapvetően kétféleképp építhetők be a rendszerbe:
  • Az illesztőprogramok közvetlenül belefordíthatók a kernelbe. Az ilyen (»egy darabból álló«) kernelt szokták monolitikus kernelnek hívni. Néhány illesztőprogram csak ebben a formában érhető el.
  • Az illesztőprogramok csak igény esetén kerülnek betöltésre a kernelbe. Az ilyen felépítésű kernelt moduláris kernelnek hívják. Ennek megvan az az előnye, hogy csak a valóban szükséges illesztőprogramok kerülnek betöltésre, így a kernel nem tartalmaz szükségtelen elemeket.

A kernel beállításai adják meg, hogy mely illesztőprogramokat kell befordítani a kernelbe és melyeket kell betölteni futási modulként. Általában a rendszer elindításához nem szükséges komponenseket modulként célszerű kialakítani. Ez biztosítja, hogy a BIOS vagy a rendszertöltő által betöltendő kernel ne legyen túl nagy. Az ext2 illesztőprogramokat, SCSI alapú rendszer esetén az SCSI-illesztőprogramokat és a hasonló funkciójú más illesztőprogramokat viszont be kell fordítani a kernelbe. Ezzel ellentétben az isofs, az msdos, a sound és más hasonló részeket, amelyekre nincs szükség a számítógép elindításához, célszerű modulként kialakítani.

Icon-info.png Ötlet:

Még akár a rendszer indításához szükséges illesztőprogramok is kialakíthatók modulként. Ebben az esetben a kezdeti memóriaeszköz (initrd) tölti be ezeket a modulokat rendszerindításkor.

A kernelmodulok a /lib/modules/<verzió> könyvtárban találhatók. A verzió itt az aktuális kernelverziót jelzi.

Hardverfelismerés a hwinfo segítségével

A hwinfo képes felismerni a rendszer hardverelemeit és kiválasztani a hozzájuk szükséges illesztőprogramokat. A hwinfo --help egy rövid ismertetőt ír ki a parancsról. Ha például az SCSI-eszközökkel kapcsolatos információra van szüksége, akkor használja a hwinfo --scsi parancsot. Mindezen információ a YaST-ban, a hardverinformációs modulban is rendelkezésre áll.

Modulok kezelése

A modulok kernelbe töltéséhez szükséges segédprogramok a module-init-tools csomagban találhatók. Az alábbi parancsok használhatók:

insmod
Az insmod megkeresi a kért modult a /lib/modules/<verzió> alkönyvtárban, majd betölti. Érdemesebb azonban a modprobe parancsot használni az insmod helyett, mivel a modprobe a modul függőségeit is ellenőrzi.
rmmod
Eltávolítja a kért modult. Ez csak akkor lehetséges, ha a modulra már nincs szükség. Az isofs modul például nem távolítható el addig, amíg egy CD fel van csatolva.
depmod
A /lib/modules/<verzió> könyvtárban létrehozza a modules.dep fájlt, amely megadja az összes modul függőségét. Ez szükséges annak biztosításához, hogy az összes függő modul betöltésre kerüljön a kiválasztottakkal együtt. Ha még nem létezik ez a fájl, akkor a rendszer elindítása után felépítésre kerül.
modprobe
A modul függőségeinek figyelembe vételével betölt vagy eltávolít egy adott modult. Ez a parancs nagyon hatékony és számos dologra használható, például egy adott típusba tartozó modulok vizsgálatára egészen addig, amíg egy közülük sikeresen betöltésre nem kerül. Az insmod programmal szemben a modprobe ellenőrzi az /etc/modprobe.conf fájlt is, ezért ma már ez a modulok betöltésének preferált módszere. A témakörrel kapcsolatos részletes információt a megfelelő kézikönyvoldal tartalmaz.
lsmod
Megjeleníti, hogy mely modulok vannak jelenleg betöltve és hány más modul használja őket. A kerneldémon által elindított modulok autoclean címkével vannak ellátva. Ez a címke azt jelzi, hogy ezek a modulok a tétlenségi időkorlát elérése után automatikusan eltávolításra kerülnek.
modinfo
A modulokkal kapcsolatos információt jelenít meg. Mivel ezek az adatok magából a modulból kerülnek kibontásra, csak az illesztőprogram-fejlesztők által megadott információ jeleníthető meg. Az adatok között szerepelhet például a szerző neve, a modul leírása és a hozzá tartozó licenc, a modulparaméterek, a függőségek és a másodlagos nevek.

/etc/modprobe.conf

A modulok betöltését az /etc/modprobe.conf és az /etc/modprobe.conf.local fájl, valamint az /etc/modprobe.d könyvtár tartalma szabályozza. Lásd: man modprobe.conf. A hardvert közvetlenül elérő modulok paramétereit ebben a fájlban kell megadni. Az ilyen modulok, mint például a CD- és a hálózati illesztőprogram, rendszerspecifikus paraméterek megadását igényelhetik. Az itt használt paraméterek leírását a kernelforrások tartalmazzák. Telepítse a kernel-source csomagot és olvassa el az /usr/src/linux/Documentation könyvtárban található dokumentációt.

Kmod – a kernelmodul-betöltő (Kernel Module Loader)

A kernelmodul-betöltő a modulok használatának legelegánsabb módja. A Kmod figyel a háttérben és biztosítja, hogy a modprobe betöltse a szükséges modulokat azonnal, ahogy az adott funkcióra a kernelben szükség van.

A Kmod használatához a kernel beállításai között aktiválja a Kernelmodul-betöltő lehetőséget (CONFIG_KMOD). A Kmod nem távolítja el automatikusan a modulokat. A mai RAM-kapacitások ismeretében a lehetséges memóriamegtakarítás várhatóan jelentéktelen.

A kernel konfigurációs beállításai

Az összes kernelparaméter részletesen nem kerül bemutatásra. A legfrissebb kernel dokumentáció mindig a /usr/src/linux/Documentaion könyvtárban található.

A kernel lefordítása

A kernel létrehozásához szükséges parancsok és a kernel neve a célarchitektúrától függ. x86-kompatíbilis számítógépek esetén kis kernelre van szükség, mivel a BIOS erősen korlátozza a kernel méretét.

A javasolt megoldás egy »bzImage« fordítása. Nagy általánosságban, ez megakadályozza azt a problémát, hogy a kernel túl nagy legyen, márpedig az könnyen előfordulhat, ha túl sok funkciót válogat össze és egy »zImage«-et készít. Ilyenkor hibaüzenetet kap, például hogy a kernel túl nagy vagy a rendszer túl nagy.

A kernelkonfiguráció megfelelő testreszabása (Kernelkonfiguráció) után az alábbi parancs megadásával indítsa el a fordítást (ne felejtsen el átlépni először az /usr/src/linux könyvtárba):

make clean make bzImage
make clean make vmlinux
Icon-hardver.png pSeries

Ha például olyan kernelt kíván készíteni egy RS/6000 géphez, amely elindítható egy hajlékonylemezről, akkor adja ki a make zImage parancsot.

Ez a két parancs beírható egy parancssorként is:

make clean bzImage
make clean vmlinux

A sikeres fordítás után a tömörített kernel az /usr/src/linux/arch/<arch>/boot könyvtárban található. A kernelképfájl neve az architektúrától függ:

Icon-hardver.png x86, amd64, em64t

A kernelképfájl neve bzImage.

Icon-hardver.png S/390, ipf, ppc

A kernelképfájl neve vmlinux.gz

Icon-hardver.png pSeries

A kernelképfájl neve vmlinux az RS/6000 hajlékonylemez-kernele az /usr/src/linux/arch/<arch>/chrpboot könyvtárban kerül tárolásra.

Ha ez a fájl nem található, akkor valószínűleg hiba történt a kernelfordítás során. A Bash parancsértelmezőben adja meg az alábbi parancsot a kernelfordítás újbóli elindításához és a kimenet a kernel.out fájlba írásához:

make bzImage V=1 2>&1 | tee kernel.out
make bzImage V=1 2>&1 | tee kernel.out
make clean vmlinux V=1 2>&1 | tee kernel.out

Ha a kernel egyes részeit úgy állította be, hogy modulként töltődjenek be, akkor indítsa el a modulfordítást. Ez a make modules parancs segítségével tehető meg.

A kernel telepítése

BootX
A fent említett vmlinux fájlt át kell másolni a rendszerkönyvtárban található Linux-kernelek közé. Legközelebb, a BootX elindításakor az új kernelt a Mentés a beállítások közé lehetőségre kattintás előtt ki kell választani.
RS/6000 (quik)
Másolja át a vmlinux fájlt a boot könyvtárba és módosítsa az /etc/quik.conf fájlt.
RS/6000 (lemez)
Másolja át a zImage fájlt az /usr/src/linux/arch/<arch>/chrpboot könyvtárból egy DOS hajlékonylemezre.A kernelt lefordítása után telepíteni kell, hogy el lehessen majd indítani. A kernelt a /boot könyvtárba kell telepíteni. Ez az alábbi paranccsal hajtható végre:
INSTALL_PATH=/boot make install

Ezután telepíteni kell a lefordított modulokat. A make modules_install paranccsal másolja őket a /lib/modules/<verzió> könyvtár megfelelő célkönyvtáraiba. Ha a kernelverzió ugyanaz, akkor a régi modulok felülírásra kerülnek. Az eredeti modulok azonban a kernellel együtt újratelepíthetők a CD-kről.

Icon-info.png Ötlet:

A kínos meglepetések elkerülése érdekében azon modulokat, amelyek funkcionalitása közvetlenül befordításra került a kernelbe, feltétlenül távolítsa el a /lib/modules/<verzió> könyvtárból. Ez az egyik oka annak, hogy a tapasztalatlan felhasználóknak határozottan érdemes mellőzni a kernelfordítást.

Annak engedélyezéséhez, hogy a GRUB elindítsa a régi kernelt (e pillanatban /boot/vmlinuz.old), vegye fel a Linux.old címkét rendszerindító képként a /boot/grub/menu.lst fájlban. Az eljárás részletes leírása: A rendszertöltő. A GRUB-ot nem kell újratelepíteni.

A /boot/System.map fájl a modulok által igényelt kernelszimbólumokat tartalmazza, biztosítva a kernelfunkciók sikeres elindítását. Ez a fájl az aktuális kerneltől függ. Ha lefordította és telepítette a kernelt, akkor az /usr/src/linux/System.map fájlt másolja át a /boot könyvtárba. Ez a fájl minden kernelfordításkor újból létrehozásra kerül. Ha a System.map nem felel meg az aktuális kernelnek vagy hasonló hibaüzenetet kap, akkor a kernel fordítása után valószínűleg elfelejtette átmásolni a System.map fájlt a /boot könyvtárba. Annak engedélyezéséhez, hogy a GRUB vagy LILO elindítsa a régi kernelt (most /boot/vmlinuz.old), akkor a /boot/grub/menu.lst vagy /etc/lilo.conf fájlban vegyen fel egy Linux.old címkével rendelkező képfáj-lbejegyzést. Az eljárás részletes leírása: A rendszertöltő. Ha LILO-t használ rendszerindítóként, akkor az /etc/lilo.conf fájl módosítása után a lilo parancs segítségével újra kell telepíteni a LILO-t. A GRUB-ot nem kell újratelepíteni.

A merevlemez kitakarítása fordítás után

Ha kevés merevlemez-terület áll rendelkezésre, akkor a make clean parancs segítségével törölje a kernelfordítás közben az /usr/src/linux könyvtárban létrejött objektumfájlokat. Ha nagy lemezterület áll rendelkezésre és gyakran újra kívánja konfigurálni a kernelt, akkor ezt a lépést kihagyhatja. A kernel újrafordítása ilyenkor lényegesen gyorsabb, hiszen csak a módosított részek kerülnek újrafordításra.