Az összes hozzászólást, valamint kritikát figyelembe véve némileg újraszerkesztettem a Kernelforgatás doksimat. Ezt már rc-nek is neveztem volna, de még mindig hiányzik a grub része.Kernelforgatás (2.0-pre4)
1. Mi a kernel?
A kernel az operációs rendszerek magja. Még Windows-ban is van. Ez biztosítja a programoknak az egységesített felületet, amin keresztül a hardware-el tudnak kommunikálni (ez a jó öreg DOS-nál annyi volt, hogy közvetlen hozzáférést adott az összes hardware-hez, aztán minden program oldja meg a saját meghajtóprogramjaival a dolgot, ahogy akarja:). Win9x-ben a kernel a C:WINDOWSSYSTEMKernel32.dll fájl, WinNT/2000/XP alatt pedig a C:WINDOWSSYSTEM32Kernel32.dll fájl szokott lenni. De most nézzük a Linuxot. Linuxban általában /vmlinuz fájl a kernel.
2. Jó ez nagyon szép, de mi a ráknak újat forgatni belőle?
A Windows azért olyan, amilyen, mert a Microsoft 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. 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 (Na jó. Szép álom lenne, de jobban követi az utasításaid, mint a Windows).
3. A kernel beszerzése
"Be kell szerezni? De hát a win ben benne van ott nem kellet beszerezni." Igen. Ez igaz, viszont a win-ben mindig több hónapos, vagy éves kernelt használsz. Biztos lehetsz benne, hogy az azóta kiderült és közismert hibák nincsenek javítva benne. Linuxban mindig 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 kernelt a kernel.org-on lehet letölteni. Ott megkeresed a The latest stable version of the Linux kernel is kezdetű sort. Kb így fog kinézni:
The latest stable version of the Linux kernel is: 2.4.20 2002-11-28 23:54 UTC F V VI Changelog
Itt nem a 2.4.20 feliratra kell klikkelni a letöltéshez, mivel az egy patch (patchekről olvasd el a függelékeket). A sor vége felé ott van egy Nagy F betű. Arra kell kattintani (kb. 25 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 (ennek az első fontos oka, hogy így csak a rendszergazda jogokkal rendelkező felhasználók férhetnek majd hozzá a kernelhez és a forráskódjához, valamint többször volt, hogy az x-win-es konzolok hibásan jelenítették meg a menuconfigot (a menüs rendszerű kernelkonfiguráló felület), az xconfig pedig elég átláthatatlan (ez a grafikus változata a konfiguráló felületnek), meg jobb is inkább a menuconfigot megszokni, mert az grafikus felület nélkül is használható).
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-[kernelverzió].tar.gz ./
Tömörítsd ki a kernelt:
tar -zvxf linux-[kernelverzió].tar.gz
Így kapsz egy linux-[kernelverzió] könyvtárat. Erre én szoktam csinálni egy linket, hogy mindig elérhessem így is /usr/src/linux (ez nem kötelező lépés csak praktikus). Így:
ln -s /usr/src/linux-[kernelverzió] /usr/src/linux
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
5. A kernel konfigurálása
5.1. A kernelmodulokról
A kernelbe egy eszköz meghajtóprogramját több féle képen is bele lehet rakni. Lehet úgy, hogy mindig be legyen töltve (a kernel rendszerindításkor bekerül a memóriába), vagy lehet modulként tárolni. A modulok nem kerülnek bele a /vmlinuz-ba, hanem külön fájlokban tárolódnak el (/lib/modules/a-kernel-verziója/a-modulok) és csak akkor töltődnek be, ha egy program kéri rá őket, vagy te aktiválod őket az
insmod [modulneve]
paranccsal, vagy ha azt szeretnéd, hogy minden indításnál betöltődjenek, akkor be kell írni a modulnevét a /etc/modules-be.
A modulok eltávolítása, ha insmod-al töltötted be, akkor az
rmmod [modulneve]
parancsal történik, akkor is, ha a /etc/modules-ben szerepel. Valamint, ha azt sem akarod, hogy indításkor betöltődjön, akkor csak egyszerűen ki kell törölni a /etc/modules-ből a modul nevét.
5.2. Fixre vagy modulba?
Mikor melyiket kell használni?
Az esetek nagy részében a fixre való fordítást érdemes használni, amennyiben biztos vagy benne, hogy egy eszközt majdnem mindig 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 ná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 (mountoláskor maguktól is betöltődnek, ha szükség van rájuk)).
5.3. A menuconfig kasználata
És akkor most hogyan is megy ez a konfigurálás dolog?
Az eszköz-meghajtóprogramok között a föl le nyilakkal tudsz lépkedni, és a space 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 lenyomására. A select a meghajtóprogramok állapotá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őle, a help pedig segítséget ad arról a meghajtóprogramról, amin a kurzorod áll. Innen már sima ügy.
5.4. A menuconfig indítása
Ahhoz, hogy a menuconfigot elindítsad telepítve kell, hogy legyen egy ncurses nevű csomag a gépeden. Ennek a telepítése disztribúciókra lebontva a függelékek között olvasható Ncurses néven.
A menuconfig indításához a /usr/src/linux-ban a következő parancsot kell kiadni:
make menuconfig
Így egy első látásra talán barátságtalannak tűnő, de nagyon kezes menürendszerhez jutunk, amiben a meghajtóprogramok fő és alkategóriákra vannak osztva, hogy könnyebben megtalálhassuk őket.
5.5. xconfig
Van egy X11-et használó kernelkonfiguráló eszköz. Ezt a
make xconfig
paranccsal lehet elindítani, de mivel elég átláthatatlan, ezért használata ellenjavallt :)
5.6. 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őkre lesz szükséged:
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 a következő sort a lilo.conf-ba: append=[hdb]=ide-scsi (a hdc-t a cdíród eszközének a nevével kell helyettesítened, amit a dmesg-ből tudhatsz meg)
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 ahhoz 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 ---> DOS FAT fs support ---> MSDOS fs support
vagy
File systems ---> DOS FAT fs support ---> VFAT (Windows-95) fs support
MSDOS fs support csak akkor kell, ha DOS-os particiót akarsz kezelni. Windows-al létrehozott FAT-os particióhoz (NT alapú Windows-ok NTFS-t használnak alapértelmezésnek) kivétel nélkül VFAT-ot kell használni. (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 ahhoz, hogy Windows megosztásokat tudjál használni Linux alatt (a hálózatban).
File systems ---> ISO 9660 CDROM file system support ---> Microsoft Joliet CDROM extensions
Ha CD-t akarsz használni linux alatt ezt mindenképp érdemes engedélyezni, mert a legtöbb cd író program alapértelmezésben használ Joliet kiterjesztést.
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.
Most a következő parancsot kell kiadni:
make dep
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önbség, hogy míg a make bzImage csak lefordítja a kernelt, addig a make bzlilo be is másolja a megfelelő helyre, ugyanakkor a nevéből is adódóan ez csak akkor használható, ha a disztribúciónk lilo bootmanagert használ (mielőtt ezt a parancsot kiadnánk át kell nézni a lilo.conf-ot, tehát nehogy így vaktában lefuttasd! mindenkép olvasd el a lilo-ról szóló részét a doksink előtte!!!). 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 benne lévő kernelt (általában /vmlinuz) és átrakom /vmlinuz.orig-ba (mv /vmlinuz /vmlinuz.orig). Ha bzImga-et használtál, akkor ezután a [/ahol/a/kernel/forrása/van/]arch/i386/boot/bzImage-t másold be a /vmlinuz fájlba. Ezek után még a bootloaderrel is tudatosítani kell, hogy új kernelt kapott a rendszer. Ez a következő 2 pontban lesz részletezve.
6.3 lilo
Lilo esetén a make bzlilo futtatása a logikus, viszont előtte be kell írni a lilo konfigurációs fájljába pár dolgot. A /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
Mostmár futtathatod a make bzlilo-t és a kernel magától helyre kerül, valamint a lilo is tudomást vesz róla.
6.4. grub
6.5. Modulok forgatása
Ok a kernel a helyén bootolásra készen. 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, hanem a make modules_install paranccsal kell megtenni.
6.6. System.map
Ezek után a kernel forrásának a gyökérkönyvtárában találasz egy System.map nevű fájlt. Ezt be kell másolni a /boot-ba System.map-[kernelverzió] néven.
7. reboot
Ezek után reboot, és ha valami nem működne az új kernelben, akkor válaszd ki a LinuxORIG-ot bootolásnál.
8. Ha valami nem kűködik
Ez a Linux esetében is előfordulhat. Ha az új kernellel nem megy valami, akkor nézd a
dmesg
parancs kiadásával megnézheted, hogy miket töltött be a kernel, és hogy miket nem sikerült betöltenie, illetve milyen hibák történtek betöltés közben. Az egyszerűbb olvashatóság érdekében lehet a dmesg-et a következő módon is használni:
dmesg | less
dmesg | more
dmesg > [dmesgfájl]
Az első kettő a képrenyőn 2 féle képpen görgethető szöveget ad, a 3. pedig egy szövegfájlt készít, amit azután egy tetszőleges szövegszerkesztővel végig lehet böngészni.
Függelékek
A. A kernelverziókról
1. Fővonal
A linux kernelnél a verziószám sokat mond el az avatott szemnek a kernelről. Nézzük az aktuális kernel verziószámát:
2.4.20
Az első pont előtti szám a főverzió. Ez csak nagyon lényeges változásoknál változik (ez látszik abból is, hogy eddig csak 2-nél tart).
A 2. pont előtti szám akkor változik, ha új funkciók kerülnek be a kernelbe. Ha ez páros, akkor stabil, ha páratlan, akkor fejlesztői kernelről van szó.
A 3. pint előtti szám nagyobb hibajavításoknál és hasonló nem funkcionális frissítéseknél változik.
Ennek a változása előtt általában a kernel verziószáma egy kötőjel után kap alverziószámot, ami lehet -preX, vagy -rcX. A -preX olyan verzió, ami biztosan változni fog még, az -rcX, ha nem találnak benne hibát, akkor egyszerűen eltűnik és a kernel verziójának utolsó száma lép egyet.
2. A nemFővonalak
A kernel úgynevezett fővonalát Linus Torvalds tartja karban, ugyanakkor léteznek olyan vonalai a kernelnek, amiket más emberek tartanak karban. Ezek általában alapnak a fővonalat veszik (illetve annak utolsó stabil változatát). A legaktívabb ilyen fejlesztő Alan Cox (röviden ac). Az ő változtatásai a fővonalon általában bele is kerülnek a fővonalba. Az ac vonalba ugyanakkor nem csak ac fejlesztései kerülnek bele, hanem vannak, akik neki küldik el a változtatásaikat és ő illeszti be. Ac kernelverziói a kernel.org-on is megtalálhatóak. Az ő esetében a kernel a kötőjel után egy -acX kiegészítést kap.
Ac kernelén kívül még rengeteg létezik. Az hogy ezeket érdemes -e használni azt a honlapjukon található információk alapján könnyen el lehet dönteni.
Pár jelentősebb:
http://www.nsa.gov/selinux/
http://sourceforge.net/projects/wolk/
http://cipherfunk.org/files.html
http://members.optusnet.com.au/ckolivas/kernel/
Még többet találhatsz itt:
http://freshmeat.net/browse/143/?
filter=&orderby=popularity_percent_DESC&topic_id=143
B. Patchelés
1. Mik a patch-ek?
A patch-ek arra szolgálnak, hogy, ha új verzió jön ki a kernelből, ne kelljen letölteni az egész forrást, mivel általában nem a teljes forráskód változik, csak bizonyos részei. A patch tehát ezeket a változásokat tartalmazza. A patchekkel mindig csak a verziószámukhoz képest előző kernelverzióról lehet frissíteni.
2. A kernel patchelése
A patcheket 3 formában lehet megtalálni: tömörítetlenül, bz2-be vagy gz-be tömörítve (bz2-ben a legkisebbek a patchek). A 3 között csak a használatukhoz kiadandó parancs a különbség.
Elsőnek mind a 3 esetben be kell lépni a kernel könyvtárába.
A tömörítetleneknél a parancs:
cat [/ahol/a/patch/van/][patchfájlneve] | patch -p1
bz2-be tömörítetteknél (onnan lehet felismerni, hogy a fájl neve .bz2-re végződik):
bunzip2 -cd [/ahol/a/patch/van/][patchfájlneve] | patch -p1
gz-be tömörítetteknél (onnan lehet felismerni, hogy a fájl neve .gz-re végződik):
gunzip -cd [/ahol/a/patch/van/][patchfájlneve] | patch -p1
3. Patchelés visszavonása
Ha a patchelést vissza kéne vonnod, azt is meg teheted gond nélkül. Belépsz a kernel könyvtárába és a következő parancsot adod ki:
cat [/ahol/a/patch/van/][patchfájlneve] | patch -p1 -R
vagy
bunzip2 -cd [/ahol/a/patch/van/][patchfájlneve] | patch -p1 -R
vagy
gunzip -cd [/ahol/a/patch/van/][patchfájlneve] | patch -p1 -R
C. Ncurses
1. Az Ncurses-ról
Az Ncurses konzolos menük kirajzolására használt lib. Talán ennyi elég is róla.
2. Az Ncurses telepítése a nagyobb disztribúciókban
Debian:
apt-get install libncurses5-dev
SuSE:
YaST-al próbáld meg!
Red Hat:
7.x:
rpm --install ncurses-devel-[X]-[X].i386.rpm
(ha nem tudod honnan szerezd be a csomagot: http://rpmfind.net)
8.x:
apt-get install ncurses
Gentoo:
emerge -s ncurses
D. Kernel a Debian-ban (kernel-package)
1. A kernel-package csomag
A kernel-package csomag egy olyan extra lehetőséggel terjeszti ki a Debian-t, amivel talán egy másik disztribúció sem rendelkezik (kivéve esetleg a debian alapúakat:). Aki Debian-t használ az tudja, hogy az dpkg (apt-get) mennyire megkönnyíti az ember életét. Ezt a könnyedséget terjeszti ki a kernel-package csomag a kernel használatára is. Ezzel a csomaggal ugyan olyan .deb csomagokat csinálhatunk a kernelből, mint amilyen az összes többi csomag, így egy kernel telepítése, vagy eltávolítása másodpercek alatt és jelentősen kevesebb macerával mehet végbe.
2. make-kpkg
A kernel-package használata pofon egyszerű. Vagy le kell tölteni apt-get-el a fordítani kívánt kernel forráskódját
apt-get install kernel-source-[kernelverzio]
és aztán kitömöríteni és a konfigurálásban a már előzőekben leírtak szerint eljárni, vagy elő kell készíteni a kernel forrását, pontosan úgy ahogy a doksi elejében van leírva (kitömörítés, majd konfigurálás), de sem make dep-et, sem az után következő parancsokat nem kell lefuttatni. Egyszerűen csak be kell lépni a kernel forrásának a könyvtárába (/usr/src/linux), és ki kell adni ezt a parancsot:
make-kpkg kernel_image
Ez elkészít a kernel könyvtárához képest egy könyvtárral feljebb (../) egy debcsomagot, és innentől már csak ki kell adni a
dpkg -i [./ahol/a/csomag/van/]kernel-image-[kernelverzió]_10.00.Custom_i386.deb
parancsot, aztán rebootolni és már élvezhetjük is az új kernelünket.(ez az esetek többségében csak akkor működik, ha kézzel nem raktunk föl kernelt előtte)
3. Modulok a debian-ban
A Debian a kényelmünk érdekében a modulok kezelésére is tartalmaz egy hatalmas könnyítést. Nem kell az insmod-al, rmmod-al és a /etc/modules-el szórakozni, hanem csak ki kell adni a
modconf
parancsot és egy egyszerű menös rendszerrel lehet 1-1 enterrel és pár föl-le nyillal, valamint héha egy tabbal betöltögetni és eltávolítani a modulokat a memóriába/memóriából.
E. Erről a doksiról
1. Miért?
Ez a doksi eredetileg egy játékokkal foglalkozó weboldal fórumában íródott (http://www.mportal.hu/?action=forum_olvas
&base=mportal8&thread=203&hit2=25&page=1), azért, hogy azok is tudjanak kerneltforgatni, akiket a linuxos világ nagy része lamáknak nevez, pedig csak egyszerűen nem úgy születtek, hogy értenének a linuxhoz.
2. Jelmagyarázat
Azokat a részeket a kiadandó parancsokban, meg hasnlókba, amiket nem feltétéenül úgy kell pontosan kiadni, ahogy le van írva [ ] közé raktam.
3. Készítő(k)
A doksit BaliHB készítette (azaz én), de szeretnék köszönetet mondani az tanácsaikért és hathatós segítségeikért a következőknek:
A jelenlegi főnököm és munkatársaim
szogi
rengeteg fórum és cikkolvasó
2 Fejlesztés
A doksi folyamatos fejlesztés alatt áll. Vannak stabil, dev, pre és rc verziói is. A verziókról bővebben a kernelverziókról szóló függelékben olvashatsz :)
3. Készült
Készült: emacs, linux kernel, OpenOffice.org (office.fsf.hu-s magyarítás, valamint az ebből általm készített .deb csomag (http://savannah.nongnu.org/projects/ooodeb-hu/)), Debian, gnome-terminal, wmaker
felhasználásával.
Minőségét megörzi: amíg én vagy valaki fejleszti.
2002-02-15 00:03