De Help Desk punt NL
Kennisbank
De Helpdesk > De Helpdesk > Kennisbank

Kernel

Oplossing

Wat is de kernel?

De kernel is de basis van het besturingssysteem en het deel dat echt „Linux” heet. Het vervult essentiële taken, zoals geheugenmangament, scheduling om taken te verdelen over de processortijd, en communicatie met de hardware via device drivers. Device drivers kun je in de kernel zelf „meebakken” of als module compileren. Een module is een stukje code dat je naast de kernel kunt laden als je het nodig hebt. De kernel kan niet onbeperkt groot zijn. Het is daarom verstandig om zaken die niet permament nodig zijn als module te compileren. Daarnaast kunnen modules uit het geheugen gehaald worden om geheugen te besparen.

Het versienummer van de kernel heeft altijd de vorm a.b.c. Als de b even is, gaat het om een stabiele kernel, bij oneven getallen om een developmentversie. De nieuwste stabiele reeks is 2.6.x.

Je kunt de versie van de kernel die je nu gebruikt opvragen met uname -r.

Kernel compileren

De standaard locatie voor de broncode van de kernel /usr/src/linux. Als je van meerdere versies bijhoudt, is het handig om ze in directory's als /usr/src/linux-2.6.10 en /usr/src/linux-2.6.11 te zetten. Vervolgens kun je een symlink /usr/src/linux maken met een commando als ln -s /usr/src/linux-2.6.11 /usr/src/linux. Ga naar /usr/src/linux en typ make menuconfig of make xconfig om een tekstgebaseerd resp. X-gebaseerd configuratieprogramma te starten. Bij de meeste keuzemogelijkheden kun je help opvragen. Doe dat als je niet weet wat je moet kiezen.

Als je klaar bent met het configureren, moet je voor kernel 2.4.x make dep doen. Voor 2.6.x is dit niet nodig. Vervolgens kun je eventueel make clean gebruiken om alles van een vorige compilatieslag weg te halen. Doe je dat niet, dan zullen reeds gecompileerde onderdelen niet opnieuw gecompileerd worden. Nu kun je de kernel zelf maken met make zImage. Als de kernel te groot blijkt te zijn (je zult vanzelf een foutmelding krijgen bij het opstarten), kun je de kernel ook compileren met make bzImage. Je kunt eigenlijk net zo goed altijd bzImage gebruiken. Het zorgt er niet voor dat de kernel met bzip2 wordt ingepakt, zoals je zou kunnen denken. De kernel wordt altijd met gzip ingepakt, net zoals bij zImage. De b staat voor big en houdt in dat er „staggerd loading mode” gebruikt wordt. Normaal gesproken kan er slechts 512 kB geheugen geaddreseerd worden voor de kernel tijdens het opstarten. Met deze methode kan er 1024 kB worden gebruikt. Daardoor zijn grotere kernels te gebruiken.

Maak de modules met make modules. Als je een aangepaste versie maakt van dezelfde kernelversie als die je al gebruikt, dan zullen de oude modules overschreven worden bij de volgende stap. Wil je ze bewaren, gebruik dan een commando als mv /lib/modules/2.6.11 /lib/modules/2.6.11-working. Installeer de modules met make modules_install. De nieuwe modules komen dan te staan onder /lib/modules/kernelversie.

Kopieer het bestand /usr/src/linux/arch/i386/boot/bzImage (de zojuist gecompileerde kernel) naar /boot onder een andere naam dan de huidige kernel, zodat je de oude kernel nog bij de hand hebt voor als het fout gaat. Noem het bijvoorbeeld kernel-2.6.11-custom.

Als laatste stap moet de bootloader worden aangepast om de nieuwe kernel te kunnen laten booten. Dit staat verderop uitgelegd. Laat de oude kernel ook staan tussen de mogelijkheden van de bootloader. Dan kun je de oude kernel gebruiken in het geval dat de nieuwe niet werkt.

Modules

Gebruik insmod of modprobe om een module te laden, lsmod om te zien welke geladen zijn en rmmod om een module te verwijderen. Achter insmod moet je een bestandsnaam opgeven van een module (eventueel met het hele pad ervoor als het niet in de huidige directory staat), achter modprobe alleen de naam zonder extensie (.o voor kernel 2.4.x, .ko voor kernel 2.6.x). Modprobe zoekt zelf uit of er nog andere modules nodig zijn en laadt die indien nodig. Meer informatie over een module kun je opvragen met modinfo modulenaam. Gebruik hier ook de basisnaam zonder extensie. Zie de manual pages voor meer informatie.

De modules staan altijd in /lib/modules/kernelversie.

Bootloader

Een bootloader is nodig om tijdens het opstarten te kunnen kiezen welk OS geboot moet worden. Het is nodig om uit verschillende kernels te kunnen kiezen, maar ook om zowel Windows en Linux te kunnen booten als je beide op hetzelfde systeem hebt geïnstalleerd.

Het eenvoudigste is de bootloader in de MBR (master boot record) van je harde schijf zetten. Wat ook kan is het aan het begin van een partitie zetten. Die partitie moet dan wel als bootable gemarkeerd zijn. Dat kun je wijzigen met fdisk. (Als je de bootloader aan het begin van een partitie zet en er is een andere bootloader in de MBR, dan zal die laatste worden gestart tijdens het booten.)

LILO

LILO staat voor Linux Loader en is een oude bootloader. Het configuratiebestand van LILO is /etc/lilo.conf. Een voorbeeldinhoud is:

boot=/dev/hdc
map=/boot/map
install=/boot/boot.b
vga=normal
lba32
prompt
timeout=50
message=/boot/message
default=Linux

image=/boot/kernel-2.6.11
   label=Linux
   root=/dev/hdc5
   read-only

