A Linux Kernel HOGYAN
Brian Ward, bri@blah.math.tu-graz.ac.at
1997. május 26. Verzió: 0.80
Részletes útmutató kernel konfiguráláshoz, fordításhoz, frissítéshez
és hibakereséshez x86 alapú gépeken.
______________________________________________________________________
Tartalom:
1. Bevezetés
1.1. Ezt olvasd el először! (Komolyan)
1.2. A stílusról
2. Fontos kérdések és válaszok
2.1. Egyáltalán mit csinál a kernel?
2.2. Miért kell frissíteni a kernelt?
2.3. Milyen hardvert támogatnak az újabb kernelek?
2.4. A gcc és libc melyik verziójára van szükség?
2.5. Mi a betölthető modul?
2.6. Mennyi lemezterületre van szükség?
2.7. Mennyi ideig tart?
3. Hogyan kell konfigurálni a kernelt ?
3.1. A forrás beszerzése
3.2. A forrás kibontása
3.3. A kernel konfigurálása
3.3.1. Kernel math emulation
3.3.2. Enhanced IDE/MFM/RLL disk/cdrom/tape support
3.3.3. Networking support
3.3.4. Limit memory to low 16MB
3.3.5. System V IPC
3.3.6. Processor type (386, 486, Pentium, PPro)
3.3.7. SCSI support
3.3.8. Network device support
3.3.9. Filesystems
3.3.9.1. De én nem tudom milyen fájlrendszer kell nekem!
3.3.10. Character devices
3.3.11. Sound card
3.3.12. Egyéb konfigurációs opciók
3.3.13. Kernel hackelés
3.4. Na most mi legyen? (A Makefile)
4. A kernel fordítása
4.1. Törlések és függőségek
4.2. Fordítási idő
4.3. A ``make'' egyéb opciói
4.4. A kernel installálása
5. A kernel patch-elése
5.1. Patch-elés
5.2. Ha valami nem megy
5.3. Az .orig fájloktól való megszabadulás
5.4. Egyéb patch-ek
6. További csomagok
6.1. kbd
6.2. util-linux
6.3. hdparm
6.4. gpm
7. Néhány kelepce
7.1. make clean
7.2. Nagy vagy lassú kernel
7.3. A kernel nem fordul le
7.4. Az új kernel nem bootol
7.5. Elfelejtetted futtatni a LILO-t, vagy egyáltalán nem bootol
7.6. Azt mondja `warning: bdflush not running'
7.7. Mond valamit ``undefined symbols''-okról és nem fordul le
7.8. Nem működik az IDE/ATAPI CD-ROM meghajtó
7.9. Furcsa üzenetek ``obsolete routing requests''-ről
7.10. A tűzfal (firewall) nem működik az 1.2.0 kernellel
7.11. ``Not a compressed kernel Image file''
7.12. Problémák a konzollal 1.3.x-ra való frissítés után
7.13. Nem lehet semmit lefordítani kernel upgrade után
7.14. Korlátok megemelése
8. A 2.0.x kernelekre történő frissítés
9. Modulok
9.1. A segédprogramok telepítése
9.2. Kernellel terjesztett modulok
10. Egyéb konfigurációs opciók
10.1. Általános beállítások
10.2. Hálózati opciók
11. Tippek és trükkök
11.1. A make és patch parancsok kimenetének átirányítása
11.2. Feltételes kernel installálás
11.3. Kernel frissítések
12. Egyéb idevágó HOWTO-k, amik hasznosak lehetnek
13. Egyebek
13.1. A szerző
13.2. Tennivalók
13.3. Hozzájárulások
13.4. Copyright, licensz és ilyesmi
______________________________________________________________________
1. Bevezetés
Neked szól ez a doukumentum? Igen, ha illik rád a következők
valamelyike:
· ``Grrr''! Ennek a wizzo-46.5.6 programcsomagnak az 1.8.193-as
kernel verzió kell, nekem meg még mindig csak 1.0.9-es van!"
· Az újabb kernelek egyikében van egy olyan eszközmeghajtó, amelyre
égetően szükséged van.
· Tényleg fogalmad sincs arról, hogy hogyan kell kernelt fordítani.
· ``Tényleg csak annyi az egész, amit a README-ben írnak?''
· Jöttél, láttál, nem sikerült.
· Mutatnod kell valamit azoknak, akik ragaszkodnak hozzá, hogy Te
installálj nekik kernelt.
1.1. Ezt olvasd el először! (Komolyan)
A példák feltételezik hogy van a gépeden GNU tar, find, és xargs. Ezek
eléggé szabványosak; ez nem okozhat problémát. Továbbá feltételezem,
hogy ismered a géped fájlrendszerének felépítését; ha nem, akkor
nagyon fontos, hogy legyen egy másolatod a mount parancs normál
működés melletti outputjáról (vagy az /etc/fstab tartalma, ha el tudod
olvasni). Ez az információ fontos, és csak akkor változik meg, ha
újraparticionálják a merevlemezt, installálnak egy újat, újratelepítik
a rendszert vagy valami hasonló.
Az aktuális ``stabil'' kernel verzió a dokumentum megírásnak idején a
2.0.30 volt, tehát a hivatkozások és példák erre a verzióra
vonatkoznak. Bár megpróbáltam annyira verziófüggetlen lenni, amennyire
lehetséges, a kernel állandóan fejlesztés alatt áll, így minden újabb
verzióban elkerülhetetlenül lesznek bizonyos különbségek. Ez sem
okozhat nagy problémákat.
A linux kernel forrásnak két változata van: ``stabil'' és
``fejlesztői''. A stabil verziók az 1.0.x -től kezdődtek és páros
számot viselnek. Tehát az 1.0.x, az 1.2.x és a 2.0.x is stabil. Ezeket
tartják a legstabilabb, legkevésbé hibás kernelnek a kibocsátás
idején. A fejlesztői kernelek (1.1.x, 1.3.x, 2.1.x, stb.) tesztelésre
valók és olyanoknak szánják, akik hajlandóak új és esetleg sok hibával
teli kerneleket kipróbálni. Ne mond, hogy nem szóltam.
1.2. A stílusról
Az a szöveg ami így néz ki, az vagy olyasmi ami megjelenik a
képernyőn, vagy amit közvetlenül be kell gépelni, mint például egy
parancs, vagy egy parancs opciói, vagy egy fájlnév. (A sima szöveges
változatban nem látszik semmi különbség.) A parancsok álltalában `'
jelek között vannak.
2. Fontos kérdések és válaszok
2.1. Egyáltalán mit csinál a kernel?
A Unix kernel a közvetítő a programok és a hardver között. Menedzseli
a memóriát az összes futó program (processz) számára és biztosítja,
hogy mind egyenlően (vagy egyenlőtlenül, ha úgy tetszik)
részesüljenek a processzor ciklusaiból. Továbbá egy kényelmes,
hordozható felületet nyűjt a programoknak, amelyen át kommunikálhatnak
a hardverrel.
Ennél persze jóval több szót érdemelne a kernel működése, de ezeket az
alapvető funkciókat a legfontosabb ismerni.
2.2. Miért kell frissíteni a kernelt?
Az újabb kernelek álltalában többféle hardverrel tudnak együttműködni
mint a régebbiek (azaz több eszközmeghajtójuk van). Lehet hogy az új
kernelnek jobb a processz-kezelése, gyorsabb vagy stabilabb mint a
régi verzió, és már ki van benne javítva az előző ismert hibája. A
legtöbben az eszközmeghajtók és a kijavított hibák miatt frissítenek
kernelt.
2.3. Milyen hardvert támogatnak az újabb kernelek?
Lásd a Hardware-HOWTO-t. Továbbá megnézheted a `.config' fájlt a
linux forrásában, vagy kiderül, ha kiadod a `make config', a `make
menuconfig' vagy a `make xconfig' parancsot. Ez megmutatja az összes
hardvert amit a szabványos kernel csomag támogat, de nem mindent amit
a linux támogat. Sok elterjedt eszközmeghajtó (mint például a PCMCIA
kártyák és némely szalagos egység meghajtója) betölthető modulként
vannak megírva, amelyeket külön gondoznak és terjesztenek.
2.4. A gcc és libc melyik verziójára van szükség?
Linus ajánl egy gcc verziót a linux forráshoz mellékelt README
fájlban. Ha neked nincs meg ez a verzió, a gcc ajánlott verziójának
dokumentációja megmondja, hogy kell-e frissíteni a libc-t. Ez nem egy
bonyolult eljarás, de fontos betartani az utasításokat.
2.5. Mi a betölthető modul?
Ezek a kernel program olyan részei, amelyek nincsenek közvetlenül
beillesztve a kernelbe. Külön kell lefordítani, és szinte bármikor be
lehet illeszteni a futó kernelbe illetve ki lehet venni onnan. A
rugalmassága miatt már ez a legelterjedtebb módszer bizonyos kernel-
szolgáltatások programozására. Sok népszerű eszközmeghajtó, mint
például a PCMCIA meghajtók és a QIC-80/40 szalagos egység meghajtója
betölthető modulként van megírva.
2.6. Mennyi lemezterületre van szükség?
Ez az adott konfigurációtól függ. Először is a tömörített linux forrás
majdnem 6 megabájt a 2.0.10 -es verziónál. A legtöbb helyen ezt a
kicsomagolás után is megtartják. Kibontva 24 MB helyett foglal. De még
nincs vége: ennél is több kell, hogy le is lehessen fordítani. Ez
attól függ mennyi mindent akarsz betenni a kernelbe. Például az egyik
gépemen van hálózat, a 3Com 3C509 meghajtója, három fájlrendszer, így
összesen majdnem 30 MB lesz. A tömörített forrással együtt körülbelül
36 MB kell ehhez a konfigurációhoz. Egy másik gépen, hálózati eszköz
támogatás nélkül (de hálózati támogatással) és hangkártya támogatással
még többet foglal. Egy újabb kernelnek biztosan nagyobb a forrása mint
egy réginek, és ha sok hardvered is van, akkor gondoskodj egy
megfelelően nagy merevlemezről. (És a mai árak mellett csak ajánlani
tudom, hogy egy újabb merevlemez beszerzéséval oldd meg a tárolási
problémákat.)
2.7. Mennyi ideig tart?
A többség számára a válasz: "elég sokáig". Alapvetően a gép sebessége
és a memória mennyisége határozzák meg a fordítási időt, de kis
mértékben függ a kernelbe konfigurált dolgok mennyiségétől is. Egy
486DX4/100-es gépen 16 MB RAM-mal egy 1.2-es kernel fordítása öt
fájlrendszerrel, hálózati támogatással, hangkártya meghajtóval
körülbelül 20 percig tart. Egy 386DX/40-en (8 MB RAM) hasonló
konfigurációval majdnem másfél óra. Amíg a gép fordítja a kernelt főzz
egy kávét, nézz tévét, kötögess vagy hódolj egyéb kedvteléseknek. Ha
tényleg nagyon lassű géped van akkor megkérhetsz valakit, akinek gyors
gépe van, hogy fordítsa le neked a kernelt.
3. Hogyan kell konfigurálni a kernelt ?
3.1. A forrás beszerzése
A forrást anonymous ftp-vel lehet beszerezni az ftp.kernel.org-on a
/pub/Linux/ könyvtárból, egy tükrözésről, vagy egyéb helyről.
Általában linux-x.y.z.tar.gz a neve, ahol x.y.z a verziószám. Az újabb
(jobb?) verzók és patch-ek általában `v2.0' és `v2.1' nevű
alkönyvtárakban vannak. A legnagyobb szám a legújabb verzió (jelenleg
v2.1), és ezek "fejlesztői verziók". Ha félsz az alfa és béta
verzióktól, akkor inkább maradj egy stabil verziónál (v2.0).
Nyomatékosan ajánlom, hogy használj egy tükör ftp-helyet az
ftp.kernel.org helyett. Itt egy rövid lista a tükrözésekről:
USA: sunsite.unc.edu:/pub/Linux/kernel
USA: tsx-11.mit.edu:/pub/linux/sources/system
UK: sunsite.doc.ic.ac.uk:/pub/unix/Linux/sunsite.unc-mirror/kernel
Ausztria: ftp.univie.ac.at:/systems/linux/sunsite/kernel
Németország: ftp.Germany.EU.net:/pub/os/Linux/Local.EUnet/Kernel/Linus
Németország: sunsite.informatik.rwth-aachen.de:/pub/Linux/PEOPLE/Linus
Franciaország: ftp.ibp.fr:/pub/linux/sources/system/patches
Ausztrália: sunsite.anu.edu.au:/pub/linux/kernel
Magyarország: ftp.kfki.hu:/pub/linux/kernel
ftp.aszi.sztaki.hu:/pub/Linux/kernel
ftp.bme.hu:/pub/OS/Linux/kernel
ftp.jate.u-szeged.hu:/pub/linux/kernel
Általában a sunsite.unc.edu tükrözésein érdemes keresni. A
/pub/Linux/MIRRORS fájl tartalmazza az ismert tükrözések listáját. Ha
általános Linux információkat keresel, próbáld meg a következő
címeken: http://www.linux.org (angolul), http://www.cab.u-
szeged.hu/linux/ (magyarul).
3.2. A forrás kibontása
Lépj be `root'-ként (vagy válts át su-val) és menj át (cd-vel) a
/usr/src-be. Ha a linux telepítésekor a forrást is felrakattad (ahogy
a legtöbben), akkor már lesz ott egy `linux' nevű könyvtár, ami
tartalmazza az egész forrás-hierarchiát. Ha van elég lemezterületed
és biztosra akarsz menni, akkor tartsd meg ezt a könyvtárat. A legjobb
ha kideríted melyik verzió fut éppen és a könyvtárat annak megfelelően
nevezed át. A `uname -r' parancs kiírja az aktuális verziószámot.
Tehát ha az `uname -r' azt válaszolta, hogy `2.0.17', akkor nevezd át
a `linux'-ot (`mv'-vel) `linux-2.0.17'-re. Ha szeretsz kockáztatni,
akkor csak töröld ki az egész könyvtárat. A lényeg, hogy ne legyen
`linux' nevű könyvtár a /usr/src-ben amikor kibontod a forrást.
Most (még mindig a /usr/src-ben) bontsd ki a forrást a `tar zxpvf
linux-x.y.z.tar.gz' paranccsal. (Ha csak egy `tar xpvf linux-
x.y.z.tar' paranccsal.) Az archivum tartalma el fog száguldani a
képernyőn. Amikor vége, lesz egy új `linux' könyvtár a /usr/src-ben.
Menj bele és nézd át a README fájlt. Lesz benne egy `INSTALLING the
kernel' című rész. Hajtsd végre az utasításait, ha szükséges --
például a szimbolikus linkek elkészítése a megfelelő helyre, stb.
3.3. A kernel konfigurálása
Megjegyzés: Az itt következők egy része a Linus-féle README egy
hasonló fejezetének megismétlése, részletezése.
A /usr/src/linux-ból kiadott `make config' parancs elindít egy
konfiguráló scriptet, amely sok kérdést tesz fel. A bash kell hozzá,
ezért ellenőrizd, hogy létezik-e a /bin/bash, a /bin/sh a /bin/bash-ra
mutat-e, vagy a $BASH tartalmazza-e a /bin/bash-t.
A `make config'-nak van két könnyebben és kényelmesebben használható
alternatívája. Azok akik X alatt dolgoznak, megpróbálhatják a `make
xconfig'-ot, ha van Tk installálva. A `make menuconfig' azoknak való,
akik jobban szeretnének egy szöveges menüt; (n)curses kell hozzá.
Ezeknek a felületeknek van egy határozott elönyük: Ha elrontasz
valamit a konfigurálás közben, akkor egyszerűen vissza lehet menni
kijavítani.
A kérdésekre általában igennel (`y' (yes)) vagy nemmel (`n' (no)) kell
válaszolni. Az eszközmeghajtókhoz általában van `m' opció is. Ez azt
jelenti ``modul'', azaz a rendszer le fogja fordítani, de nem
közvetlenül a kernelbe, hanem betölthető modulként. Néhány nyilvánvaló
és nem fontos opciót itt nem magyarázok el, néhány egyéb opció
leírását lásd az ````Egyéb konfigurációs opciók'''' című fejezetben.
A 2.0.x verziótól kezdve van egy `?' opció is. Ennek hatására az adott
paraméter egy rövid leírását kapjuk. Ez a legnaprakészebb információ
az adott opcióról.
3.3.1. Kernel math emulation
Társprocesszor emuláció. Ha nincs matematikai társprocesszor a
gépedben (egy sima 386 vagy 486SX esetén) akkor erre igennel kell
válaszolni. Ha van társprocesszor és mégis igennel válaszolsz, ne
aggódj -- a kernel használni fogja a társprocesszort és figyelmen
kívül hagyja az emulációt. Az egyetlen következmény az, hogy a kernel
nagyobb lesz, fogyasztva a memóriát. Úgy hallottam, hogy a
társprocesszor emuláció lassú. Bár nincs sok köze ehhez a fejezethez,
jó ha ez eszedbe jut, ha azt tapasztalod, hogy nagyon lassú az X.
3.3.2. Enhanced IDE/MFM/RLL disk/cdrom/tape support
Megnövelt IDE/MFM/RLL disk/cdrom/szalagos egység támogatás. Erre
valószínűleg szükség lesz. Ez azt jelent, hogy a kernel támogatni
fogja a szabványos PC merevlemezeket; a legtöbb gépben ilyen van.
Ebbe nem tartoznak bele az SCSI maghajtók, ezek konfigurálására később
kerül sor.
Amennyiben nem a fenti kell, választhatod még az `Old harddisk
(MFM/RLL/IDE) driver'-t (régi MFM/RLL/IDE lemez meghajtó). Csak az
egyiket lehet választani. A fő különbség az, hogy a régi meghajtó csak
két lemezegységet tud kezelni egy csatolón, míg az előbbi egy második
csatolót is tud kezelni illetve az IDE/ATAPI CD-ROM és szalagos
egységeket is. Az új meghajtó 4k-val nagyobb, mint a régi és
feltételezhetôen ``javított'', ami azt jelenti, hogy amellett, hogy
több hibajavítást is tartalmaz, megnöveli a lemezek teljesítményét,
különösen az újabb (EIDE) hardver esetén.
3.3.3. Networking support
Hálózati támogatás. Elméletileg erre csak akkor kellene igennel
válaszolni, ha géped egy hálózaton van, mint amilyen az Internet, vagy
éppen SLIP, PPP, term, stb. segítségével telefonvonalon akarsz
hálózatra kapcsolódni. De mivel sok programcsomag (mint például az X
ablakozó rendszer) akkor is igényel hálózati támogatást, ha a gép
nincs igazi hálózatra kötve, mindenképpen igennel kell válaszolni.
Később megkérdezi, hogy akarsz-e TCP/IP támogatást; itt is y' a
válasz, ha nem vagy teljesen biztos az ellenkezőjében.
3.3.4. Limit memory to low 16MB
Memória korlátozása az alsó 16 MB-ra. Vannak hibás 386-os DMA
vezérlők, amelyek nem tudnak 16 MB fölé eső memóriát megcímezni. Csak
abban a ritka esetben kell igennel válaszolni, ha ilyened van.
3.3.5. System V IPC
Az IPC (Interprocess Communication = ``processzek közötti
kommunikáció'') egyik legjobb definicója a Perl könyv
szómagyarázatában található. Nem meglepő, hogy néhány Perl programozó
ennek segítségével küld üzeneteket processzek között, csakűgy mint sok
más programcsomag (pl. a DOOM, hogy a legismertebbet említsem). Ezért
nem ajánlatos n-nel válaszolni, hacsak nem tudod pontosan mit
csinálsz.
3.3.6. Processor type (386, 486, Pentium, PPro)
Processzor típusa. Régebben ez befordított bizonyos optimalizációt az
adott processzorhoz; a kernel simán futott más processzorokon is, csak
egy kicsit nagyobb volt. Az újabb kernelek esetén ez már nem így van,
ezért annak a processzornak a tipusát kell beírni, amelyhez a kernel
készül. Egy ``386-os'' kernel minden gépen menni fog.
3.3.7. SCSI support
SCSI támogatás. Ha van SCSI eszközöd, válaszolj `y'-t. További
kérdéseket fog feltenni CD-ROM támogatásról, a lemezegységek és az
SCSI adapter típusáról. Lásd az SCSI-HOWTO-t részletes információért.
3.3.8. Network device support
Hálózati eszköz támogatás. Ha van hálózati kártyád, vagy szeretnél
SLIP-pel, PPP-vel vagy a párhuzmos porton át csatlakozni az
Internethez, válaszolj igennel. A konfigurációs script megkérdezi a
kártya tipusát és a használandó protokollt.
3.3.9. Filesystems
Fájlrendszerek. A konfiguráló script ezek után megkérdi, hogy akarod-
e használni a következő fájlrendszereket:
Minix - Az újabb disztribúciók nem hoznak létre minix
fájlrendszereket, és sokan nem is használják, de ennek ellénére
érdemes lehet bekonfigurálni. Néhány ``mentőlemez''-program
használja, és sok floppyn van minix fájlrendszer, mert floppyn sokkal
kényelmesebb ezt használni (kevesebb helyet foglal maga a
fájlrendszer).
Extended (ext) - Ez volt az ext2 fájlrendszer első változata, ma már
nem használják széles körben. Ha szükséged van rá, akkor valószínüleg
tudsz is róla; ha nem tudod, akkor nincs is rá szükséged.
Second extended (ext2) - Ezt széles körben használják az újabb
disztribúciók. Valószínűleg ilyened van, ezért igennel kell
válaszolni.
xiafs - Egy időben elterjedt volt, de most nem ismerek senkit aki
használja.
msdos - Ha használni akarod a meglévő MS-DOS winchester particiókat,
vagy DOS alatt formázott floppykat akarsz mountolni, akkor válaszolj
igennel.
umsdos - Ez a fájlrendszer kibővít egy MS-DOS fájlrendszert a szokásos
Unix-szerű tulajdonságokkal, mint például a hosszú fájlnevek.
Haszontalan olyanoknak (mint én), akik nem használnak DOS-t.
/proc - Az egyik legnagyszerűbb dolog a tejpor feltalálása óta. (Az
ötletet azt hiszem a Bell Labs-tól lopták szégyentelen módon.) A proc
fájlrendszer nem arra való, hogy létrehozzák a lemezen; ez egy
fájlrendszer felület a kernel és a processzek felé. Sok processz-
listázó (mint a `ps') használja. Egyszer próbáld ki a `cat
/proc/meminfo' vagy `cat /proc/devices' parancsokat. Néhány
parancsértelmező (különösen az rc) használja a /proc/self/fd-t (más
rendszereken /dev/fd néven ismert) I/O műveletekre. Majdnem biztosan
igennel kell válaszolnod erre, sok fontos linux segédprogram
támaszkodik rá.
NFS - Ha a géped hálózatra van kötve és szeretnél más gépeken lévő
fájlrendszerereket használni NFS-sel, akkor válaszd ki.
ISO9660 - A legtöbb CD-ROM-on ez található. Ha van CD-ROM meghajtód és
szeretnéd linux alatt használni, válaszd ki.
HPFS - Az írás idején egy csak olvasható fájlrendszer OS/2 HPFS-hez.
System V and Coherent - System V és Coherent partíciókhoz. (Ezek más
PC-s Unix változatok.)
3.3.9.1. De én nem tudom milyen fájlrendszer kell nekem!
Jól van, írd be, hogy `mount'. A kimenet valami ilyesmi lesz:
blah# mount
/dev/hda1 on / type ext2 (defaults)
/dev/hda3 on /usr type ext2 (defaults)
none on /proc type proc (defaults)
/dev/fd0 on /mnt type msdos (defaults)
Nézd meg mindegyik sort. A `type' utáni szó a fájlrendszer típusa.
Ebben a példában a / és a /usr fájlrendszerek típusa ext2 (second
extended). Használok /proc fájlrendszert is, továbbá egy floppy be van
mountolva msdos fájlrendszerként.
Megpróbálkozhatsz a `cat /proc/filesystems' paranccsal, ha a /proc
éppen támogatva van a futó kernelben és be van mountolva; ez ki fogja
listázni az aktuális kernel fájlrendszereit.
Ritkán használt, nem létfontosságú fájlrendszerek bekonfigurálása
túlméretezett kernelt eredményezhet. A ``modulokról'' szóló fejezetből
kiderül, hogy ezt hogy lehet elkerülni. A ````Néhány kelepce''''
címűből pedig az, hogy miért nemkívánatos a nagy kernel.
3.3.10. Character devices
Karakteres eszközök. Itt állíthatók be a (párhuzamos) nyomtató, busz-
egér (busmouse), PS/2 egér (sok notebook gép használ PS/2 egér
protokollt a beépített trackballhoz), néhány szalagos egység és más
hasonló ``karakteres'' eszközökhöz a meghajtók. Nyomj `y'-t a
megfelelő helyen.
1. Megjegyzés: A selection egy program amely lehetővé teszi az egér
használatát az X ablakozó rendszeren kívül is, virtuális konzolok
közötti másolásra. Ha soros egered van, elég kellemes, mert jól
megfér az X-el, de ha másmilyen, akkor trükközni kel. A selection
támogatása valamikor konfigurációs opció volt, de ma már szabványos.
2. Megjegyzés: A selection már elavultnak számít. Az új program neve
``gpm''. Többet tud: például egér protokollok között fordítani, több
egeret kezelni, stb.
3.3.11. Sound card
Hangkártya. Ha nagyon vágysz arra, hogy halljad a biff-et ugatni,
nyomj `y'-t, és a konfigurációs program részletesen ki fog kérdezni a
hangkártyádról. Ha van hangkártyád, melegen ajánlom a Sound-HOWTO-t.
3.3.12. Egyéb konfigurációs opciók
Nincs az összes konfigurációs opció felsorolva itt, egyrészt mert túl
gyorsan változnak, másrészt mert magától értetődőek. (Például a ``3Com
3C509 support'' az említett ethernet kártyához való támogatást
jelenti.) Axel Boldt (axel@uni-paderborn.de) összeállított egy
meglehetősen széleskörű listát az összes opcióról (és egy módszert,
amivel be lehet tenni őket a Configure scriptbe), amely a
http://math-www.uni-paderborn.de/~axel/config_help.html
címen található, vagy anonymous FTP-vel a
ftp://sunsite.unc.edu/pub/Linux/kernel/config/krnl_cnfg_hlp.x.yz.tgz
címen, ahol x.yz a verziószám.
A későbbi kernelekben (2.0.x és e fölött) ez már be van integrálva a
forrásba.
3.3.13. Kernel hackelés
Linus írja a README-ben:
A ``kernel hacking'' konfigurációs részletek általában nagyobb vagy
lassabb (vagy mindkettő) kernelt eredményeznek, sőt akár kevésbé
stabilabbá is tehetik a kernelt azáltal, hogy bekonfigurálnak néhány
rutint, amelyek megpróbálják aktívan feltörni a hibás
programrészleteket, hogy így találjanak problémákat. Ezért inkább
`n'-t kell válaszolni az erre vonatkozó kérdésekre egy ``stabil''
kernel esetén.
3.4. Na most mi legyen? (A Makefile)
A make menuconfig vagy a make xconfig után egy üzenet tudatja, hogy a
kernel konfigurálása megtörtént és felszólít, hogy ``check the top-
level Makefile for additional configuration'', stb. (``További
konfiguráláshoz ellenőrizd a felsőszintű Makefile-t'')
Nézz bele tehát a Makefile-ba. Valószínűleg nem kell megváltoztatni
semmit, de megnézni sosem árthat. Az opciókat megváltoztathatod akkor
is, amikor az új kernel már a helyén van az `rdev' paranccsal.
4. A kernel fordítása
4.1. Törlések és függőségek
Amikor a konfiguráló script véget ér, azt is mondja, hogy add ki a
`make dep' és a `make clean' parancsokat. A `make dep' ellenőrzi,
hogy az összes függőség, mint például az include fájlok, a helyükön
vannak-e. Nem tart sokáig, hacsak a géped nem nagyon lassú. Egy `make
clean'-t is csinálni kell. Ez letörli az összes object fájlt és
néhány egyéb dolgot, amit a régi verzió hátrahagy. Mindenesetre ne
felejtsd el ezt a lépést, mielőtt megpróbálod újrafordítani a kernelt.
4.2. Fordítási idő
A `make dep' és `make clean' után jöhet a `make zImage' vagy `make
zdisk' (Ez az a rész, ami sokáig tart.) A `make zImage' lefordítja a
kernelt és (többek között) egy `zImage' nevű fált hagy maga után a
arch/i386/boot-ban. Ez az új tömörített kernel. A `make zdisk'
ugyanezt teszi, de az új zImage-t rámásolja egy floppyra, amelyet
addigra remélhetőleg már betettél az ``A:'' drive-ba. A `zdisk' nagyon
kényelmes az új kernelek teszteléséhez. Ha lefagy (vagy egyszerűen
csak nem működik jól), akkor csak kiveszed a floppyt és bootolhatsz a
régi kernellel. Akkor is jól jön, ha véletlenül letörlöd a kernelt
(vagy valami hasonló szörnyűség történik). Új rendszerek telepítésére
is lehet használni; az egyik lemez tartalmát egyszerűen átmásolod a
másikra.
Minden valamirevaló újabb kernel tömörítve van, ezért van `z' a nevük
előtt. A tömörített kernel automatikusan kicsomagolja magát, amikor
végrehajtódik.
4.3. A ``make'' egyéb opciói
A `make mrproper' alaposabb törlést végez. Néha szükség van rá,
ajánlott minden patch alkalmával végrehajtani. A `make mrproper' a
konfigurációs fájlt (.config) is letörli, ezért csinálj róla
biztonsági másolatot, ha megtartásra érdemesnek találod.
A `make oldconfig' megpróbálja egy régi konfigurációs fájl alapján
konfigurálni a kernelt; elvégzi helyetted a `make config' lépést. Ha
még sosem fordítottál kernelt vagy nincs régi konfigurációs fájl
kéznél, akkor ne tedd, mert minden bizonnyal meg kell változtatni az
alapértelmezett konfigurációt.
A `make modules' leírása a modulokról szóló fejezetben található.
4.4. A kernel installálása
Ha kész van a kernel és az úgy is működik, ahogy szeretnéd, itt az
ideje installálni. A legtöbben a LILO-t (Linux Loader) használják erre
célra. A `make zlilo' installálja a kernelt, lefuttatja rajta a LILO-
t, és bootolásra kész állapotba hozza, DE CSAK AKKOR, ha a LILO a
következőképpen van konfigurálva: a kernel /vmlinuz, a LILO az /sbin-
ben van, és a LILO konfigurációs fájl (/etc/lilo.conf) tartalma is
ennek megfelelő.
Ellenkező esetben közvetlenül kell a LILO-t használni. Eléggé könnyű
installálni és használni, de a konfigurációs fájl hajlamos
összezavarni az embereket. Nézd meg a konfigurációs fájlban (a
régebbi verzióknál /etc/lilo/config, az újaknál /etc/lilo.conf), hogy
mi az aktuális beállítás. A konfigurációs fájl így néz ki:
...
image = /vmlinuz
label = Linux
root = /dev/hda1
...
Az `image =' az aktuális kernelre mutat. A legtöbben /vmlinuz-t
használnak. A `label' alapján dönti el a lilo, hogy melyik kernelt,
vagy operációs rendszert indítsa el, és a `root' az adott operációs
rendszert gyökérkönyvtára. Készíts biztonsági másolatot a régi
kernelről és másold a frissen fordított zImage-t a helyére. (Például,
ha `/vmlinuz'-t használsz, azt mondod, hogy `cp zImage /vmlinuz')
Ezután futtasd a lilo-t -- az újabb rendszereken elég annyi, hogy
`lilo', de régebbieken lehet, hogy /etc/lilo/install , vagy akár
/etc/lilo/lilo -C /etc/lilo/config kell.
Ha szeretnél többet tudni a LILO konfigurálásáról, vagy nincs is meg
neked, akkor szerezd meg a legújabb verziót a kedvenc ftp helyedről és
kövesd az utasításokat.
Ha szeretnél egy régi kernelt bootolni a merevlemezről (így is
megmenekülhetsz, ha az újat elrontottad), másold le a lilo
konfigurációs fájlban az `image = xxx' sort és az utánna következő
sorokat a fájl aljára, és változtasd meg az `image = xxx' sort `image
= yyy'-ra, ahol `yyy' annak a fájlnak a teljes elérési útvonala,
amelybe a régi kernelt mentetted. Azután változtasd meg a `label =
zzz' sort `label = linux-backup'-ra és futtasd a lilo-t. Lehet, hogy
be kell tenni egy `delay=x' sort is a konfigurációs fájlba, ahol x az
az idő tizedmásodpercben megadva, amennyit a lilo vár mielőtt
bootolna. Így meg lehet szakítani (például a shift billentyűvel) és be
lehet írni a régi kernel címkéjét, ha valami kellemetlen történik az
újjal.
5. A kernel patch-elése
5.1. Patch-elés
A kernel inkrementális frissítéseit patch (``folt'') formában
terjesztik. Például, ha neked a 2.0.30 verzió van meg, és
észreveszed, hogy van hozzá valahol egy `patch-2.0.31.gz', akkor ez
azt jelenti, hogy upgrade-elhetsz a 2.0.31 verzióra a patch
alkalmazásával. Először talán készíts egy biztonsági másolatot a
forrásról. (`make clean' aztán `cd /usr/src; tar zcvf old-tree.tgz
linux' csinál neked egy tömörített tar archivumot.)
A fenti példát folytatva, tegyük fel, hogy a `patch-2.0.31.gz' az
/usr/src-ben van. Menj át az /usr/src-be (cd) és add ki a `zcat
patch-2.0.31.gz | patch -p0' parancsot (vagy `patch -p0 <
patch-2.0.31.gz', ha a patch nincs tömörítve). Egy csomó minden fog
elsuhanni elötted a képernyőn (vagy épp elvánszorogni, ha annyira
lassú a gép). Üzenetek jelennek meg arról, hogy a patch éppen mit
csinál, és hogy sikerült-e neki vagy nem. Ez általában túl gyors
ahhoz, hogy bármit is el lehessen olvasni. Ha nem vagy biztos benne,
hogy sikerült-e, használd a patch -s opcióját, aminek hatására csak a
hibaüzeneteket írja ki. Menj be a /usr/src/linux-ba és keress .rej
(``reject'') kiterjesztésű fájlokat. A patch néhány verziója (olyan
régebbi verziók, amelyeket gyengébb fájlrendszerhez fordítottak) #
kiterjesztést ad a ``reject'' fájloknak. A `find' parancsot
használhatod a keresésre:
find . -name '*.rej' -print
Ez kiírja a standard outputra az összes olyan fájl nevét, amely az
aktuális könyvtárban, vagy az abból nyíló alkönyvtárakban van és .rej
a kiterjesztése.
Ha minden simán ment, akkor add ki a `make clean', `config', és `dep'
parancsokat a 3. és 4. fejezetben leírtaknak megfelelően.
A patch parancsnak elég sok opciója van. Ahogy az előbb is szó volt
róla, a patch -s kikapcsolja az üzeneteket, a hibák kivételével. Ha a
kernel forrását nem az /usr/src/linux-ben tartod, hanem valahol
másutt, akkor a patch -p1 (az adott könyvtárban) fogja helyesen
megpatchelni. A többi patch opció jól le van írva a manualban.
A fenti folyamat akár automatizálható is a patch-kernel scripttel, ami
szintén megtalálható a kernel forrásában. Meghatározza a kernel
aktuális verziószámát, majd minden patch-et alkalmaz rá amit megtalál,
s ami frissebb az aktuális kernel verziójánál.
cd /usr/src
. linux/scripts/patch-kernel
A kernelforrás alapértelmezett könyvtára a /usr/src/linux, de első
argumentumként más is megadható. Továbbá a patch-eket az aktuális
könyvtárban keresi a script, hacsak a második argumantumban nem adsz
meg egy másik könyvtárat.
5.2. Ha valami nem megy
(Megjegyzés: ez a fejezet főként nagyon régi kernelekre vonatkozik)
A leggyakrabban felmerülő probléma régebben az volt, hogy a patch
módosított egy `config.in' nevű fájlt, és nem sikerült, mert a
felhasználó megváltoztatta az opciókat, hogy illeszkedjen a gépéhez.
Ezt azóta megoldották, de még lehet vele találkozni egy régebbi
kibocsátás esetében. A következőképpen lehet megjavítani: Nézz bele a
config.in.rej fájlba és keresd meg mi maradt az eredeti patch-ből. A
változásokat általában sor eleji `+' and `-' jelek jelzik. Nézd meg a
körülötte lévő sorokat és jegyezd emg, hogy az állásuk `y' vagy `n'.
Utánna szerkeszd át a config.in-t, és változtasd meg a `y'-t `n'-ra és
az `n'-t `y'-ra a megfelelő helyeken. Addj ki egy
patch -p0 < config.in.rej
parancsot, és ha sikerül (nincs hibaüzenet), akkor lehet folytatni a
konfigurálással és fordítással. A config.in.rej fájl megmarad, de le
lehet törölni.
Ha további problémák bukkannak elő, akkor lehet, hogy rossz sorrendben
alkalmaztad a patch-okat. Ha azt mondja, hogy `previously applied
patch detected: Assume -R?', akkor lehet, hogy az aktuális verzió
előtti patchot próbálsz felrakni. Ha `y'-t válaszolsz, akkor
megpróbálja lerontani a forrást, és nagy valószínűséggel kudarcot
vall. Így aztán szerezni kell egy teljes vadonatúj forrást. (Lehet,
hogy mindjárt ezzel kellett volna kezdeni.)
Egy patch-et visszacsinálni a `patch -R' parancsal lehet.
Ha a patch-ek tényleg nem működnek, akkor legjobban teszed, ha
beszerzel egy érintetlen forrást (például egy linux-x.y.z.tar.gz
fájlt) és elkezded elölről.
5.3. Az .orig fájloktól való megszabadulás
Már néhány patch után az .orig fájlok kezdenek felhalmozódni. Például
egyszer volt egy 1.1.51 forrásom, ami az 1.1.48. óta nem volt
megtisztogatva. Az .orig fájlok letörlése több mint fél megát
szabadított fel. Egy
find . -name '*.orig' -exec rm -f {} ';'
elintézi. A patch azon verziói, amelyek #-al jelölik a ``reject''
fájlokat, tildét használnak .orig kiterjesztés helyett.
Van egy jobb módja is az .orig fájloktól való megszabadulásnak, amihez
kell a GNU xargs:
find . -name '*.orig' | xargs rm
vagy a ``hosszú de biztos'' módszer:
find . -name '*.orig' -print0 | xargs --null rm --
5.4. Egyéb patch-ek
Linus Torvalds által terjesztette patch-eken kívül vannak másmilyenek
is (nevezzük őket ``nem szabványos''-nak). Ha ezeket felrakod, akkor
lehet, hogy a Linus féle patch-ek nem fognak jól működni, és akkor
vagy visszacsinálod őket és megjavítod a forrást vagy a patchet, vagy
felraksz egy új forrást, vagy a fentiek valamilyen kombinációja. Ez
nagyon idegesítő lehet, tehát ha nem akarod módosítani a forrást
(kockáztatva egy nagyon rossz végkimenetelt), csináld vissza a nem
szabványos patcheket mielőtt felrakod Linus-éit, vagy rakj fel egy új
forrást. Így ellenőrízheted, hogy a nem szabványos patch-ek működnek-e
még. Ha nem, akkor vagy be kell érned egy régi kernellel, vagy addig
bütykölöd vagy a forrást vagy a patch-et amíg nem működik, vagy vársz
(esetleg könyörögsz), hogy kijöjjön a patch egy új verziója.
Mennyire elterjedtek a nem szabványos patchek? Valószínűleg fogsz
róluk hallani. Régebben használtam a noblink patchet a virtuális
konzolokon, mert utálom a villogó kurzort. (Ezt gyakran frissítik
(vagy legalábbis frissítették) a kernel új verzióihoz). De mivel a
legtöbb új eszközmeghajtót betölthető modulnak fejlesztik, a nem
szabványos patch-ek gyakorisága jelentősen csökken.
6. További csomagok
A linux kernelnek sok olyan szolgáltatása van, amelyet nem említenek
meg magában a forrásban. Ezeket a szolgáltatásokat általában külső
programcsomagokon keresztül használnak. A leggyakoribbakból néhány:
6.1. kbd
A linux konzolnak talán több szolgáltatása van, mint amennyit
megérdemel. Többek között betűkészletet tud váltani, átállítja a
billentyűzetet, átváltja a video módot (az újabb kerneleknél), stb. A
kbd csomagban olyan programok vannak, amelyekkel a felhasználó
végezheti el mindezeket, plusz sok betűkészlet és beállítások szinte
minden billentyűzethez. Ugyanazokról a helyekről lehet beszerezni,
mint a kernel forrást.
6.2. util-linux
Rik Faith (faith@cs.unc.edu) összeállított egy linux segédprogramokból
álló nagy gyűjtemény, melynek neve, valami különös véletlen folytán,
util-linux. Ennek karbantartója azóta Nicolai Langfeldt (util-
linux@math.uio.no). Megszerezhető anonymous ftp-vel a
sunsite.unc.edu-ról a /pub/Linux/system/misc könyvtárból. Tartalmazza
többek között a setterm, rdev, és ctrlaltdel programokat, a kernellel
kapcsolatosak közül. Ahogy Rik mondja, ne rakd fel ész nélkül. Nem
kell mindent installálni, ami a csomagban van, és könnyen okozhat
komoly problémákat, ha megteszed.
6.3. hdparm
Mint sok csomag, ez is egy kernel patch és hozzávaló segédprogramok
gyüjteménye volt valaha. A patch bekerült a hivatalos kernelbe, a
programokat, amelyekkel optimalizálni és bütykölni lehet a
merevlemezt, külön terjesztik.
6.4. gpm
gpm annyit tesz, mint ``general purpose mouse'' (``általános célú
egér''). Ezzel a programmal szöveget lehet másolni (``cut and
paste'') az egyik virtuális konzolról a másikra, és még sok minden
mást lehet csinálni, sokféle egértípussal.
7. Néhány kelepce
7.1. make clean
Ha az új kernel egy rutinszerű kernelfrissítés után elkezd nagyon vad
dolgokat művelni, akkor könnyen lehet, hogy elfeljtetted kiadni a make
clean parancsot az új kernel lefordítása előtt. A tünetek változatosak
lehetnek: egyszerűen összeomlik, furcsa I/O problémák jönnek elő vagy
csak nagyon lassú lesz. Ne felejtsd el a make dep-et se.
7.2. Nagy vagy lassú kernel
Ha a kernel sok memóriát foglal el, túl nagy, és/vagy egy
örökkévalóságig tart lefordítani akkor is, ha a vadonatúj 786DX6/440
gépeddel esel neki, akkor valószínűleg túl sok fölösleges dolog
(eszközmaghajtók, fájlrendszerek, stb.) van belekonfigurálva. Ha nem
használod, akkor ne is konfiguráld be, mert foglalja a memóriát. A túl
nagy kernel legszembetűnőbb tünete a memória és diszk közötti túlzott
swappelés. Ha a merevlemez sokat zörög, és nem egy régi Fujitsu
Eagles, ami kikapcsoláskor olyan hangot ad, mint egy sugárhajtású
repülőgép leszálás közben, akkor nézd át a kernel konfigurálást.
Megtudhatod, hogy mennyi memóriát használ a kernel, ha fogod a
gépedben levő összes memória mennyiségét és kivonod belőle a ``total
mem'' mező értékét a /proc/meminfo-ból, vagy a `free' outputjából.
Megtuthatod még úgy is, hogy kiadod a `dmesg' parancsot (vagy megnézed
a kernel log fájlt, bárhol is legyen a gépeden -- általában ez a
/var/log/messages). Lesz benne egy ilyen sor:
Memory: 15124k/16384k available (552k kernel code, 384k reserved, 324k
data)
A 386-osom (amelyen egy kicsit kevesebb plusz dolog van
bekonfigurálva) ezt írja ki:
Memory: 7000k/8192k available (496k kernel code, 384k reserved, 312k
data)
Ha nem bírsz élni nagy kernel nélkül, de a gép nem engedi, akkor
próbáld ki a `make bzimage'-t. Könnyen lehet, hogy akkor a LILO egy új
verzióját is installálnod kell.
7.3. A kernel nem fordul le
Ha nem fordul le, akkor valószínűleg nem sikerült egy patch, vagy a
forrás valahogy megsérült. Lehet, hogy nem jó a gcc adott verziója,
vagy az is lehet sérült (például az include fájlok lehetnek hibásak).
Ellenőrizd, hogy a szimbólikus linkek, amelyeket Linus említ a README-
ben jól vannak-e beállítva. Általában elmondható, hogy ha a szabványos
kernel nem fordul le, akkor valami komoly baj van a rendszerrel, és
valószínűleg újra kell installálni bizonyos programokat.
Vagy talán egy 1.2.x kernelt fordítassz egy ELF fordítóval (gcc 2.6.3
és a fölött). Ha rengeteg ez-meg-az undefined üzenetet kapsz fordítás
közben, akkor lehet, hogy ez a baj. A megoldás a legtöbb esetben
nagyon egyszerű. Másold a következő sorokat a arch/i386/Makefile
elejére:
AS=/usr/i486-linuxaout/bin/as
LD=/usr/i486-linuxaout/bin/ld -m i386linux
CC=gcc -b i486-linuxaout -D__KERNEL__ -I$(TOPDIR)/include
Azután csinálj make dep-t és zImage-t újra.
Ritka esetekben előfordul, hogy a gcc hardver okok miatt száll el. A
hibaüzenet valami olyasmi lesz, hogy ``xxx exited with signal 15'' és
általában nagyon rejtélyesen néz ki. Talán nem is említeném, he nem
történt volna meg velem is egyszer -- A cache memória hibás volt és a
gcc időnként véletlenszerűen elszállt. Először próbáld meg
újrainstallálni a gcc-t, ha ilyen gond merül fel. Csak akkor kell
gyanakodni, ha a kernel hiba nélkül lefordul kikapcsolt külső cache,
kevesebb RAM, stb. mellett.
Az embereket általában nyugtalanítja, ha felvetődik, hogy a hardverük
hibás lehet. Nos, nem én találtam ki. Itt van hozzá egy FAQ:
http://www.bitwizard.nl/sig11/.
7.4. Az új kernel nem bootol
Nem futtattad a LILO-t, vagy rosszul van konfigurálva. Egyszer az
``fogott'' meg, hogy hiba volt a konfig fájlban. `boot =/dev/hda1'
volt benne `boot = /dev/hda' helyett. (Ez elsőre nagyon idegesítő
lehet, de ha már van egy működő konfig fájl, nem kell hozzányúlni.)
7.5. Elfelejtetted futtatni a LILO-t, vagy egyáltalán nem bootol
Hoppá! A legjobb amit ilyen helyzetben tehetsz az, hogy floppyról
bootolsz és csinálsz egy másik bootolható floppyt (ahogy a `make
zdisk' is csinálná). Tudnod kell, hogy hol van a root (/) fájlrendszer
és az milyen típusú (pl. második kiterjesztett, minix). Az alábbi
példában azt is tudni kell, hogy melyik fájlrendszeren van a linux
forrás /usr/src/linux, annak a típusa és hogy rendszerint hova van
mountolva.
A következő példában a root a /dev/hda1, az /usr/src/linux a /dev/hda3
fájlrendszeren van, normálisan az /usr-re mountolva. Mindkettő ext2
fájlrendszer. A működő kernel a /usr/src/linux/arch/i386/boot-ban van
és a neve zImage.
Az alapötlet az, hogy ha van egy működőképes zImage, akkor lehet azt
használni az új floppyn. Egy másik módszerről, ami vagy jobban
műkődik, vagy nem (attól függően, hogy pontosan hogyan rontottad el a
rendszert) a példa után lesz szó.
Először bootolj egy boot/root lemezpárosról vagy mentőlemezről és
mountold föl azt a fájlrendszert, ami a működő kernelt tartalmazza.
mkdir /mnt
mount -t ext2 /dev/hda3 /mnt
Ha a mkdir azt mondja, hogy a könyvtár már létezik, ne törődj vele.
Menj be abba a könyvtárba, amelyben a működő kernel volt. Ne feledd,
hogy
/mnt + /usr/src/linux/arch/i386/boot - /usr = /mnt/src/linux/arch/i386/boot
Helyezz egy formattált lemezt az ``A:'' meghajtóba (ne a boot vagy
root lemezt!), másold a kernelt a lemezre és konfiguráld a root
fájlrendszernek megfelelően:
cd /mnt/src/linux/arch/i386/boot
dd if=zImage of=/dev/fd0
rdev /dev/fd0 /dev/hda1
Menj a root könyvtárba és csatold le a normálisan /usr fájlrendszert.
cd /
umount /mnt
Ezek után a megszokott módon lehet bootolni erről a floppyról. Ne
felejtsd el futtatni a LILO-t (vagy amit rosszul csináltál) az
újrabootolás után.
Ahogy az előbb említettem, van egy másik lehetőség. Ha van egy működő
kernel a gyökérkönyvtárban (például /vmlinuz), akkor azt is lehet
használni egy bootlemezen. Feltéve, hogy minden változatlan, /vmlinuz
a kernel, a következő változtatásokat kell eszközölni a fenti példán:
legyen /dev/hda3 helyett /dev/hda1 (a root fájlrendszer) az
/mnt/src/linux-t mountold az /mnt-re, és az if=zImage paramétert írd
át if=vmlinuz-re. A megjegyzést a /mnt/src/linux levezetéséről
figyelmen kívül lehet hagyni.
A LILO használata nagy merevlemezekkel (több, mint 1024 cilinder)
gondot okozhat. Lásd a LILO mini-HOWTO-t vagy a dokumentációt
segítségért.
7.6. Azt mondja `warning: bdflush not running'
Ez súlyos probléma lehet. Az 1.0 kernel verzió kibocsátása után (1994
április 20. táján) felfrissítették/lecserélték az `update' nevű
programot, amely rendszeresen kiüríti a fájlrendszer puffereit.
Szerezd meg a `bdflush' forrását (meg kell lennie ugyanott, ahol a
kernel forrásnak), és installáld fel. (Ezt még a régi kernelt futtatva
ajánlatos megtenni.) `update' néven installálja magát. Az újrabootolás
után a kernel nem fog többet panaszkodni.
7.7. Mond valamit ``undefined symbols''-okról és nem fordul le
Valószínüleg ELF fordítód van (gcc 2.6.3 és afölött) és 1.2.x (vagy
korábbi) kernel forrás. A szokásos megoldás az, hogy az alábbi sorokat
bemásolod a arch/i386/Makefile elejére:
AS=/usr/i486-linuxaout/bin/as
LD=/usr/i486-linuxaout/bin/ld -m i386linux
CC=gcc -b i486-linuxaout -D__KERNEL__ -I$(TOPDIR)/include
Ez lefordítja az 1.2.x kernelt az a.out könyvtárakkal.
7.8. Nem működik az IDE/ATAPI CD-ROM meghajtó
Különös módon sokan nem tudják használni az ATAPI meghajtókat, talán
mert több oka lehet a hibának.
Ha a CD-ROM meghajtó az egyetlen eszköz egy adott IDE csatolón, akkor
a jumpereknek ``master'' vagy ``single'' állásban kell lenniük.
Valószínűleg ez a leggyakoribb hiba.
A Creative Labs (és mások is) IDE csatolókat építenek a hangkártyákra.
Ebből következik az az érdekes probléma, hogy egyes gépeken csak egy
csatoló van, másokon kettő beépítve az alaplapra (általában IRQ15),
ezért a soundblaster csatolót a harmadik IDE portra teszik (IRQ11,
állítólag).
Ez problémákat okoz a linuxszal, mivel az 1.2.x kernelek nem
támogatják a harmadik csatolót (az 1.3.x valamelyik tagjától kezdve
már van,de az fejlesztői és nem detektálja automatikusan). Ezt
többféleképpen lehet kikerülni.
Ha már van második IDE port, könnyen lehet, hogy nem is használod,
vagy még nincs rajta két eszköz. Vedd le az ATAPI meghajtót a
hangkártyáról és rakd a második csatolóra. Ezután ki lehet kapcsolni a
hangkártya csatolóját és még egy IRQ-t is megspórolsz.
Ha nincs második IDE csatoló, akkor jumperold a hangkártya IDE
csatolóját (ne a hangkártya hang részét) az IRQ15-re (második IDE
csatoló). Ennek működnie kell.
Ha valamilyen okból nélkülözhetetlen az ún. ``harmadik'' csatoló, vagy
más problémák vannak, szerezz egy 1.3.x kernelt ( az 1.3.57-ben van,
például) és olvasd el a drivers/block/README.ide-t. Ott sokkal több
információ van.
7.9. Furcsa üzenetek ``obsolete routing requests''-ről
Szerezd be a route program, és minden más útvonalválasztást manipuláló
program egy új verzióját. Az /usr/include/linux/route.h (ami valójában
az /usr/src/linux-ban van) megváltozott.
7.10. A tűzfal (firewall) nem működik az 1.2.0 kernellel
Upgrade-elj legalább az 1.2.1 verzióra.
7.11. ``Not a compressed kernel Image file''
Nem tömörített kernel fájl. Ne a /usr/src/linux könyvtárban keletkező
vmlinux fájlt használd kernelnek. Az [..]/arch/i386/boot/zImage a jó.
7.12. Problémák a konzollal 1.3.x-ra való frissítés után
Az /etc/termcap fálban a konzol termcap bejegyzésben írd át a dumb
szót linux-ra. Lehet, hogy egy terminfo bejegyzést is kell csinálni.
7.13. Nem lehet semmit lefordítani kernel upgrade után
A linux kernel forrás tartalmaz számos include fájlt (a .h végű
fájlnevek) amelyekre a szabványos include fájlok hivatkoznak. A
hivatkozások általában így néznek ki (ahol xyzzy.h egy fájl az
/usr/include/linux-ban):
#include <linux/xyzzy.h>
Normális esetben van egy linux nevű link az /usr/include-ban, amely a
kernel forrás include/linux könyvtárára mutat (általában
/usr/src/linux/include/linux). Ha ez a link nincs a helyén, vagy rossz
helyre mutat, akkor a legtöbb programot egyáltalán nem lehet
lefordítani. Ha letörölted a kernel forrást, mert túl sok helyet
foglalt, akkor nyilvánvaló, hogy ez a gond. Lehet baj a hozzáférési
jogosultságokkal is. Ha a root umask-ja alapértelmezés szerint nem
engedi meg, hogy a többi felhasználó lássa a fájljait és a kernel
forrást a p (preserve file modes) opció nélkül csomagoltad ki, akkor a
felhasználók a C fordítót sem fogják tudni használni. Bár a chmod
paranccsal is meg lehet ezt oldani, könnyebb újra kicsomagolni az
include fájlokat. Ezt ugyanúgy kell csinálni, ahogy az elején
kicsomagoltuk az egész forrást, csak még egy paraméter kell használni:
blah# tar zxvpf linux.x.y.z.tar.gz linux/include
Megjegyzés: a ``make config'' létrehozza a /usr/src/linux linket, ha
nincs meg.
7.14. Korlátok megemelése
A következő példa parancsok hasznosak lehetnek azoknak, akik szeretnék
tudni hogyan lehet bizonyos, a kernel szabta korlátokat megemelni.
echo 4096 > /proc/sys/kernel/file-max
echo 12288 > /proc/sys/kernel/inode-max
echo 300 400 500 > /proc/sys/vm/freepages
8. A 2.0.x kernelekre történő frissítés
A kernel 2.0.x verziója elég sok változást hozott a kernel
installálásában. A forrásban található Documentation/Changes fájl
tartalmazza a 2.0.x verzióra való átálláshoz szükséges tudnivalókat.
Valószínűleg frissíteni kell több fontos programcsomagot, mint például
a gcc, libc, és a SysVInit, és lehet, hogy meg kell változtatni néhány
rendszerfájlt is. Ezekre készülj fel. De semmi pánik!
9. Modulok
A betölthető kernel modulok memóriát takaríthatnak meg és
megkönnyíthetik a konfigurálást. A modulok köre egyre bővül, magában
foglal többek között fájlrendszereket, ethernet-kártya meghajtókat,
szalagos egység és nyomtató meghajtókat.
9.1. A segédprogramok telepítése
A modulok használatához szükséges segédprogramokat ugyanonnan lehet
megszerezni, ahonnan a kernel forrást is, modules-x.y.z.tar.gz néven.
Válaszd a legnagyobb x.y.z verziószámot, ami még kisebb-egyenlő a
kerneled verziószámánál. Csomagold ki a `tar zxvf modules-
x.y.z.tar.gz' paranccsal, menj be a könyvtárba, amit létrehoz
(modules-x.y.z), nézd át a README fájlt és hajtsd végre az
installálási utasításokat (ami általában elég egyszerű, például make
install). Ezután kell hogy legyenek insmod, rmmod, ksyms, lsmod,
genksyms, modprobe és depmod nevű programok az /sbin könyvtárban. Ha
akarod, kipróbálhatod őket az insmod-ban található ``hw'' példa-
meghajtóval. Ebben az alkönyvtárban, az INSTALL fájlban olvashatóak a
részletek.
Az insmod beilleszt egy modult a futó kernelbe. A moduloknak általában
drv_hello.o, ezt a `insmod drv_hello.o' paranccsal lehet beilleszteni.
Az lsmod kilistázza az éppen használt modulokat. Az output így néz
ki:
blah# lsmod
Module: #pages: Used by:
drv_hello 1
`drv_hello' a modul neve, egy lap (``page'', 4k) memóriát használ és
egyetlen másik kernel modul sem támaszkodik rá pillanatnyilag. A
`rmmod drv_hello' távolítja el a modult. Figyeljük meg, hogy az rmmod
egy modul nevet vár, nem egy fájlnevet. Az előbbit az lsmodlistájából
lehet megtudni. A többi modul segédprogram is dokumentálva van a man
ual oldalakon.
9.2. Kernellel terjesztett modulok
A 2.0.30 verziótól kezdve majdnem minden elérhető modul formában is.
Használatuk a következő: ne konfiguráld bele a kernelbe, azaz ne mondj
rá y-t a `make config' alatt. Fordíts egy új kernelt és bootolj vele
újra. Menj be megint az /usr/src/linux-ba és add ki a `make modules'
parancsot. Ez lefordítja az összes olyan modult, amely nem szerepelt a
kernel konfigurációban és linkeket helyez el rájuk az
/usr/src/linux/modules könyvtárban. Lehet őket közvetlenül innen is
használni, vagy kiadhatod a `make modules_install' parancsot, ami
elhelyezi őket a /lib/modules/x.y.z könyvtárban, ahol x.y.z a kernel
verziója.
Ez különösen a fájlrendszerek esetén lehet kényelmes. Bizonyos
fájlrendszereket általában ritkán használnak. Például ha a kezembe
kerülne egy msdos floppy, akkor annyit tennék, hogy insmod
/usr/src/linux/modules/msdos.o, aztán rmmod msdos ha végeztem. Ez az
eljárás kb. 50k memóriát szabadít fel a szokásos működés közben. Egy
megjegyzést kell tenni a minix fájlrendszerrel kapcsolatban: a
``mentőlemeznek'' készített kernelbe mindig közvetlenül bele kell
fordítani.
10. Egyéb konfigurációs opciók
Ez a fejezet bizonyos, a konfigurációról szóló fejezetben nem említett
opciók leírását tartalmazza. Az eszközmeghajtók nagy része nincs itt
felsorolva.
10.1. Általános beállítások
Normal floppy disk support (``Normál floppy lemez támogatás''). -
Elolvashatod a drivers/block/README.fd fájlt is; ez különösen IBM
Thinkpad felhasználóknak lehet fontos.
XT harddisk support (``XT merevlemez támogatás'') - ha akarod
használni azt a 8 bites XT vezérlőt, ami csak a port fogja a sarokban.
PCI bios support (``PCI BIOS támogatás'') - kipróbálhatod, ha PCI
alaplapod van, de légy óvatos, néhány régi PCI alaplap lefagy ezzel az
opcióval. A PCI busz Linux alatti használatáról több információ
található a PCI HOWTO-ban.
Kernel support for ELF binaries (``ELF bináris támogatás'') - Az ELF
egy erőfeszítés a bináris programok architektúrák és operációs
rendszerek közötti hordozhatóságának megteremtésére. A Linux is ebbe
az irányba halad, ezért ez minden bizonnyal kell.
Set version information on all symbols for modules - a múltban a
kernel modulokat újra le kellett fordítani minden új kernelhez. Ha y-
t választasz, akkor lehetővé teszi egy másik verzió alatt lefordított
modulok használatát. Több információ a README.modules-ben van.
10.2. Hálózati opciók
A hálózati opciók a NET-3-HOWTO-ban (vagy a NET-valami-HOWTO-ban)
vannak leírva.
11. Tippek és trükkök
11.1. A make és patch parancsok kimenetének átirányítása
Ha szeretnéd nyomonkövetni, hogy mit művelnek a `make' vagy `patch'
parancsok, átirányíthatod a kimenetüket egy fájlba. Először derítsd
ki milyen shellt használsz: `grep root /etc/passwd' és keress valami
olyasmit, hogy `/bin/bash'.
Ha sh-t vagy bash-t használsz, akkor a
(command) 2>&1 | tee (output file)
parancs fog egy másolatot küldeni a (command) parancs kimenetéről az
`(output file)' fájlba.
csh vagy tcsh esetén használd a
(command) |& tee (output file)
parancsot.
A zsh-t használókat nem éri váratlanul, hogy a fentiek közül bármelyik
helyes ;-)
rc esetén (megjegyzés: nem hiszem, hogy rc-t használsz):
(command) >[2=1] | tee (output file)
11.2. Feltételes kernel installálás
A floppy-k használatán kívül még több módszer van arra, hogy anélkül
próbáljuk ki az új kernelt, hogy a régihez hozzányúlnánk. Sok más UNIX
változattól eltérően a LILO képes arra, hogy bárhonnan a merevlemezről
elindítson egy kernelt. (Ha nagy (500 MB vagy nagyobb) merevlemezed
van, olvasd el a LILO dokumentácíót, mert ez gondot okozhat). Ha az
alábbiakhoz hasonlót fűzöl a LILO konfigurációs fájl végére, akkor úgy
választhatsz egy frissen fordított kernelt, hogy nem nyúlsz a régi
/vmlinuz-hoz: (persze előbb futtatni kell a lilo-t.)
image = /usr/src/linux/arch/i386/boot/zImage
label = uj_kernel
A legkönnyebben úgy lehet a LILO-t az új kernel indítására utasítani,
hogy lenyomod a shift billentyűt bootoláskor (amikor csak annyi van a
képernyőn, hogy LILO). Megjelenik egy prompt, ekkor be lehet írni,
hogy `uj_kernel', hogy az új kernelt indítsa.
Ha több különböző kernel forrását szeretnéd megtartani a gépeden
egyszerre (ez nagyon sok helyet foglal, légy óvatos), akkor a
legegyszerűbb elnevezni az őket tartalmazó könyvtárakat
/usr/src/linux-x.y.z, formában, ahol x.y.z a kernel verziója. Ekkor
egy szimbólikus linkkel lehet választani közöttük. Például az `ln -sf
linux-1.2.2 /usr/src/linux' parancs az 1.2.2 verzió forrását teszi
aktuálissá. Mielőtt létrehozol egy ilyen szimbólikus linket,
bizonyosodj meg arról, hogy az ln utolsó argumentuma nem egy létező
könyvtár (régi szimbólikus link is lehet), mivel az eredmény nem az
lenne amire számítasz.
11.3. Kernel frissítések
Russell Nelson (nelson@crynwr.com) összefoglalja az új kernelverziók
változásait. Ezek rövidek, érdemes beléjük pillantani egy upgrade
előtt. Letölthető anonymous ftp-vel a
ftp.emlist.com/pub/kchanges
címről, vagy a következő URL-ről:
http://www.crynwr.com/kchanges
12. Egyéb idevágó HOWTO-k, amik hasznosak lehetnek
· Sound-HOWTO: hangkártyák és segédprogramok
· SCSI-HOWTO: minden az SCSI vezérlőkről és eszközökről
· NET-2-HOWTO: hálózat
· PPP-HOWTO: hálózatra kapcsolódás PPP-vel
· PCMCIA-HOWTO: noteszgépekhez való meghajtók
· ELF-HOWTO: ELF: mi ez egyáltalán, konvertálás
· Hardware-HOWTO: a támogatott hardverek áttekintése
· Module-HOWTO: további információ a kernel modulokról
· Kerneld mini-HOWTO: a kernel démonról
· BogoMips mini-HOWTO: ha kiváncsi vagy
13. Egyebek
13.1. A szerző
A Linux Kernel-HOWTO angol eredetijének szerzője és karbantartója
Brian Ward (bri@blah.math.tu-graz.ac.at). Kérem küldjetek véleményt,
kiegészítéseket, javításokat. (Főleg a javítások a legfontosabbak
nekem). (A fordító megjegyzése: természetesen angolul írjatok neki,
magyarul nem tud :-)
Vethetsz egy pillantást a honlapomra az alábbi címek valamelyikén:
http://www.math.psu.edu/ward/
http://blah.math.tu-graz.ac.at/~bri/
Bár igyekszem nagyon figyelmes lenni a levelezéssel, vedd figyelembe,
hogy nagyon sokat kapok minden nap, ezért eltarthat egy darabig, amíg
válaszolok. Különösen, ha kérdéssel keresel meg, légy szíves próbálj
meg minél világosabban és részletesebben fogalmazni. Ha arról írsz,
hogy egy hardver-elem nem működik (vagy valami hasonló), tudnom kell
mi a hardver-konfiguráció. Ha egy hibát jelentesz, ne csak annyit írj,
hogy ``megpróbáltam ezt vagy azt, de hibát jelzett''; tudnom kell, mi
volt a hiba. Azt is szeretném tudni, hogy a kernel, a gcc és a libc
melyik verzióját használod. Ha csak annyit mondasz, hogy ezt vagy azt
a disztribúciót használod, az nekem nem mond sokat. Az nem baj, ha
egyszerű kérdést teszel fel; ne feledd: ha nem kérdezel, nem is kapsz
választ! Mindenkinek szeretném megköszönni, akitől visszajelzést
kaptam.
Ha írsz nekem és nem kapsz választ elfogadható időn belül (három hét
vagy több), akkor lehet, hogy véletlenül letöröltem a leveledet, vagy
ilyesmi (bocs). Kérem próbáld meg újra.
Sok levelet kapok olyasmiről, ami valójában hardver probléma vagy
téma. Ez rendben van, de ne feledd, hogy nem ismerem a világ összes
hardverjét és nem tudom, mekkora segítséget tudok nyújtani. A gépeken,
amelyeket személyesen használok vannak IDE és SCSI diskek, SCSI CD-
ROM-ok, 3Com és WD ethernet kártyák, soros egerek, PCI-s alaplapok,
NCR 810 SCSI-vezérlők, AMD 386DX40 Cyrix társprocesszorral, AMD 5x86,
AMD 486DX4, és Intel 486DX4 processzorok. (Ez csak egy áttekintés
arról, hogy miket használok és ismerek, és határozottan nem egy
ajánlás, de ha olyat akarsz, kérdezz bátran :-) ).
A 0.1 verzió 1994 október 3.-án készült. Ez a dokumentum elérhető
SGML, PostScript, TeX, roff és sima szöveges formátumban.
13.2. Tennivalók
A ``Tippek és trükkök'' fejezet egy kissé rövid. Remélem ki tudom
bővíteni mások javaslatai alapján.
A ``További csomagok'' is.
Több hibakeresési és "katasztrófa" elhárító információ kell.
13.3. Hozzájárulások
Linus README-jének egy kis része (kernel hackelés) át lett véve.
(Kösz, Linus!)
uc@brian.lunetix.de (Ulrich Callmeier): patch -s és xargs.
quinlan@yggdrasil.com (Daniel Quinlan): sok javítás és kiegészítés
nat@nat@nataa.fr.eu.org (Nat Makarevitch): mrproper, tar -p, sok egyéb
dolog
boldt@math.ucsb.edu (Axel Boldt): összegyüjtötte a kernel konfiguráció
opcióinak leírását a hálózaton aztán átadta nekem a listát
lembark@wrkhors.psyber.com (Steve Lembark): többszörös boot ötlet
kbriggs@earwax.pd.uwa.edu.au (Keith Briggs): néhány javítás és
javaslat
rmcguire@freenet.columbus.oh.us (Ryan McGuire): kiegészítések a make
opcióihoz
dumas@excalibur.ibp.fr (Eric Dumas): francia fordítás
simazaki@ab11.yamanashi.ac.jp (Yasutada Shimazaki): japán fordítás
jjamor@lml.ls.fi.upm.es (Juan Jose Amor Iglesias): spanyol fordítás
mva@sbbs.se (Martin Wahlen): svéd fordítás
vamosi@freeside.elte.hu (Vámosi Zoltán): magyar fordítás
bart@mat.uni.torun.pl (Bartosz Maruszewski): lengyel fordítás
donahue@tiber.nist.gov (Michael J Donahue): sajtóhibák, a ``szeletelt
kenyér verseny`` győztese.
rms@gnu.ai.mit.edu (Richard Stallman): ``szabad'' dokumentáció
koncepciója és a terjesztési engedély
dak@Pool.Informatik.RWTH-Aachen.DE (David Kastrup): NFS
esr@snark.thyrsus.com (Eric Raymond): vegyes apróságok
Azok is nagy segítségemre voltak, akik kérdésekkel és problémákkal
kapcsolatban levelet küldtek.
13.4. Copyright, licensz és ilyesmi
Copyright © Brian Ward, 1994-1997.
Hungarian translation © Vámosi Zoltán, 1997.
Ez a dokumentum szabadon másolható és terjeszthető, ha a copyright és
az engedély szövegét minden másolaton megőrzik.
E dokumentum módosított változatai a változatlan másolatokkal
megegyező feltételek alapján másolhatók és terjeszthetők, ha a
módosított változatot is az ezzel az engedéllyel megegyező
feltételekkel terjesztik. A fordítások is a ``módosított változat''
kategóriájába tartoznak.
Garancia: Nincs.
Ajánlások: Az üzleti célú terjesztés megengedett és támogatott, de
gyomatékosan ajánlott, hogy a terjesztő lépjen kapcsolatba a szerzővel
a terjesztés előtt, a dolgok naprakészségének biztosítása végett.
(Küldhetsz egy példányt abból, amit csinálsz, ha már úgyis csinálod).
A fordítóknak is ajánlott kapcsolatba lépni a szerzővel mielőtt
lefordítják. A nyomtatott változat jobban néz ki. A papírt használd
fel újra.