Trey tanácsára összeszedtem egy doksiba amit írtam eddig a kernelforgatásról. Még valózsínűleg bővülni fog (patch-eslésel, nvidia driverrel, stb.), de már kész a használatra. Egyelőre csak sima szöveg formájában foglaltam össze, de amint sikerült egy épkézláb html szerkesztőt találnom linuxra azonnal megcsinálom html-ben is (ha valaki tud egyet szóljon!).Mivel nem lett annyira hoszú, ezért a folytatásban olvasható maga a doksi (valamint a honlapmra is felrakom (http://www.tar.hu/balihb/), de ha bővül azt ide is meghírezem). A cucchoz minden építő jellegű kritikát szívesen fogadok ! (helyesírásellenőrizve eddig nem lett, azt majd pótolom. Valamint mivel ez egy fórumon született (http://www.mportal.hu/?action=forum_olvas&base=
mportal8&thread=203&hit2=25&page=1), ezért egy Csan nevű ottani op 2 kommentje is benne van. ezeket szándékosan nem építettem bele a szövegbe, de nem akartam kitörölni.)
Használjátok egészséggel!
(főleg kezdőknek szántam)
Kernelforgatás
1. Mi a kernel?
2. Jó ez nagyon szép, de mi a ráknak újat forgatni belőle?
3. A kernel beszerzése
4. A kernel előkészítése
5. A kernel konfigurálása
5.1. A kernelmodulokról
5.2. Kernelbe vagy modulba?
5.3. A menuconfig kasználata
5.4. A kernelkonfigurálásnál pár fontos dolog
6. Forgassunk kernelt!
6.1 Forgatási módok
6.2 Hová kell rakni? (& lilo)
6.3 Modulok forgatása
7. reboot
Na nézzük a lényeget.
1. Mi a kernel?
Kernel még windows-ban is van. Ez az oprendszer magja. Ez biztosítj a programoknak az egységesített felületet, amin keresztül a hardware-vel tudnak komunikálni (ez a jó öreg dos-nál annyi volt, hogy közvetlen hozzáférést adott az összes hardware-hoz, aztán minden program oldja meg a saját meghajtóprogramjaival a dolgot, ahogy akarja:). A windows-ban egy C:WINDOWSSYSTEMKernel32.dll (nálam itt 98-ban). De most nézzük a Linuxot. Linuxban általában /vmlinuz a kernel.
2. Jó ez nagyon szép, de mi a ráknak újat forgatni belőle?
A windows azért olyan lassú, béna és fagyogatós, amilyen, mert a Májkrémszoft csinál egy általános kernelt, és minden gépen ugyan az a kernel fut, így lehet, hogy ami az egyik gépen bejön, az a másikon nem igazán, így béna lesz az egész cucc. Linuxnál nem kell ilyenektől szenvedni. Bekonfigurálod a kernelt pont a te gépedhez (és igényeidhez) igazítva, és pontosan azt csinálja, amit te szeretnél (najó szép álom lenne, de jobban követi az utasításaid, mint a windóz).
Álljunk neki? Áljunk neki!
3. A kernel beszerzése
"Be kell szerezni? Dehát a win ben benne van ott nem kellet beszerezni." Igen. Ez igaz, viszont a win-ben mindíg több hónapos, vagy éves kernelt használsz. Nem lehetsz benne biztos, hogy a már azóta kiderült és közismert hardware hibák javítva vannak benne. Linuxban mindíg friss, ropogós stabil kernelt érdemes használni (figyelem ez nem a legmagasabb verziószámot, vagy az utolsó kiadási dátumot jelenti. A kernelnek van egy fejlesztői, valamint a stabilnak és vannak a következő kijövő verzió elött pre, rc, meg hasonló verziói. mindíg a "The latest stable version of the Linux kernel" kell.) A kernelt a kernel.org-on lehet letölteni. Ott is a legelső sorban (nem az oldalon, hanem a kernelek között) ott van, amit mi keresünk:
The latest stable version of the Linux kernel is: 2.4.19 2002-08-03 00:40 UTC F V VI Changelog
Itt nem a 2.4.19 feliratra kell klikkelni a letöltéshez, mivel az egy patch (majd arról még lesz szó. csak semmi pánik). A sor vége felé ott van egy Nagy F betű. Arra rányomsz és letöltöd a kernelt (valamivel több, mint 20 mega).
4. A beszerzett kernel előkészítése.
Ha megvan a kernel, akkor lehetőleg lépj ki konzolba és ott root-ként belépve folytasd tovább (többször volt, hogy az x-win-es konzolok hibásan jelenítették meg a menuconfigot, az xconfig pedig elég átláthatatlan, meg jobb is inkább a menuconfigot megszokni).
Lépj be a /usr/src-ba:
cd /usr/src
Mozgassad ide a letöltött kernelt:
mv /ahova/a/kernelt/töltötted/linux-2.4.19.tar.gz ./
(ha már nem a 2.4.19 a legújabb kernel, amikor ezt olvasod, akkor a verziószámot értelem szerint cseréld ki arra)
Tömörítsd ki a kernelt:
tar -zvxf linux-2.4.19.tar.gz
Így kapsz egy linux-2.4.19 könyvtárat. Erre én szoktam csinálni egy linket, hogy mindíg elérhessem így is /usr/src/linux. Így:
ln -s /usr/src/linux-2.4.19 /usr/src/linux
Ez nem kötelező lépés csak praktikus.
Most lépj be a friss kernelt tartalmazó kőnyvtáradba!
cd /usr/src/linux
Most hogy a fölösleges cuccokat eltávolítsuk a kernelforrásból add ki ezt a parancsot:
make mrproper
És most jön a konfigurálás, de erről egy külön pont fog szólni.
5. A kernel konfigurálása
Bent vagy a /usr/src/linux könyvtárban. (konzolban, ha lehet). Most jön a konfigurálás elindítása:
make menuconfig
Most egy elég érdekes kék hátterű valami jelenik meg középen egy szürke menü és rajta a menüpontok. Na ezzel az érdekes valamivel fogunk mi konfigurálni. Nézzük sorban a pontokat!
Az első-t és a másodikat nem kell módosítani. A 3.-at viszont annál inkább. Nyomsz 2 lefele nyilat, aztán egy entert. Így bekerülsz egy menübe, ahol a géped processzorát, és pár alapvető dolgot kell megadni. Most nyomj egy entert, és a fel-le gombokkal keresd ki a processzorod tipusát (pontosan! én volt, hogy véletlenül p3-on felejtettem egy amd k6-2-n a procitipust és bebootolni sem tudtam, mert újraindult a rendszer minden indításnál:). Ha megtaláltad, vidd fölé a kék kijelőlést, és nyomj egy entert. OK. A processzortípus már megvan. Valószínűleg nem többprocesszoros gépre konfigurálod a kernelt, tehát a Symmetric multi-processing support -ra mennyél rá, és addig nyomd a space gombot, amíg a csillag el nem tűnik mellölle (ha eredetileg sincs mellette, akkor nem kell. Egyébként meg valószínű csak 1x kell megnyomni a space gombot). Akkor most jött el az a pont, amikor el kell mondanom, hogy hogy működik ez a konfigurációs játék, és miket kell tudni róla.
5.1. A kernelmodulokról
A kernelbe egy ezsköz meghajtóprogramját több féle képpen is bele lehet rakni. Lehet úgy, hogy mindíg be legyen töltve (a kernel rendszerindításkor bekerül a memóriába), vagy lehet modulként tárolni. A modulok nem kernülnek bele a /vmlinuz-ba, hanem külön fájlokban tárolódnak el (/lib/modules/a-kernel-verzioja/a-modulok) és csak akkor töltődnek be, ha egy program kéri rá őket, vagy te ektiválod őket a modconf parancsal (ekkor minden indításnál betöltésre fognak kerülni, de akár mikor el lehet őket távolítani a memóriából.
Csan megjegyz.: itt egy kiscit kiternek a tobbi lehetosegre is. 'insmod modulnev' - ezel tudod kezzel betolteni az adott modult, ahol a modulnev a file neve a .o kiterjesztes nelkul. Frissen forditott kernel es/vagy kernel modulok utan pedig ha 'depmod -a' -val frissitettuk a modulok fuggosegi adatbazisat, akkor a 'modprobe modulnev' betolti a megadott modult, illetve meg az osszes olyan modult, amitol az adot tmodul fugg. Azt is jo tudni, hogy ha jol van beallitva az /etc/modules.conf es/vagy az /etc/modutils/ alatt levo fileok, akkor ha engedelyezve van a kernelben a modul betolto deamon (kmod), abban az esetben konnyen elofordlhat, hogy a modulokat a kernel automatikusan betolti, ha olyan jellegu keres jelentkezik a rendszerben... ;)
5.2. Kernelbe vagy modulba?
Mikor melyiket kell használni?
Az esetek nagyrészében a kernelbe való fordítást érdemes használni, amennyiben biztos vagy benne, hogy egy eszközt majdnem mindíg használni akarsz (hálókártya meghajtóprogramja, ha állandóan hálón vagy, hangkártya meghajtóprogramja, ha állandóan zenét hallgatsz). Viszont, ha van olyan dolog, amit csak lehet, hogy fogsz használni, de nem akarsz olyankor azzal bajlódni, hogy újra forgass egy kernelt, akkor azt modulba rakod (ha mondjuk csak linux van a gépeden, de lehet, hogy fog néha valamelyik haver hozni cuccot kivehető vinyón és béla még windows van, akkor modulban felrakod a fat32, dos és ntfs fájlrendszereket, és csak akkor töltöd be őket, ha helyzet van (a mount magától is megteszi a modul betöltését)).
Csan - Itt etelemszeruen - a fent hozzafuzott infoimbol kovetkezoen - nem a mount fogja betolteni a modult, hanem a mount general egy olyan rendszerhivast, amit a kernel daemonja elkap es jol beallitott fent emlitett fileok eseten betolti a hianyzo modult ;).
5.3. A menuconfig kasználata
És akkor most hogyan is megy ez a konfigurálás dolog?
Az eszközmeghajtóprogramok között a föl le nyilakkal tudsz lépkedni, és a space vagy az enter gomb lenyomásával tudod kiválasztani, hogy ne legyen lefordítva a meghajtóprogram, modul legyen, vagy a kernelbe forduljon. A jobbra-balra gombokkal pedig azt tudod kiválasztani, hogy mi történjen a space/enter gombok lenyomására. A select a meghajtóprogik állípotának az állítgatása. Az exit vagy visszalép a menüben egy szintet, vagy ha a menü gyökerében vagy, akkor kilép belölle, a help pedíg segítséget ad arról a meghajtóprogramról, amin a kurzorod áll. Innen már sima ügy, de azért a sarkalatosabb pontokat vegyük sorra!
5.4. A kernelkonfigurálásnál pár fontos dolog (eddigi tapasztalataim alapján)
Ha cd-t akarsz írni linux alatt és ide cdíród van, akkor a következőket bele kell forgatni a kernelben (modulban nem megy (legalábbis nálam nem ment)):
ATA/IDE/MFM/RLL support ---> IDE, ATA and ATAPI Block devices ---> SCSI emulation support
SCSI support ---> SCSI support ; SCSI CD-ROM support ; Enable vendor-specific extensions (for SCSI CDROM) ; SCSI generic support
Ha nincs más scsi eszközöd, akkor minden mást ki lehet szedni az scsi-ből. (ettől még nem fog menni az scsi emuláció, mert bele kell írni egy sort a lilo.conf-ba, de ezt a végén még részletezem)
Játékport:
Lehet, hogy tényleg nem fogod sokat használni, de ha néha akarod használni, akkor is bele kell forgatni a kernelbe a portot (a dzsojsztikot nem fontos :) , mert anélkül nekem nem ismerte fel a gémpadom.
Multimedia devices ---> Video For Linux
Na ezt érti félre mindenki. Ez nem ahoz kell, hogy tudjál videót nézni linux-on. Ez a tv kártyákhoz kell, tehát, ha nincs, akkor ne kapcsold be.
File systems ---> MSDOS fs support
Ez az, ami akkor sem kell, ha van windows a gépen. Ez csak akkor kell, ha van dos, és nem akarsz alatta a ~1, meg hasonló fájlnevekkel küszködni (dos-nak tudok ajánlani egy nagyon jó alternatívát: FreeDOS . Még ma is fejlesztik)
File systems ---> Network File Systems ---> SMB file system support (to mount Windows shares etc.)
Ez kell ahoz, hogy windows megosztásokat tudjál használni linux alatt (a hálózatban).
Sound --->
Ha nem találod a hangkártyád, akkor kapcsold be ezt: OSS sound modules
Input core support --->
Az ebben a menüpontban szereplő cuccok csak USB-s eszközökre vonatkoznak.
Talán ennyi jótanács elég. És szorgosan olvasni a helpeket a kernelmenün belül!
6. Forgassunk kernelt!
Ha mindent beállítgattál konfigolás közben, a menü gyökerében nyomsz egy -et, és azt mondod neki, hogy (tehát mentse a "beállításokat). Ha úgy érzed, hogy valamit elszúrtál, akkor csak elindítod újra a make menuconfig-gal ezt a menüt és kilépésnél megint mentesz.
Mindenekelött ki kell adni egy make dep parancsot, aztán jöhet a tényleges forgatás.
6.1. Forgatási módok
Több alternatíva is létezik a kernel lefordítására. Ezek közül a 2 legfontosabb: make bzImage vagy make bzlilo. A 2 között az a külömbség, hogy míg a make bzImage csak lefordítja a kernelt, addíg a make bzlilo be is másolja a megfelelő helyre, ugyanakkor a nevéből is adódóan mielött ezzet a parancsot kiadnánk át kell nézni a lilo.conf-ot (tehát ezt nehogy így vaktában lefuttasd! mindenkép olvasd el a többi részét elötte a ennek az írásnak!!!). Ha bzImage-vel forgatsz, akkor a /ahol/a/kernel/forrása/van/arch/i386/boot/bzImage -be kerül a kernel.
6.2. Hová kell rakni?
Én elsőnek fogom a disztróban eredetileg bennelévő kernelt (általában /vmlinuz) és átrakom /vmlinuz.orig-ba (mv /vmlinuz /vmlinuz.orig). Ezek után jön a lilo szerkesztése:
/etc/lilo.conf-ban találod a lilo beállításait. Ezt szerkeszd a kedvenc szövegszerkesztőddel (nekem emacs).A vége felé találsz egy ilyet:
image=/vmlinuz
label=Linux
read-only
Ez után írd be ezeket:
image=/vmlinuz.old
label=LinuxOLD
read-only
optional
image=/vmlinuz.orig
label=LinuxORIG
read-only
optional
Ha ezek benne vannak, akkor már futtathatod is a bzlilo-t. Ha bzImga-et akarsz inkább használni, akkor ezután a /ahol/a/kernel/forrása/van/arch/i386/boot/bzImage-t másold be a /vmlinuz fájlba, és add ki a lilo parancsot.
6.3. Modulok forgatása
Ok a kernel a helyén bootolásra készan. Vagy mégsem?
A modulokat még nem fordítottuk le. Erre a következő parancs szolgál: make modules. Ezek után a modulokat installálni kell a /lib/modules-be. Szerencsére ezt nem kézzel, ahenem a make modules_install parancsal kell megtenni.
7. reboot
Ezekután reboot, és ha valami nem működne az új kernelben, akkor válaszd ki a LinuxORIG-ot bootolásnál.