Dokumentáció/SL9.3/Rendszer/A Linux-kernel
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.
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
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:
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.
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.