Linux kernel konfigurálása

A HupWiki-ből...

Tartalomjegyzék

Előszó

A dokumentum célja lépésről-lépésre elmagyarázni a linux kernel konfigurálását, lefordítását és használatba vételét. Elsősorban a kezdőknek készült, ezért csak az alapokon fog részletese végigvezetni.
(A dokumentum eredeti változatát fellow követte el.)

Ráhangolódás

Kérdés: Miért érdemes kernelt fordítani?
Válasz: Csodát ne várj tőle (kétszeresre gyorsult gép, feltörhetetlen rendszer, ...). Ha gyakorlott leszel a kernel-fordításban, akkor jobban fogod érteni a rendszer működését és jobban hozzá tudod igazítani az igényeidhez. Tehát leginkább új ismereteket nyersz vele.

K: Hol kapok részletesebb információt valamilyen témában?
V: Kereshetsz itt a HupWikin, a Wikipedián vagy a Google segítségével.

K: A fordításhoz vanilla forrást használjak vagy a disztrómhoz elérhetőt? Egyáltalán mi az a "vanilla"?
V: A vanilla a linux kernel eredeti változata, bővebben a Vanilla szócikkben. Magánhasználatra fordított kernel esetén talán ez ajánlható, mivel a disztribúciókhoz mellékelt kernelekbe számos külső patchet illesztenek be, a jobb hardware-kompatibilitás és egyéb okok miatt, de ezekre nagyrészt nem lesz szükség.

K: Fixen vagy modulba tegyem a dolgokat? Egyébként mi az a kernel modul?
V: Alapozásnak olvasd el a kernelmodul szócikket. Az, hogy az adott driver moduláris vagy fix legyen, végülis ez izlés kérdése, mivel egy 64 mega ramnál több memóriával rendelkező gép esetén elhanyagolható a moduláris kernel használatával nyerhető plusz memória. Saját kernel fordításakor a modulok legnagyobb haszna, hogy könnyen végig lehet próbálni több drivert, hogy megtudd, melyik kell valójában a rendszeredhez.
(Amikor arról írok, hogy "forgasd be a kernelbe", akkor arra utalok, hogy ne modulba rakd.)

K: Áttérnék a 2.6-os ágra.
V: Érdemes ezt átolvasni: http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt

K: Érdemes a kernel forrást patchelni?
V: Patchben általában az utoljára kiadott stabil vanilla kernelhez képest elvégzett fejlesztéseket terjesztenek. Ezek egy része előbb-utóbb bekerül a vanillába, más része soha. Patchet használva új funkciókat, jobb stabilitást / teljesítményt kaphatsz, de ezekhez nem kapsz hivatalos támogatást a vanilla fejlesztőitől, csak a patch készítőitől. (Elterjedt patchek)

Fontos!
Mindig legyen kéznél egy grub boot lemez ('grub-install /dev/fd0') és a disztribúciód telepítő cdje (vagy bármilyen karbantartásra alkalmas cd). Egy bootképtelen rendszer jelentős idegeskedéshez vezet, ha nem vagy erre az eshetőségre felkészülve. Nagyon jó karbantartó live cd a Recovery Is Possible.

Kezdő lépések

K: Honnan lehet letölteni a kernel forrását?
V: The Linux Kernel Archives vagy egy mirror szerverről
Megj.: a foo.sign állományok digitális aláírást tartalmaz a foo állomány eredetiségének ellenőrzéséhez, lásd PGP.

K: Hova és hogyan kell kitömöríteni a kernelt?
V: A források szabványos helye az /usr/src és a kitömörítés menete: tar xvfj kernel-verzio.tar.bz2 -C /usr/src/. Kitömörítés után az /usr/src-n belül az aktuális kernelre mutasson egy symlink linux néven (nem kötelező, de problémát jelent a hiánya). (Ha ezek a dolgokat eddig nem tudtad, akkor _most ne olvass tovább_, inkább ismerkedj meg az alapokkal: Pingvin Füzetek)

K: Hogyan tudom ellenőrizni a kernel eredetiségét (PGP aláírás)?
V: Lépések:

  1. töltsd le a kernel forrásának (pld.: linux-2.4.25.tar.bz2) megfelelő signaturet (pld.: http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.25.tar.bz2.sign)
  2. szedd le a kernel nyilvános kulcsát: gpg --keyserver wwwkeys.pgp.net --recv-keys 0x517D0F0E
  3. ellenőrizd: gpg --verify linux-2.4.25.tar.bz2.sign

(A "gpg: Jó aláírás (...)" jelzi, hogy minden rendben; a "gpg: FIGYELEM: Ez a kulcs nincs hitelesítve megbízható aláírással!" figyelmen kívül hagyható.)

