|
|
|
 |
| Je eigen kernel compileren |
In deze handleiding ga ik in op het besturen,
compileren en installeren van een kernel. Het is geschreven
voor newbies.
Op- en aanmerkingen omtrent deze tekst kunnen naar mij toegestuurd
worden (contact). |
| |
- Wat is nou eigenlijk de kernel ?
De Linux-kernel is de kern van het besturingssysteem Linux.
Het werkt in principe als een doorgeefluik. Als een programma
met een hardware-apparaat wil communiceren - bv bij het
kopieren van data of het printen van tekst - worden de
aanvragen door het programma aan de kernel gestuurd die
wederom de hardware aanspreekt. Ook wordt het virtueel
geheugen, de hardware-drivers enzoverder door de kernel
geregeld.
Omdat de Linux-kernel een zgn 'monolithische' kernel is,
zitten de hardware- en netwerkdrivers in de kernel zelf.
Met andere woorden: als men een nieuwe driver nodig heeft
zal men de kernel, of de verantwoordelijke kernel-module
opnieuw moeten compileren.
In deze handleiding worden de stappen om een nieuwe kernel
op een PowerPC te compileren stap voor stap uitgelegd.
Waarom moet ik eigenlijk mijn kernel opnieuw compileren
?
Vaak is het niet nodig. De kernel die bij de Linux-distro
wordt meegeleverd is voor een hoop drivers reeds geschikt.
Het wordt pas noodzakelijk als:
- bepaalde apparatuur niet aan te spreken is onder de
huidige kernel, denk aan grafische kaarten, printers,
firewire etc
men stabielere kernels nodig heeft
- software nieuwere kernel vereist
- oude Macs gebruikt worden en men handig moet omgaan
met de beperkte hoeveelheid RAM
- men een hoogbelaste webserver heeft waarvoor modules
zijn te compileren die de webserver sneller maken
Uiteraard zijn er nog andere reden te bedenken om te compileren
echter heb ik hier de meestvoorkomende genoemd.
|
| |
|
Kernelcompilatie: een snelle leidraad
De volgende stappen kunnen alleen worden uitgevoerd als
root. In het voorbeeld wordt uitgegegaan van een compilatie
van een 2.4.x kernel.
Belangrijk: Als men dit
gaat doen is het handig om een 'rescue-CD' bij de hand te
hebben als iets zou misgaan (je vergeet een belangrijke
module te compileren bv) en men zo de oude kernel weer kan
installeren.
Kernels zijn te vinden op kernel.org maar voor de Mac zijn
er ook source kernels te vinden op PenguinPPC.org, ontwikkeld
door BenH of ppc.samba.org,. Overigens zijn op TuxPPC.com
ook pregecomplieerde kernels te vinden, geoptimaliseerd
voor bepaalde types van Macs.
We gaan ervan uit dat de broncode van de BenH-boom gebruikt
gaat worden in het volgende experiment. Als men een officiele
kernel gaat compileren kan men dit stukje overslaan.
cd /usr/src
mkdir benh_kernel
rsync -avz rsync.penguinppc.org::linux-2.4-benh /usr/src/benh_kernel
Rsync is een stukje software die het mogelijk maakt via
internet de laatste kernel te downloaden. Het kan een paar
minuten duren, afhankelijk van de internetverbinding. Alles
wat je vanaf nu moet doen om een kernel bij te werken is
het laatste commande opnieuw uit te voeren voordat je de
kernel opbouwt ('build'). De bron zit namelijk vanaf nu
in de benh_kernel dir. Typ nu
mv /usr/src/linux usr/src/linux/old
ln -sf /usr/src/benh_kernel /usr/src/linux
Dit laatste commando zorgt ervoor dat de nieuwe kernel-bron
wordt 'gelinkt'.
Je kunt nu naar Gereedschap controleren
gaan of lees door als je een officiele kernel wilt compileren.
Tip: Als je een 'Newworld' Mac hebt is het aan te
raden de BenH kernels te gebruiken om problemen te voorkomen.
Het hangt af welke mirror je gebruikt, de bron is meestal
te vinden in /pub/linux/kernel/. Hier vind je heel veel
vX.X (X.X zijn versie-nummers). Afhankelijk van de mirror
kunnen ze wel teruggaan naar de origenele 0.X kernel-series.
Dus de vraag is: welke gaan we nemen ? De huidige stabiele
versie is 2.4, en 2.5 zit in een ontwikkelingsfase. Het
is makkelijk te herkennen of een versie stabiel is of een
zgn development versie is: het tweede getal
is oneven voor development en even voor stabiel.
Als je heel paranoia bent over deze laatste 2.4 versie,
kun je ook de laatste 2.2 nemen.
We gaan ervan uit dat je de 2.4 versie gaat nemen. Ga naar
de v2.4 dir. Je ziet hier heel veel patch-* en linux-* (*
= versie.tar.ext en ext kan gz, bz2). De patch-files kunnen
gebruikt worden om om de bron van de ene naar de andere
versie om te zetten zonder dat je de hele bron hoeft te
downloaden. De linux v2.4 broncode is ongeveer 23 Mb groot,
dus breedbandinternet is gewenst !
Op het moment van het schrijven van deze handleiding is
de stabiele kernel versie 2.4.18 (26 april 2002). In pricipe
zijn alle kernels vanaf 2.4.12 veilig. Dus de beste kernel
is waarschijnlijk nu linux-2.4.18.tar.bz2.
|
| |
|
Voorbereiding voor de opbouw van de kernel
Nu dat de kernel is gedownload moet men het systeem klaarmaken
voor de opbouw van de kernel. Standaard wordt de bron geplaatst
in /usr/src maar zorg ervoor
dat alle handelingen uitgevoerd worden als root ! Voor de
veiligheid maken we eerst een andere dir in /usr/src, bv
linuxtemp. Dus u typt:
mkdir /usr/src/linuxtemp
We gaan in deze handleiding uit dat u weet waar u uw kernel
heeft gedownload. Wij hebben hem in /tmp geplaatst. Cd naar
/tmp en (cd /tmp) en decomprimeer
het bestand:
bunzip2 linux-2.4.18.tar.bz2
(als het een bz2 ofwel een bzip-bestand is)
gzip d linux-2.4.18.tar.gz
(als het een gz ofwel gzip-bestand is)
Als u nu een kijkje neemt in de directory door ls
of ls linux* ziet
u dat de extensie is veranderd. Het is vanaf nu gedecomprimeerd
(linux-2.4.18.tar). We willen nu het .tar-bestand uitpakken
in de /usr/src/linuxtemp dir (we zijn nl nog in de /tmp).
Cd naar /usr/src/linuxtemp en typ:
tar xvf /tmp/linux-2.4.18.tar
Tip: in het algemeen bestaan in de command line veel
manuals over de commandos, zo krijg je met man
tar een handleiding over het tar-commando.
Als alles goed is gegaan geeft een ls
een linux-dir weer. U heeft ook in /usr/src een linux-dir
staan (dit is de huidige kernel). We willen uiteraard niet
dat deze twee kernels door elkaar gehaald worden dus geven
we linux een nieuwe naam, bv linux-2.4.18, dus:
mv linux linux-2.4.18
Bekijk in de /usr/src dir of er niet toevallig iets van
2.4.18 inzit. Als dat zo is, noem die liunux-2.4.18 anders.
Nu willen we de kernel-bron naar de /usr/src dir verplaatsen.
Dit is een makkie, typ in de /usr/src/linuxtemp dir:
mv linux-2.4.18 ..
De twee puntjes vertellen Linux om het hele zooitje een
dir hoger te verplaatsen. Uiteraard had men i.p.v. ..
ook /usr/src kunnen typen.
Uiteindelijk moeten we linux linken met linux-2.4.18.
We doen dit met een zogenaamde symlink. De reden hiervoor
is dat we dan makkelijk kunnen switchen tussen de verschillende
kernels door de symlink weer te herlinken met de oude linux-kernel.
Dit scheelt een hoop verplaats-werk. Er zou een bestaande
symlink met de naam linux reeds kunnen bestaan, daarom hernoemen
we hem maar. Cd naar /usr/src en typ:
mv linux linux.old
De symlink wordt gemaakt door het volgende in te typen:
ln sf /usr/src/linux-2.4.18
/usr/src/linux
Je kunt de link zien als een verkeersbord die naar de linux-2.4.18
dir verwijst.
|
|
Gereedschap controleren
Voordat we de kernel kunnen opbouwen ofwel builden
moeten we ons afvragen of het juiste gereedschap wel binnen
Linux is geinstalleerd. Een redhat gebaseerde distro zoals
YellowDog of Mandrake heeft het rpm-commando.
Dit wordt gebruikt om reeds gecompileerde pakketten te installeren.
Het kan ook gebruikt worden om te zien wat reeds geinstalleerd
is op ons systeem. Typ:
rpm qa | more
We zien nu een lijst met geinstalleerde pakketten. De | vertelt
linux om de output van rpm qa door te geven
aan het more-commando (het pipe-principe). Dit zorgt ervoor
dat je de info scherm voor scherm te zien krijgt in plaats
van een hele lange lijst die van het scherm afrolt. We willen
weten of gcc en make zijn geinstalleerd.
In principe als tijdens de installatie van de distro is gekozen
voor een development-pakket moeten deze commandos aanwezig
zijn. Dit doen we sneller door:
rpm qa | grep gcc
Het grep-commando kijkt of gcc zich bevindt in rpm qa
en laat alleen die regels zien. Heel handig dus !
We moeten ook even een kijkje nemen in de Changes file die
zich in de documentatie van de distro bevindt:
cd /usr/src/linux/documentation (bij
'less Changes')
Zorg ervoor dat alle vereiste software geinstalleerd is en
dat de versies hoger zijn dan de vereiste. In principe voldoet
elke recente distro aan de eisen.
Het laatste wat we moeten doen voordat we de kernel gaan bouwen,
is nagaan of de kernel headers gesymlinkt zijn (zeker in het
geval van redhat distros). Dus:
cd /usr/include
De twee dirs waarin we geinteresseerd zijn, zijn linux en
asm. Deze moeten zijn gelinkt naar /usr/src/linux/include/linux
en /usr/src/linux/include/linux. Echter, het zijn waarschijnlijk
slechts dirs. Om dit te controleren typt u:
ls la | grep linux
ls la | grep asm
Als we iets van linux -> /usr/src/linux/include/linux zien,
dan is alles in orde. Als we alleen linux en niks anders zien,
dan moeten we een symlink maken. Hetzelfde geldt voor asm.
Om dit te doen typt u:
ln sf /usr/src/linux/include/linux /usr/include/linux
(voor de linux headers)
ln sf /usr/src/linux/include/asm-ppc /usr/include/asm
cd /usr/src/linux
Nu zijn we klaar om te bouwen ! Ga door naar Het
bouwen van een kernel. |
| |
|
 |
|