other=/dev/hdc1
   label=Windows
   table=/dev/hdc

Met de regel lba32 zorg je ervoor dat de kernel ook gestart kan worden als hij na de 1024e cylinder staat. Wat achter boot staat, is de plaats waar LILO geïnstaleerd gaat worden. Door de device van de harde schijf op te geven, wordt dat de MBR. Wat achter install staat, is het bestand dat in de boot sector gaat komen. Dit kan zowel een normale tekstgebaseerde LILO-prompt zijn als een enigszins grafisch menu. Wat achter default staat, is wat na de timeout gekozen zal worden. Voor een overzicht van configuratiemogelijkheden zie man lilo.conf.

Alle kernels die je met LILO wilt kunnen starten, moeten in een image-blok gezet worden. Met label geef je een woord dat je moet intikken om die kernel te starten. Om DOS of Windows van een bepaalde partitie op te starten, gebruik je niet image, maar other. Hierbij is het genoeg om een label en de partitie om van op te starten aan te geven. Op de LILO-prompt kun je met TAB een overzicht van mogelijkheden krijgen.

Per kernel moet je de root-partitie opgeven en eventuele extra parameters met een append-regel. In het voorbeeld hier worden geen extra opties meegegeven. Om ide-scsi te laten gebruiken kun je bijv. de regel append=„hda=ide-scsi” gebruiken. (Zie ook sectie Cd's en dvd's branden.) Het is normaal om de root-partitie eerst read-only te laten mounten. Later in het opstartproces wordt het dan geremount als read-write.

Als je het configuratiebestand aanpast, gebeurt er nog helemaal niks. Om LILO echt opnieuw in de MBR te laten zetten, moet je (als root) /sbin/lilo uitvoeren.

Bij problemen is het aantal letters dat verschijnt bij het booten is een indicatie voor hoe ver LILO komt. De meest voorkomende oorzaken van een probleem zijn:

  • LILO is niet opnieuw uitgevoerd na een nieuwe kernel te hebben gecompileerd.
  • /etc/lilo.conf bevat fouten.
  • De MBR (Master Boot Record, eerste stuk van de harde schijf) is corrupt.

Wat vaak helpt is LILO opnieuw installeren. Dit kan door het systeem te booten m.b.v. van een bootdisk en vervolgens /sbin/lilo uit te voeren.

GRUB

Een alternatieve bootloader is GRUB, GRand Unified Bootloader. In veel distributies wordt dit standaard gebruikt i.p.v. het oudere LILO, omdat het een aantal voordelen heeft t.o.v. zijn voorganger. Om te beginnen is het OS-neutraal. LILO kan alleen vanuit een Linux-systeem geconfigureerd en geïnstalleerd worden. Bij GRUB is dat vanuit verschillende OS'en mogelijk. Verder biedt GRUB een interactief en configureerbaar menu. Er is altijd de mogelijk een command line te krijgen waarmee je je systeem kunt booten. Als LILO niet goed is geconfigureerd, is het niet mogelijk te booten totdat je met een bootdisk weer in je Linux-systeem bent, het goed configureert en herinstalleert. En ten slotte heeft het veel meer mogelijkheden.

Het configuratiebestand van GRUB staat in /boot/grub/grub.conf of menu.lst. Een voorbeeldinhoud is:

timeout 10
default 0
splashimage = (hd0,1)/grub/splash.xpm.gz

title Gentoo Linux
root (hd0,1)
kernel /kernel-2.6.9 root=/dev/hde3
boot

title Windows
rootnoverify (hd0,0)
makeactive
chainloader +1

GRUB gebruikt niet de devicenamen voor harde schijven en partities van Linux. De eerste harde schijf is altijd (hd0), waar die ook op zit aangesloten. De tweede is (hd1) etc. De eerste partitie van de eerste harde schijf is (hd0,0), de tweede (hd0,1) etc.

Per Linux-kernel of ander OS maak je een blok dat begint met de titel die getoond moet worden in het menu van GRUB. Voor Windows is altijd hetzelfde blok nodig. Let alleen op de partitie waar het geïnstalleerd is.

Kijk bij de Linux-kernel uit hoe je naar de kernel verwijst. De root-regel geeft niet de root-partitie aan, maar de root waaronder GRUB de kernel moet zoeken. In het voorbeeld hier is (hd0,1) een partitie die in Linux gemount wordt onder /boot. In deze partitie staat de kernel direct. Als de data voor /boot in de root-partitie staat en de root-partitie (hd0,1) is, dan zou je naar de kernel moeten wijzen met (hd0,1)/boot/kernel-2.6.9.

Eventuele extra opties voor de kernel zet je direct achter de naam van de kernel (zoals root=/dev/hde3 in het voorbeeld hier).

Gebruik grub-install /dev/xxx om GRUB te installeren. Vervang xxx door de devicenaam van je harde schijf. (Eventueel kun je ook een partitie aangeven, maar zoals gezegd is het eenvoudiger het in de MBR te zetten.)

 
Was dit artikel bruikbaar? ja / nee
Gerelateerde artikelen Windows eerst in grub
Meer dan 4GB werkgeheugen gebruiken in Ubuntu 32 bit
This kernel requires an x86-64 cpu, but only detected an i686 cpu
Partities
Grub Herstellen of Verwijderen
Linux commando overzicht
Security
Systeemconfiguratie
Windows start niet meer na update ubuntu
Hardwareondersteuning
Artikel details
Artikel ID: 739
Categorie: Linux handboek 2008
Zoekwoorden kernel, compileren, modules, boot, bootloader, lilo, grub,
Datum toegevoegd: 6-Dec-2008 03:25:50
Aantal bekeken: 247
Beoordeling (Stemmen): Artikel nog niet beoordeeld (0)

 
« Ga terug