K: Ellenőrzés MD5 értékek segítségével.
V: Példa: wolk esetén a főlapról kiindulva (http://sourceforge.net/projects/wolk/) a letölthető állományokat szűrd le a használni kívánt változat verziójára és a listában szerepelni fog pld. egy 2.4-WOLK-md5sums állomány, ami az md5 hasheket tartalmazza. Ezt rakd be ugyanabba a könyvtárba, ahol az ellenőrizni kívánt wolk patch (pld.: linux-2.4.20-wolk4.12s-fullkernel.tar.bz2) van, majd ellenőrizd le: md5sum -c -v 2.4-WOLK-md5sums; ha az ellenőrizni kívánt állományra OKt ad vissza, akkor minden rendben.

K: Hogyan tudom felrakni a patcheket?
V: Linux_kernel_patchelés

K: A fordítás lépései?
V: 2.4 esetén:

  1. make clean - letöröl minden generált állományt: .o, .tmp, stb. (a mrproper a .config-ot is törli)
  2. make menuconfig - karakteres beállító-felület indítása; grafikushoz: 'make xconfig' (Tcl/Tk)
  3. make dep - a függőségi viszonyok ellenőrzése
  4. make bzImage - a kernel image elkészítése (az arch/architektúra/boot-ba kerül)
  5. make modules - a modulok fordítása
  6. make modules_install - a modulok telepítése (a /lib/modules/kernel_verzio/kernel-be kerülnek)

2.6 esetén:

  1. make clean
  2. make menuconfig - az xconfig itt Qt felületet használ, a gconfig pedig GTKt
  3. make bzImage
  4. make modules
  5. make modules_install

K: Van tényleges különbség a beállító-felületek közt?
V: Elméletileg nem lehet, de gyakorlatilag néhány elvadult patch nem működik együtt az xconfiggal, csak a menuconfiggal. Érdemes megszokni az utóbbit.

K: Milyen csomagok kellenek a fordításhoz és üzemben tartáshoz?
V: gcc, make, binutils, module-init-tools (2.4-hez elég a modutils), procps, libc6-dev / glibc-dev; patch, bzip2, libncurses5-dev (menuconfig), tk8.4 (2.4 xconfig), libgtk2.0-dev & libglade2-dev & libglib2.0-dev (2.6 gconfig), libqt3-dev (2.6 xconfig); e2fsprogs, reiserfsprogs, sysfsprogs, stb.
Részletesebben tárgyalja a kernelhez adott Documentation/Changes állomány "Current Minimal Requirements" része.
A scripts/ver_linux kilistázza a fontos programok telepített verzióit.

K: Melyik gcc ajánlott?
V: Hivatalosan csak a 2.95.3 támogatott, az ezt megelőző vagy követő verziók nem. A 3-as széria a 3.3-tól kezdve általában teljesen stabil kódot generál; már ha a disztribúciódban nem kerül bele egy hibás változat (pld. fordítás közben "cc: Internal error" / "Internal compiler error" vagy gyakori, hogy boot elején lemerevedik pld. az scsi résznél). A patchek egy része 3-as gcct igényel.

K: Hogyan tudom az alapértelmezettnél ('file /usr/bin/gcc') eltérő ('ls /usr/bin/gcc*') gccvel lefordítani a kernelt?
V: A legegyszerűbb módszer a fő 'Makefile' átírása:

HOSTCC = gcc
CC = $(CROSS_COMPILE)gcc

sorokban a "gcc"t írd át értelem szerint (pld. 2.95 esetén: "gcc-2.95"-re).

K: A 'make bzImage' után egy hibaüzenet ad: "warning: kernel is too big for standalone boot from floppy".
V: Figyelmen kívül hagyhatod, hacsak nem boot floppyt akarsz csinálni.

K: Kernel használatba vétele.
V: Az aktuális kernel forrásra mindig mutasson egy linux symlink az '/usr/src'-ben, különben néhány külső modul nem fordul le.
A forrás arch/architektúra/boot könyvtárában (ha fogalmad sincs, hogy milyen architektúrát használsz, akkor valszínüleg i386 ;-) elkészült egy "bzImage" állomány, ezt másold át a '/boot' könyvtárba és állítsd be a bootloadert, hogy ezt használja alapértelmezett kernelként.

GRUB gyostalpaló (van részletes ismertető is):
A '/boot/grub/menu.lst' így nézzen ki: "kernel (hdx,y)/boot/bzImage-now root=/dev/hdAa ro"
(A "hdx" az a meghajtó legyen, amin a rendszer van ('/boot/grub/device.map') az "y" a root partíció, a "root=" szintén a rootfs legyen ('df /').)
Ajánlott a grubot: 'grub-install /dev/hdA' módon telepíteni.
Megj.: a grubot elég egyszer telepíteni, ha új kernelt akarsz használatba venni, akkor alkalmazd a "bzImage-now" technikát, lásd pár sorral lejjebb.

Fontos!
Nagyon ajánlott rendet tartani a kernel körül:
Configok: '/ahol_jol_esik/config_backup/[kernel_verzio]/.config-[forditas_datuma]_[valtozat]'
Pld.: "2.4.20/.config-20040321_5"
Lefordult bzImagek a '/boot'ban: 'bzImage-[kernel_verzio]_[valtozat]'
Pld.: "bzImage-2.4.20-grsec_5"
Én úgy egyszerűsítettem le a különböző kernel fordítások közti váltást, hogy a grub konfigjában két bejegyzés van: bzImage-now és bzImage-old. A -now egy symlink az új kernel imagera, az -old pedig az előző _stabilan_ működőre.

Ha jót akarsz magadnak (és nem elvadult bugokra vadászni), akkor egy új kernel _verzió_ felkonfiguráláshoz ne a régi '.config'ot használd, hanem gyakorold be a rendszeredet és utólag hasonlítsd össze az előző '.config'gal (pld. a tkdiff jól használható erre; karakteres megoldás a wdiff, ami pagerre küldi olvasható állapotban a különbségeket: 'wdiff -a .config-20040424 .config-20040428').

A konfigurálás

Azokról az opciókról lesz szó, amik az _alapértelmezett_ állapothoz képest változtatni érdemes (persze ez hardware és software környezet függvénye) vagy egyszerűen megjegyzésem van róluk. Amihez a 2.4 részben már írtam megjegyzést, nem biztos, hogy külön kitérek a 2.6-ban is, tehát a részek egymásra épülnek. Sorry, nem érdemes kétszer ugyanarról az opcióról / opciócsoportról ugyanazt leírni.
A FIXME azt jelenti, hogy az adott dolgot megfelelő hardware / software hiányában nem tudtam kipróbálni, ezért ha tudsz róluk, mindenképp írj.

Miért nincs részletes információ minden opcióról?
Az adott opcióról általában elegendő információt találsz a "Help"jében, vmint a kernelhez adott '/Documentation' alkönyvtárban, vagy a neten (lásd "Ráhangolódás" részt). Sorry, az összes "Help" lefordítása és a fordítás karbantartása rendkívül erőforrás- és időigényes lenne.
A kernel konfigurációs felülete fordítás alatt van, a patch elérhető itt: The Linux Kernel Translation Project

2.4

(Ez a rész a vanilla 2.4.29 kernel alapján készült, lehetséges, hogy más verzióknál kisebb eltérések lesznek.)

  • Code maturity level options
    • Prompt for development and/or incomplete code/drivers - ha nincs szükséged egy még fejlesztés alatt lévő (vagy már elavultnak számító) dologra, akkor kapcsold ki; az irományban nem fogok külön kitérni ezekre és az EXPERIMENTALnak nyilvánított részekre, mivel "ha nem tudod, hogy mire jó, akkor valszínüleg nincs rá szükséged"
  • Loadable module support
    • Enable loadable module support = Y - akkor van rá szükség, ha szeretnél külső kernelmodulokat (pld. nvidia bináris modul) használni
    • Set version information on all module symbols = N - lehetővé teszi az ezzel a kernellel fordított modulok használatát más kernelekkel (FIXME: tapasztalat?)
    • Kernel module loader = Y - a kernel maga próbáljon meg a megfelelő modulokat betölteni; vagy intézd kézzel ('modprobe' + '/etc/modules')
  • Processor type and features
    • Processor family - válaszd ki a legmegfelelőbbet (dmidecode- "Processor Information")
    • Machine Check Exception = Y - a hardware jelezze a kernelnek, ha problémát észlel; néhány konfigurációnál túl paranoid, ilyenkor kapcsold ki
    • /dev/cpu/microcode - Intel IA32 CPU microcode support = Y - microcode
    • /dev/cpu/*/msr - Model-specific register support - egyprocis gépeken nem kell
    • /dev/cpu/*/cpuid - CPU information support = Y - rendszerfigyelő programoknak kellhet
    • BIOS Enhanced Disk Drive calls determine boot disk = N - ha támogatja a merevlemezed, akkor kapcsold be (lásd: merevlemez kézikönyv, gyártó honlapja)
    • MTRR (Memory Type Range Register) support = Y - pld. az MPlayer használja
    • Symmetric multi-processing support - több processzoros gépeken van rá szükség; (egy HyperThreading processzor két valódinak felel meg; a kétmagos proci is)
  • General setup
    • Support for hot-pluggable devices - pcmcia kártya és társai
    • BSD Process Accounting = Y - néhány program használja ezeket az információkat
    • Sysctl support = Y - a kernel néhány változóját lehet valós időben manipulálni a 'sysctl' programmal (lásd "Tanácsok: kernel paraméterek valós idejű beállítása")
    • Kernel core (/proc/kcore) format = ELF - linuxon alapértelmezett
    • Kernel support for a.out binaries = Y - egy régi, ma már rendkívül ritkán használt bináris formátum; kompatibilitási okokból bent lehet hagyni
    • Kernel support for ELF binaries = Y - modern bináris formátum, ma már minden ezt használja
    • Kernel support for MISC binaries = Y - lehetővé teszi, hogy bármilyen futtatható formátumhoz egy wrappert rendeljünk és ezután ugyanúgy indítható, mintha egy a.out/elf bináris lenne; de önmagában a bekapcsolása nem elég, a beállításáról olvasd el a 'Documentation/binfmt_misc.txt' állományt
    • Select task to kill on out of memory condition = N - hogyan viselkedjen a kernel, ha elfogy a fizikai memória és a swap? eredeti módszer: kilövi az éppen memóriát foglalni akaró taszkot, mivel vszínüleg ez okozza a problémát; ha bekapcsoljuk ezt az opciót, akkor az új módszer lép életbe: megpróbálja beazonosítani a problémát okozó taszkot
    • ACPI Support = Y - az ACPI az APMnél modernebb energiagazdálkodási rendszer
      • Button = Y - a házon helyet foglaló gombok használata (pld.: a power gomb szabályosan kapcsolja le a gépet)
      • Fan = Y - a ventilátor szoftveres szabályozása, ha lehetséges
      • Processor = Y - szoftveres processzorhűtés
      • Thermal Zone = Y - ártani nem árthat meg
  • Memory Technology Devices (MTD) - beágyazott gépekhez kell
  • Parallel port support - pld. párhuzamos portra kötött nyomtatók igénylik
  • Plug and Play configuration - kapcsold be és a kernel belövi a pnp pci / isa kártyákat, egyébként kézzel lehet
  • Block devices
    • Loopback device support = Y - lehetővé teszi egy állomány block deviceként használatát és így felmountolhatsz tetszőleges, a kernel által támogatott állományrendszert tartalmazó imaget (cd: .iso, floppy: .img, lementett partíció image)
    • Per partition statistics in /proc/partitions = Y - rendszerfigyelő programok használják
    • RAM disk support = N - fix méretű területet foglal le a memóriában, amit fel lehet mountolni; ha ilyen kell inkább tmpfst használd
  • Multi-device support (RAID and LVM) - RAID FIXME
  • Networking options
    • Packet socket = Y - néhány alacsony szintű hálózati program igényli
    • Network packet filtering = Y - iptables nem árt egy tűzfalhoz
    • Socket Filtering = Y - szintén tűzfal
    • Unix domain sockets = Y - unix környezetben elterjedt eljárás a hálózat elérésére; pld. Xnek kell
    • TCP/IP networking = Y
      • IP: multicasting = N - a syncookie supportot leszámítva desktop géphez nincs szükség ezekre
      • IP: advanced route = N
      • IP: kernel level autoconfiguration = N
      • IP: tunneling = N
      • IP: GRE tunnels over IP = N
      • IP: TCP Explicit = N
      • IP: TCP syncookie support = Y - "syn flooding" ellen véd, használata a "Help"ben
        • IP: Netfilter Configuration - szintén tűzfal, legegyszerűbb, ha mindent bekapcsolsz
    • Appletalk protocol support = N - Apple gépekkel közvetlen hálózati kapcsolathoz kell
    • DECnet Support = N - DECnet háló
    • 802.1d Ethernet Bridging = N
    • The IPX protocol = N - novell háló
  • Telephony Support - spec hardwarerrel rákapcsolhatod a hagyományos telefont a gépre
  • ATA/IDE/MFM/RLL support
    • IDE, ATA and ATAPI Block devices
      • Include IDE/ATA-2 DISK support = Y
        • Use multi-mode by default = N - akkor van rá szükséged, ha a "Help"ben jelzett hibával bootol a gép
        • Auto-Geometry Resizing support = N - régi alaplapok nem kezelik megfelelően a 32gigánál nagyobb merevlemezeket
      • Include IDE/ATAPI CDROM support = N - ide interface a cd-/dvdrom/-rw hez; ha cdt akarsz írni, akkor scsi emu kell, egyébként kapcsold be
      • SCSI emulation support = Y - cd íráshoz kell, lásd Cdrecord
      • IDE Taskfile Access = N - adatvesztést okozhat
      • IDE chipset support/bugfixes - válaszd ki az alaplapi chipsetednek megfelelőt ('lspci' - "IDE interface") és a következőket kapcsold be:
      • PCI IDE chipset support
        • Generic PCI IDE Chipset Support = N - felesleges, ha van az alaplapodhoz megfelelő támogatás
        • Sharing PCI IDE interrupts support - unmaskirq, a merevlemez irqját más is használhassa (gyorsabb)
        • Generic PCI bus-master DMA support - DMA, a prockó kihagyásával képes a merevlemez a memóriába adatot szállítani (gyorsabb)
          • Use PCI DMA by default when available - alapból kapcsolja be a dmat
  • SCSI support - (csak a cdírásról lesz most szó)
    • SCSI disk support = N - nem, mi cdt írunk, nincs scsi merevlemezünk; de ha usb használatát tervezzük, akkor kell
    • SCSI CD-ROM support = Y - cd támogatás viszont kell
      • Enable vendor-specific extensions = N - scsi emuláláshoz nincs rá szükség
    • SCSI generic support = Y - szintén kell
    • Some SCSI devices (e.g. CD jukebox) support multiple LUNs - a következő opciókat nyugodtan kapcsold ki
      • SCSI low-level drivers - néha bekapcsolva felejt itt modult a kernel, kapcsold ki
      • PCMCIA SCSI adapter support -
  • Fusion MPT device support - spec. scsi egység
  • I2O device support - spec kártya
  • Network device support
    • Network device support = Y - hálózati kártya nem megy nélküle
    • Dummy net driver support = Y - diagnosztika céljára jól jöhet
    • ARCnet support = N - ilyen típusú hálózati kártyák támogatása
    • Ethernet (10 or 100Mbit) - ha 10/100 ethernet kártyád van keresd ki a megfelelőt
    • Ethernet (1000 Mbit) - 1000 kártyák
    • PPP (point-to-point protocol) support = Y - Modem, ISDN, ADSL (PPPhez, nem DHCPhez) kapcsolathoz kell; nyugodtan kapcsold be az összes alfunkcióját
  • Amateur Radio support - netezés amatőr rádió adóval
  • IrDA (infrared) support - infra port használhatóvá tétele
  • ISDN subsystem - isdn kártyák
  • Old CD-ROM drivers (not SCSI, not IDE)
  • Input core support - usb input eszközök
  • Character devices
    • Virtual terminal = Y - virtuális terminál nélkül nem tudsz bejelentkezni sem
      • Support for console on virtual terminal = Y - a rendszer konzol futhat virtuális terminálon; szintén alap
    • Standard/generic (8250/16550 and compatible UARTs) serial support = Y - soros port használatához kell
    • Unix98 PTY support = Y - terminál emulátorokhoz kell
    • I2C support = N - hardware szenzorok elérése, de inkább az lm_sensorst használd; de néhány speciális hardware igényli (pld. video for linux)
    • Mice - válaszd ki, hogy Serial / PS/2 / egyéb egeret használsz;
    • Enhanced Real Time Clock Support = Y - nagypontosságú óra (RTC), pld. MPlayer használja
    • /dev/agpgart (AGP Support) - az alaplapodnak megfelelő agp támogatást rakd be ('lspci'); megj.: Nvidia videokártya driverének telepítése
    • Direct Rendering Manager (XFree86 DRI support) - a dri project keretében elérhető driverek beforgatása (3dfx, ati)
    • PCMCIA character devices
  • Multimedia devices
    • Video For Linux - TV / rádió kártyák támogatása; i2ct igényel
  • File systems - nagyon fontos, hogy a root állomány-rendszert (mount | grep " / ") mindenképp statikusan forgasd be, különben nem bootol be a rendszer; lásd még: fstab
    • Quota support = N
    • Kernel automounter = N - jobb kézzel mountolni
    • Kernel automounter version 4 support (also supports v3) = N
    • Reiserfs / Ext3 / DOS FAT / Second extended / JFS / XFS / egyéb - kapcsold be amelyiket használni fogod (a debugging általában nem kell); a FAT minden pontját érdemes bekapcsolni (umsdoshoz olvasd el a Helpet)
    • Compressed ROM file system support = N - pld. live cdken használják
    • Virtual memory file system support (former shm fs) = Y - tmpfs, bővebben a függelékben
    • ISO 9660 - cdk állományrendszere, érdemes minden alpontját bekapcsolni
    • /proc file system support = Y - virtuális állományrendszer, amiből információt lehet kinyerni a rendszerről; rengeteg program használja
    • /dev file system support = N - nem statikus /dev-et használó rendszerek esetén (nincs '/dev/MAKEDEV') kell; az opció megjelenéséhez kapcsold be a "Prompt for development and/or incomplete code/drivers"t
      • Automatically mount at boot = N - ha devfst használsz kapcsold be (azonos a "devfs=mount" boot paraméterrel)
    • /dev/pts file system for Unix98 PTYs = Y - terminál emulátorokhoz kell
    • Network File Systems
    • Partition Types = N - nem kell piszkálni, a "PC BIOS (MSDOS partition tables) support" alapból be van kapcsolva, a többi csak nem x86 környezetben használatos partíció fajták támogatásához kell;
    • Native Language Support
      • Default NLS Option: = a rendszered kódlapjával egyezzen meg (utf8 vagy iso8859-2)
      • Codepage 852 (Central/Eastern Europe) = Y - kell magyar fat16 támogatáshoz (a fat32 is így tárol, amit tud)
      • Windows CP1250 (Slavic/Central European Languages) = Y - magyar fat32
      • NLS ISO 8859-1 (Latin 1; Western European Languages) = Y - biztonság kedvéért, nyugat európai nyelvek
      • NLS ISO 8859-2 (Latin 2; Slavic/Central European Languages) = Y - magyar iso
      • NLS UTF8 = Y - unicode
  • Console drivers - framebuffert csak akkor, ha tényleg szükséged van rá (X nélkül grafikus kimenet)
    • Video mode selection support = Y - 80x25-től különböző felbontást is ki lehet választani a karakteres kimenethez; lásd függelék
  • Sound
    • Sound card support = Y - ha osst akarsz, akkor is kell; válaszd ki (Y) a hangkártyádnak megfelelő oss drivert ('lspci' "Multimedia audio controller"); ha később külső alsa modult (lásd függelék) akarsz, akkor modulba tedd (M)
  • USB support - USB
  • Bluetooth support
  • Kernel hacking
    • Kernel debugging = Y
    • Magic SysRq key = Y - lásd MagicSysRQ
    • Kernel messages buffer length shift - állítsd a Helpben javasoltnál eggyel magasabb értékre (tehát pld. egy procis gépen 15-re)
  • Cryptographic options - kapcsolj ki mindent, ha vminek kell, akkor felülbírálja
  • Library routines - kapcsolj ki mindent, ha vminek kell, akkor felülbírálja

2.6

(Ez a rész a vanilla 2.6.10 kernel alapján készült, lehetséges, hogy más verzióknál kisebb eltérések lesznek.)
Az opciók egy részét az előző részben letárgyaltuk, legfeljebb most más helyre kerültek.

  • Code maturity level options = Y - ha szükséged van a 2.6 kernel néhány még nem véglegesített (pld. lm_sensors) ill. már elavulóban lévő (pld.: devfs) részére, akkor ajánlott bekapcsolni
    • Select only drivers expected to compile cleanly = Y
  • General setup
    • Support for paging of anonymous memory (swap) = Y
    • BSD Process Accounting = Y
    • Auditing support = N - pld. SELinux igényli
    • Kernel log buffer size = 16 - nyugodtan emeljük a "Help" ben ajánlott felé eggyel (az opció megjelenéséhez kapcsold be: Kernel hacking - Kernel debugging)
    • Support for hot-pluggable devices
    • Kernel .config support = Y
      • Enable access to .config through /proc/config.gz = Y - a fordításhoz használt .configot lehet elérni utólag a /proc alól, hasznos lehet, ha gyakran fordítasz
    • Configure standard kernel features (for small systems) - a doksiban szereplő opciók egy része (pld. "virtual terminal") csak akkor fog megjelenni, ha ezt bekapcsolod; alapértelemezés szerint ezek be vannak kapcsolva
  • Loadable module support
    • Enable loadable module support = Y
      • Module unloading = Y - ha futásidőben akarsz modulokat kiszedni (rmmod)
        • Forced module unloading = N - használatban lévő modulokat is el lehet távolítani (rendszerhalálhoz vezethet)
      • Module versioning support = N
      • Automatic kernel module loading = N
  • Processor type and features
    • Subarchitecture Type - válaszd ki a megfelelőt
    • Processor family - válaszd ki a megfelelőt
    • HPET Timer Support = N - modernebb időzítő; alaplapi és bios támogatás kell hozzá
    • Symmetric multi-processing support
    • Preemptible Kernel = Y - nagy terhelés esetén kevésbé akadnak a programok (néhány konfigurációnál a kikapcsolása hoz jobb eredményt)
    • Local APIC support on uniprocessors = Y - csak akkor van jelentősége, ha a processzor támogatja
      • IO-APIC support on uniprocessors = Y - szintén
    • Machine Check Exception = Y
      • Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4 = Y
    • /dev/cpu/*/cpuid - CPU information support = Y
    • Firmware Drivers
    • High Memory Support = off
    • MTRR (Memory Type Range Register) support = Y
    • Use register arguments = N - nem minden zárt forrású modul támogatja
  • Power management options (ACPI, APM)
    • Power Management support - ACPIt vagy APMt használj, egyszerre a kettő nem megy
      • Software Suspend = N - kiírja a memória tartalmát a swapba és a következő indításkor ugyanonnan lehet folytatni a működést
    • ACPI - lásd a 2.4 részben
    • APM - szintúgy
    • CPU Frequency scaling = N - leginkább a laptopokban helyet foglaló procik lehetővé teszik az órajel futás közbeni manipulálását (csökkentve az energiafogyasztás és a melegedést), ellenőrizd, hogy a processzorod szerepel-e a felsoroltak közt ('dmidecode')
  • Bus options
    • PCI support = Y
    • Legacy /proc/pci interface = N - elavult, ha akarod kapcsold be
    • PCI device name database = Y
    • ISA support = Y - PnP supporthoz kell
    • MCA support = N - lásd MCA
  • Executable file formats
  • Device Drivers
    • Plug and Play support
      • Plug and Play support = Y - bios helyett a linux konfigurálja fel a pnp eszközöket; (biosban "pnp os installed" bekapcs)
    • Block devices
      • Normal floppy disk support = Y
      • Loopback device support = Y
      • Network block device support = N
      • RAM disk support = N - fix méretű területet lefoglal a memóriában, de hasznosabb a tmpfs (initrdnek kell, ami nem sok vizet zavar saját kernelnél)
      • Low Performance USB Block driver = N - az sub-storage támogatásnak bekavar
      • Support for Large Block Devices - 2 terrabytenál nagyobb eszközök támogatása
    • ATA/ATAPI/MFM/RLL support
      • Include IDE/ATAPI CDROM support = Y - a 2.6 kernelnél már nem kell scsi emuláció a cdíráshoz, lásd Cdrecord
      • Include IDE/ATAPI FLOPPY support = N - csak spec. esetben van erre szükség (ha nem tudod mi ez, neked valószínűleg a Normal floppy disk support kell)
      • IDE chipset support/bugfixes - válaszd ki az alaplapodnak megfelelő chipkészletet ('lspci' - "IDE interface"); az unmasrqt és a dmat ne kapcsold ki
    • SCSI device support
    • IEEE 1394 (FireWire) support
    • Networking support - ethernet kártya, ppp, stb. (a hálózattal kapcsolatos beállítások a 2.4 részben vannak tárgyalva)
      • Networking options - tcp/ip, stb.
        • Network packet filtering (replaces ipchains)
          • IP: Netfilter Configuration - tűzfallal (iptables) kapcsolatos beállítások
    • Input device support - a 2.4-hez képest ide lett összegyűjtve minden bemeneti eszköz
      • Input devices (needed for keyboard, mouse, ...) = Y
      • Userland interfaces = Y
      • Mouse interface = Y - egér elérése /dev/input/mouseX alatt; a /dev/input/mice egy egységes egér interface
        • Provide legacy /dev/psaux device = Y - kompatibilitási okokból a ps/2 egér elérhető a régi helyén is
      • Serial i/o support = Y - ps/2, soros port, stb.
      • PCI PS/2 keyboard and PS/2 mouse controller = N - neve megtévesztő, csak speciális esetben van rá szükség (lásd help)
      • i8042 PC Keyboard controller = Y - alap bill., a köv. 3 opcióra csak spec. esetekben van szükség
      • Keyboards = Y
        • AT keyboard support = Y - pck alapértelmezett billentyűzete (tehát nem pld. usb); a többi spec. hardwaret igényel
      • Mice = Y - válaszd ki a megfelelő egeret
    • Character devices
      • Virtual terminal = Y
        • Support for console on virtual terminal = Y
      • Unix98 PTY support = Y
      • Legacy (BSD) PTY support = N - vszínűleg nem lesz rá szükség és néhány esetben a terminálok / konzolok használhatatlanná válnak
      • QIC-02 tape support = N
      • Intel/AMD/VIA HW Random Number Generator support = N - ha a "Help"ben felsorolt hardwarerrel rendelkezel
      • Enhanced Real Time Clock Support = Y
      • /dev/agpgart (AGP Support) - válaszd ki az alaplapi chipkészleted a listáról
      • Direct Rendering Manager - ha a listában szereplő videókártyával rendelkezel és dri-vel szeretnéd használni az Xet kapcsold be
    • I2C support = Y - Alaplapi szenzorok
      • I2C device interface = Y
    • Graphics support
      • Support for frame buffer devices = N - csak ha pld. X nélkül akarsz grafikus kimenetet, egyébként csak gond van vele
      • Console display driver support
        • VGA text console = Y
          • Video mode selection support = Y
        • MDA text console (dual-headed) = N
    • Sound - egyszerre nem lehet ALSA és OSS
      • Advanced Linux Sound Architecture = Y - az ossnél modernebb
        • Advanced Linux Sound Architecture
          • Sequencer support = Y
            • Sequencer dummy client = N
          • OSS Mixer API = Y - az alsa képes nagyon jó oss emulációra; a /dev/mixer támogatása;
          • OSS PCM (digital audio) API = Y - a /dev/dsp támogatás
          • OSS Sequencer API = Y - a /dev/sequencer és a /dev/music támogatása
          • RTC Timer support = Y - nagypontosságú hardware időzítő használata
          • Verbose printk = Y - bőbeszédűbb hibaüzenetek
          • Debug = N
            • Generic devices
              • Dummy (/dev/null) soundcard = N - lesz egy álhangkártyád, ami minden bejövő jelet a /dev/null-ba irányít; bekavarhat
              • Virtual MIDI soundcard = N - midi hardwarehez kellhet (a maradék opciók szintúgy)
            • ISA & PCI &; ALSA USB devices - válaszd ki a megfelelő drivert ('lspci' "Multimedia audio controller"); ha rendelkezel külön hangkártyával, akkor az alaplapra integráltat nem kell bekapcsolni
      • Open Sound System = N
  • File systems - a részletekért lásd a 2.4 részt
    • CD-ROM/DVD Filesystems = Y
    • DOS/FAT/NT Filesystems = Y
      • MSDOS fs support = Y = 8.3 állománynevek
      • VFAT (Windows-95) fs suppor = Y - hosszú állománynevek
        • Default codepage for FAT = 852 - magyar kódlap a 8.3 állományokhoz
        • Default iocharset for FAT = iso8859-2 - magyar kódlap a hosszú állománynevekhez
      • NTFS file system support = N - az ntfs írás nagyon korlátozott, lásd "Help"
    • Pseudo filesystems
      • /proc file system support = Y
      • sysfs file system suppor = Y
      • /dev file system support - devfs
        • Automatically mount at boot - ha devfst használsz kapcsold be (azonos a "devfs=mount" boot paraméterrel)
      • /dev/pts Extended Attributes - acl a /dev/pts-hez
      • Virtual memory file system support (former shm fs) = Y
      • HugeTLB file system support = N
    • Miscellaneous filesystems = N
    • Network File Systems = N - ha Windowsos fájl/nyomtatómegosztást szeretnél használni, akkor az SMB-t válaszd e menüpont alatt
    • Partition Types = N
    • Native Language Support
  • Kernel hacking
    • Kernel debugging = Y
    • Magic SysRq key = Y
    • Use 4Kb for kernel stacks instead of 8Kb = N - problémát okozhat külső kernel modulokkal
  • Cryptographic options - kapcsolj ki mindent, ha vminek kell, akkor felülbírálja
  • Library routines - kapcsolj ki mindent, ha vminek kell, akkor felülbírálja


Függelék

Hibák

Ha bármilyen problémád lenne a kernel bootolása folyamán, akkor a kernel boot paramétereit egészítsd ki egy "debug"gal, ekkor részletesebb információkat fog kiírni.

Boot elején hibaüzenet: "VFS: Unable to mount root fs on xx:xx"
Ellenőrizd:

  • a bootloadernek helyes root állományrendszer legyen megadva ("kernel (...) root=/dev/hdXY")
  • a root állományrendszer ne modulban legyen, hanem fixen
  • megfelelő ide támogatás és chipkészlet legyen bekapcsolva
  • "devfs"t használó disztribúciók esetén azt sem árt fixen beforgatni: ("/dev file system support" + "Automatically mount at boot")

Boot idején hibaüzenet: "VP_IDE: not 100% native mode: will probe irqs later"
Több módszer létezik az ide eszközök IRQjának kiderítésére, ez csak egy jelzés, hogy az egyik nem elérhető. (Mindenesetre érdemes egyszer összevetni a "IDE chipset support/bugfixes" beállításait az 'lspci' eredményével. A DMA állapotának lekérdezése: 'hdparm -i /dev/hdX', ha *-gal egy dma mód van jelölve, akkor oké.)

log buffer
Előfordulhat, hogy nem lehet visszakeresni ('var/log/syslog', stb.) a boot üzeneteinek elejét, mert megtelik a buffer; ekkor érdemes a "log_buf_len=n" boot paramétert használni, 64k elég szokott lenni. (Ugyanez érhető el a "General setup - Kernel log buffer size" beállításával.)

Sikertelen egy program indítása és a következő üzenetet kapom: "FATAL: kernel too old"
Az adott program futtatásához (lásd: 'file program': "(...): ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), stripped") az általad használt kernelnél (lásd: 'cat /proc/version': "Linux version 2.0.20 (...)") frissebbet kell használnod.

Tippek

Nvidia videókártya esetén ajánlott az agpart helyett az nvidia saját agp támogatását használni, amennyiben támogatja az alaplapot; bővebben erről az '/usr/share/doc/NVIDIA_GLX-1.0/README' "APPENDIX F: CONFIGURING AGP" részében. (Megj.: ha instabil lenne a bináris nvidia driver ("esélyes" erre a via vagy sis alaplapi chipkészlet, amd processzor, stb.) akkor kapcsold ki az agp támogatást; 3d így is lesz, persze szerényebb teljesítménnyel.)

túl gyors egér és egyéb input problémák a 2.6-ban:
http://lwn.net/Articles/69107/

NLS (native language support):
A mountoláskor az állomány-/könyvtárnevek kezeléséhez használatos karakter-kódkészletet határozza meg. Nem az állománynevek tárolási módját, hanem azt, hogy hogyan férsz hozzá (pld. a terminálon keresztül). Az unicode a jövő, ezért érdemes ezt rakni alapértelmezettnek, de ha eddig iso8859-2-t használtál, az problémákhoz vezethet, ezért áttérés előtt ékezetteleníts minden állományt (pld. krename, detox). A mountolásról lásd az fstab szócikket.

A kernelnek átadható paraméterek (pld. video=...)?
Nézd át a 'Documentation/kernel-parameters.txt'-t.

"Video mode selection support" használatba vétele:
a bootloadernek kell átadni a "vga=" paramétert; először "vga=ask" segítségével kérdezd le, az elérhető felbontásokat, majd pld. "vga=10" állítja be minden indításkor (megj.: a "10" az ask listájánál "a" ként szerepel, stb.)

Gyakori kérdések a kernellel kapcsolatban.

Megváltoztattam az aktuális kernel forrásának könyvtárnevét, ezért pld. nem fordulnak a modulok.
Ellenőrizd, hogy a '/lib/modules/kernel_verzio/build' a megfelelő könyvtárra mutasson ('/usr/src/linux-kernel_verzio').

Olyan külső kernelmodulok telepítése, amelyek nem tartalmaznak "make" fordítórendszert, vagy - ha tartalmaznak - nem ismerik a 'make install' parancsot.
A lefordult .o állomány(oka)t másold át a '/lib/modules/[verzio]/kernel/drivers/' megfelelő alkönyvtárába, utána már kezeli a 'modprobe'; vagy kézi betöltése: 'insmod modul.o', majd 'depmod -a' a függőségek miatt.

Állítólag szükség van az "initrd"re.
Mire jó? Initrd
Ha nem moduláris kernelt készítesz, akkor biztos, hogy nem kell ilyesmivel foglalkoznod.

Mi a helyzet a "System.map"pal?
Alapesetben nincs rá szükség. A debugolást segíti azzal, hogy a kernel hivatkozási címeit helyettesíti a funkció nevével.
Ha mindenképp be akarod üzemelni, akkor így a legegyszerűbb: ln -s /usr/src/linux/System.map /boot/

Úgy hallottam hogy ...
- a 2.4 fordításakor a 'make dep' után futtatni kell egy 'make clean't is.
Ez a lépés felesleges, mert a 'make clean' nem töröl semmi olyat, amit a 'make dep' létrehozott. (lásd: Makefile: "dep-files", "MRPROPER_FILES")
- kézzel kell létrehozni az 'include/asm' symlinket.
Szintén felesleges lépés, majd 2.6 esetén a 'make bzImage', 2.4 esetén a 'make menuconfig' létrehozza. (lásd: Makefile 2.6: "SYMLINK", "ARCH" és "SUBARCH"; 2.4: "symlinks")

DE amennyiben a disztródhoz nem járnak alapértelmezetten a kernel headerjei (pld.: debian alatt a 'linux-kernel-headers' csomag, amitől függ a 'libc6-dev'), akkor valóban kézzel kell létrehozni:
lépj be az 'include/' könyvtárba, majd az architektúrádnak megfelelő ('uname -m') symlinket hozd létre; pld.: 'ln -s asm-i386/ asm'

mi a helyzet a "kernel: spurious 8259A interrupt: IRQ7." üzenettel?
ami biztos, hogy nem okoz problémát, csak egy figyelmeztetés; nagyon ritkán jön elő, így nem tudom körbelőni mi okozza; googleztam, úgy néz ki, hogy egyrészt via chipkészletnél fordul elő (de van ahol más gyártmánynál is), másrészt az apic okozza (de van ahol ennek hiányába is előjön);
egyszerűen hagyd figyelmen kívül;
(megj., hátha segít: a 8259a az intel programozható megszakítás vezérlője, a 7. irqn a paralel port van)

Miért nincs 'include/linux/version.h' állományom?
A kernel fordítása során fog létrejönni, vagy futtass egy 'make include/linux/version.h't.

kernel paraméterek valós idejű beállítása:
Lásd: Linux kernel

kernel modulnak átadható paraméterek: kézi modulbetöltéskor: 'modprobe snd-emu10k1 index=0' automata kernelmodul töltésnél szerkeszd az '/etc/modules.conf' állományt: "options snd-emu10k1 index=0" (FIXME: fixen fordított dolgok esetén a kernel boot paramétere: "kernel (...) snd-emu10k1=index=0" ?)

Boot közben a következő figyelmeztetést kapom: " Probing IDE interface ide2... / ide2: Wait for ready failed before probe !"
Kapcsold ki a "Generic PCI IDE Chipset Support"ot, ha van támogatás az alaplapi chipsetedhez.

2.6 kernelre váltottam és nincsenek termináljaim és konzoljaim.
Kapcsold ki a "Legacy (BSD) PTY support"ot. (Főleg udev esetén jelentkezik.)

Mindig a legújabb kernelt szeretném fordítani, de az apró patchek után is leforog az egész és ez sokáig tart. Telepítsd a ccache csomagot (debian) és készíts symlinket a binárisára /bin/gcc néven (további infó a ccache man oldalán)

Ez bug?

sound/core/init.c: In function `snd_card_free':
sound/core/init.c:257: warning: `pm_unregister' is deprecated (declared at include/linux/pm.h:111)

Az adott függveny hamarosan eltávolításra kerül és ez egy figyelmeztetés az arra illetékeseknek; problémát nem okoz, csak figyelmeztetés.

Linkek

Hol találok további információt egy adott opcióról / patchről / akármiről? Wikipedia HupWiki Google

Konkrét ismertetők (rég volt frissítve, lehet, hogy a lista és a linkek tartalma már nem aktuális):

a linux processz ütemező - http://www.hup.hu/modules.php?name=News&file=article&sid=4745 http://www.hup.hu/modules.php?name=News&file=article&sid=4839 http://www.hup.hu/modules.php?name=News&file=article&sid=4938
(1) sheduler - http://www.hup.hu/modules.php?name=News&file=article&sid=591
anticipatory io scheduler - http://www.hup.hu/modules.php?name=News&file=article&sid=2613
badram/badmem - http://www.hup.hu/modules.php?name=News&file=article&sid=3907 http://www.hup.hu/modules.php?name=News&file=article&sid=5657
cdfs - http://www.elis.rug.ac.be/~ronsse/cdfs/
cpu affinitás - http://www.hup.hu/modules.php?name=News&file=article&sid=4482
elevator váltás valós időben - http://www.hup.hu/modules.php?name=News&file=article&sid=4461
cpufrq - http://www.hup.hu/modules.php?name=News&file=article&sid=1852
futex - http://www.hup.hu/modules.php?name=News&file=article&sid=2418
huge tlb pages - http://www.hup.hu/modules.php?name=News&file=article&sid=1681
io sheduler - deadline, anticipatory, cfq, noop - http://www.hup.hu/modules.php?name=News&file=article&sid=4461
kexec - http://www.hup.hu/modules.php?name=News&file=article&sid=5970
laptop mode - http://www.hup.hu/modules.php?name=News&file=article&sid=4532
large block devices (>2tb) - http://www.hup.hu/modules.php?name=News&file=article&sid=963
low latency - http://www.hup.hu/modules.php?name=News&file=article&sid=2555
module_alias - http://www.hup.hu/modules.php?name=News&file=article&sid=4302
nmap megtévesztés - http://hup.hu/modules.php?name=News&file=article&sid=5483
oom killer (régi és új) - http://www.hup.hu/modules.php?name=News&file=article&sid=4896
nptl - http://www.hup.hu/modules.php?name=News&file=article&sid=2029
preemtivitás - http://www.hup.hu/modules.php?name=News&file=article&sid=229
request barriers - http://www.hup.hu/modules.php?name=News&file=article&sid=6087
rmap vm - http://www.hup.hu/modules.php?name=News&file=article&sid=557 http://hup.hu/modules.php?name=News&file=article&sid=5711
shell file system - http://www.hup.hu/modules.php?name=News&file=article&sid=3577
staircase process scheduler - http://www.hup.hu/modules.php?name=News&file=article&sid=5676
stealth ip stack - http://www.hup.hu/modules.php?name=News&file=article&sid=344
systrace - http://www.hup.hu/modules.php?name=News&file=article&sid=1036
udev - http://www.hup.hu/modules.php?name=News&file=article&sid=4597
user mode linux - http://www.hup.hu/modules.php?name=News&file=article&sid=2992 http://www.hup.hu/modules.php?name=News&file=article&sid=3053
variable scheduling timeouts - http://www.hup.hu/modules.php?name=News&file=article&sid=4620
voluntary kernel preemption - http://www.hup.hu/modules.php?name=News&file=article&sid=6419

FIXME: usb, sata, raid, ... egyéb kimaradt részek

Kapcsolódó szócikkek