Dit document beschrijft het compileren van Linux, dat wil zeggen de kernel, niet het gehele GNU/Linux besturingssysteem. Het compileren van Linux wordt vaak aangeduid als "de kernel compileren", maar Linux is in feite slechts een kernel. In dit document gebruiken we de term "kernel" om "Linux" mee aan te duiden, die term wordt het meest gebruikt.
Over het algemeen is het compileren van de kernel niet nodig. De meeste distributies leveren een heel goede standaard kernel mee, die in bijna alle gevallen voldoet. Een kernel compileren kun je doen als:
Om de kernel te compileren moet je eerst de broncode ophalen. Dit kan eenvoudig via het internet, mits je een snelle verbinding ermee hebt. Een andere mogelijkheid is bijvoorbeeld de broncode van een cd-rom van je distributie halen. Veel distributies leveren de broncode van de meest recente kernel namelijk wel mee. Wanneer je de broncode van internet afhaalt, weet je in ieder geval zeker dat je altijd de nieuwste broncode hebt. Een aantal internetsites waar je de broncode kunt ophalen:
De broncode voor een kernel wordt meestal geleverd in een tar archief dat met gzip of bzip2 is ingepakt. Deze kun je als volgt uitpakken (aghankelijk van het formaat):
tar -zxvf linux-x.y.z.tar.gz tar -jxvf linux-x.y.x.tar.bz2
De gebruikelijke plaats voor de broncode van een kernel is "/usr/src/linux-x.y.z", waarbij "x.y.z" de versie aangeeft. Over het algemeen bestaat er een symlink "/usr/src/linux" die verwijst naar de directory met de meest recente broncode.
Met patches is het mogelijk de functionaliteit van een kernel uit te breiden, voordat je gaat compileren. Er zwerven honderden patches over het internet voor de kernel, maar meestal zijn ze niet nuttig voor wat je [boat ramps] wilt bereiken.
Het patchen van een kernel is eenvoudig te doen met het programma patch. Over het algemeen gaat patchen op een van de volgende manieren:
patch -p0 < patch-bestand patch -p1 < patch-bestand
Veel patches zijn ingepakt met de programma's bzip2 of gzip. Je zult deze eerst uit moeten pakken, alvorens de kernel te kunnen patchen.
In de praktijk is het handig dit in één commando te doen:
bzcat patch-bestand.bz2 | patch -p0 bzcat patch-bestand.bz2 | patch -p1 zcat patch-bestand.gz | patch -p0 zcat patch-bestand.gz | patch -p1
Vervolgens is het tijd aan te geven welke opties allemaal in de kernel moeten komen. Open hiervoor een shell of tty en wordt hoofdgebruiker met
su -
De kernel in de grafische omgeving configureren:
make xconfig
De kernel in een menugebaseerde tekstomgeving configureren:
make menuconfig
De kernel in een vraag en antwoord gebaseerde tekstomgeving configureren
make config
Menuconfig en xconfig zijn programma's die de kernel configureren door middel van menu's. In deze menu's bevinden zich submenu's en opties. Opties zijn mogelijkheden van de kernel die je aan (Y) of uit (N) kunt zetten. De meeste opties bieden ook de mogelijkheid als module (M) gecompileerd te worden. Dat wil zeggen dat ze los gecompileerd worden en wanneer nodig, door de kernel of de gebruiker geladen kunnen worden.
Config is een configuratieprogramma dat alle opties doorloopt en bij elke optie vraagt of je het wel of niet of als module wilt. Dit programma is vrij primitief, het is makkelijker menuconfig of xconfig te gebruiken.
Het is soms niet mogelijk een bepaalde optie te selecteren. Sommige opties worden pas beschikbaar op het moment dat een andere optie ook geselecteerd is.
Voor meer informatie over het configureren van de kernel, zie LinuxKernelConfigureren.
De kernel compileren gaat in verschillende stappen. Het is een goed idee om eventuele overblijfselen van oude compileerprocessen te verwijderen:
make clean
Een rigoreuzere methode, die je alleen moet gebruiken in geval van problemen, is:
make mrproper
Daarna moeten de afhankelijkheden nagegaan worden. Dit is alleen noodzakelijk voor kernels tot en met versie 2.4.x:
make dep
Nu moet de kernel zelf gecompileerd worden, een proces dat behoorlijk lang kan duren, afhankelijk van de snelheid van je computer en de opties die je hebt aangezet:
make bzImage
Als je modules hebt ingesteld tijdens de configuratie, moeten die ook gecompileerd en geinstalleerd worden. Dit proces kan ook eventjes duren:
make modules modules_install
De zojuist gecompileerde kernel staat in /usr/src/linux/arch/<mijn arch>/boot/bzImage. <mijn arch> is hierin de architectuur waarvoor je de kernel hebt compileerd. Over het algemeen is dit de architectuur van je eigen computer. Meestal is dit i386.
Kopieer de kernel naar een plaats waar de bootloader erbij kan, bijvoorbeeld:
cp /usr/src/linux/arch/<mijn arch>/boot/bzImage /boot/vmlinuz-x.y.z
waarbij je x.y.z vervangt door de versie van de kernel (bijvoorbeeld 2.4.21)
Vergeet vervolgens niet je bootloader bij te werken, zodat deze de nieuwe kernel kan laden tijdens het booten. De meest gebruikte bootloaders zijn LILO en Grub.
Hint: verwijder niet zomaar een oude kernel alvorens de nieuwe getest te hebben. Mocht er namelijk iets fout zijn gegaan dan kun je niet meer booten en zul je met reparatiefloppies of -cdroms aan de slag moeten.
Om de nieuwe kernel te gebruiken, zul je de computer opnieuw moeten starten. Selecteer vervolgens in je bootloader de nieuwe kernel. Indien het werkt ben je klaar, anders is er iets fout gegaan. Wanneer de bootloader de kernel niet kan vinden is de configuratie ervan waarschijnlijk niet goed. Wanneer de kernel wel gevonden wordt, maar niet wil werken, is de kernelconfiguratie waarschijnlijk niet goed geweest voor je computer.
De versie van de huidige kernel kun je opvragen door het volgende commando te geven:
uname -r