<!doctype linuxdoc system>
<linuxdoc>

<article>
<titlepag>
<title>De Linux Kernel HOWTO</title>
<author><name>Brian Ward, <tt>bri@cs.uchicago.edu</tt>,<newline>
Vertaald door: Ellen Bokhorst, <tt>bokkie@nl.linux.org</tt>
</name></author>
<date>v2.6, 18 mei 2001</date>

<abstract>
Dit is een gedetailleerde gids voor het configureren, compileren en upgraden 
van de kernel, en het oplossen van problemen voor op ix86 gebaseerde systemen.
</abstract>
</titlepag>
<toc>

<sect><heading>Introductie</heading>
<p>
Zou je dit document moeten lezen? Wel als je &eacute;&eacute;n van de volgende
symptomen herkent:

<itemize>
<item> ``Ai! Dit wizzo-46.5.6 package zegt dat het kernel
release 2.8.193 nodig heeft en ik heb nog steeds slechts release 1.0.9!''</item>
<item> Er is een devicedriver in &eacute;&eacute;n van de nieuwere kernels
die je gewoon moet hebben</item>
<item> Je hebt werkelijk geen idee hoe je een kernel compileert</item>
<item> ``Is datgene wat er in de README staat, <it>echt</it> het hele verhaal?''
</item>
<item> Je kwam, je probeerde het, het werkte niet</item>
<item> Je hebt iets nodig om aan mensen te geven die erop blijven hameren
dat je hun kernels voor ze installeert</item>
</itemize>
</p>

<sect1><heading> Lees dit eerst! (Ik meen het)</heading>
<p>
Bij een aantal van de voorbeelden in dit document wordt ervan uitgegaan dat je
GNU <tt>tar</tt>, <tt>find</tt>, en <tt>xargs</tt> hebt. 
Dit zijn standaards; dit zou geen problemen mogen veroorzaken.
Er wordt ook vanuit gegaan dat je bekend bent met de structuur van het
bestandssysteem op je systeem;
als dit niet zo is, is het van groot belang dat je een geschreven kopie
van de uitvoer van het commando
<tt>mount</tt> tijdens de normale systeembewerking bij de hand houdt
(of een listing van <tt>/etc/fstab</tt>, als je het kunt lezen).
Deze informatie is belangrijk, en wijzigt niet, tenzij je je disk opnieuw
partitioneert, een nieuwe disk toevoegt, je systeem opnieuw installeert of
iets dergelijks.</p>

<p>De laatste ``productie'' kernelversie op moment van dit schrijven was
2.2.9, wat betekent dat de verwijzingen en voorbeelden corresponderen met
die release.
Zelfs al probeer ik dit document zo versie-onafhankelijk mogelijk te maken,
de kernel is voortdurend onder ontwikkeling, dus als je een nieuwere release
krijgt, zullen er onontkoombaar wat verschillen zijn.
Nogmaals, dit zou geen belangrijke problemen moeten geven, maar het kan
wat verwarring geven.</p>

<p>Er zijn twee versies van de linux kernel source, ``productie'' en
``development.'' Productie releases zijn de even-minor-genummerde releases;
1.2.x was productie, 2.0.x is productie, als ook 2.2.x. Deze kernels
worden aangemerkt als de meest stabiele kernels, foutvrije versies die
ten tijde van de release beschikbaar zijn.
De development kernels (2.1.x, 2.3.x, enz) zijn bedoeld als kernels om te
testen, voor mensen die bereid zijn om ze uit te testen en het kunnen
kernels zijn die veel fouten bevatten. Je bent gewaarschuwd.</p>
</sect1>

<sect1><heading>Een woord over stijl</heading>
<p>
<tt>Tekst die er zo uitziet</tt> is iets dat op het scherm verschijnt,
een bestandsnaam, of iets dat direct kan worden ingetikt, zoals een 
commando, of opties voor een commando (als je een plain-tekstbestand bekijkt,
ziet het er niet veel anders uit).
Commando's en andere invoer worden vaak tussen aanhalingstekens geplaatst
(met ` '), wat het volgende klassieke leesteken-probleem veroorzaakt:
als een dergelijk item aan het einde van een zin tussen aanhalingstekens
verschijnt, typen mensen vaak een `.' met het commando, omdat de Amerikaanse
aanhalingsstijl aangeeft dat de punt binnen de aanhalingstekens hoort. 
Zelfs met gezond verstand (en helaas wordt hier verondersteld dat degene
met ``gezond verstand'' gewend is aan de zogenoemde Amerikaanse stijl
van aanhalen), zou iemand moeten zeggen het eerst van het leesteken te ontdoen,
toch denken veel mensen daar gewoon niet aan, dus ik zal het
in dergelijke gevallen buiten de aanhalingstekens plaatsen.
Met andere woorden, als er wordt aangegeven dat je 
``<tt>make config</tt>'' zou moeten typen,
zal ik `<tt>make config</tt>' schrijven en niet `<tt>make config</tt>.'
</p>
</sect1>
</sect>

 <sect><heading>Snelle stappen - Kernelcompilatie</heading>
 <p>
 Deze sectie is geschreven door
        <htmlurl url="mailto:alavoor@yahoo.com"
              name="Al Dev (alavoor@yahoo.com)">
 
De laatste versie van deze sectie is te vinden op 
<url url="http://www.aldev.8m.com"> en klik op
"Quick Steps to recompile linux kernel". Mirror sites zijn te vinden op -
 <url url="http://aldev.webjump.com">,
 <url name="angelfire" url="http://www.angelfire.com/country/aldev0">,
 <url name="geocities" url="http://www.geocities.com/alavoor/index.html">,
 <url name="virtualave" url="http://aldev0.virtualave.net">,
 <url name="50megs" url="http://aldev0.50megs.com">,
 <url name="theglobe" url="http://members.theglobe.com/aldev1/index.html">,
 <url name="NBCi" url="http://members.nbci.com/alavoor">,
 <url name="Terrashare" url="http://aldev.terrashare.com">,
 <url name="Fortunecity" url="http://members.fortunecity.com/aldev">,
 <url name="Freewebsites" url="http://aldev.freewebsites.com">,
 <url name="Tripod" url="http://members.tripod.lycos.com/aldev">,
 <url name="Spree" url="http://members.spree.com/technology/aldev">,
 <url name="Escalix" url="http://www.escalix.com/freepage/aldev">,
 <url name="Httpcity" url="http://www.httpcity.com/aldev/index.html">,
 <url name="Freeservers" url="http://aldev.freeservers.com">.
 
Deze sites bieden <bf>heel veel linux fraais</bf> en tips.

Een kopie van de bovenstaande website is hier gereproduceerd -

Het opnieuw compileren van de kernel is nodig om de kernel zo klein mogelijk
te maken, wat zal resulteren in een SNELLER besturingssysteem. Het moet
ook gebeuren als je ondersteuning wilt voor enige nieuwe devices.
<bf>Noot: </bf> Hieronder duidt 'bash#' op de bash-prompt, je typt de
opdrachten die na de 'bash#' prompt staan. De hieronderstaande
opdrachten zijn onder RedHat Linux getest, maar ze zouden tevens met
minimale wijzigingen onder andere distributies moeten werken.
 
<enum>
<item> Noot: 
Er kunnen meerdere kernelimages op je systeem voorkomen. Door de hieronder
staande stappen op te volgen, overschrijf je of beschadig je geen 
bestaande kernel. Deze stappen zijn <bf>zeer veilig</bf> en je huidige
kernel blijft intact en zal niet worden aangeroerd.</item>

<item> Log bij al deze stappen in als 'root'.
Mount de Redhat linux cdrom en installeer de linux kernelsource rpm
<code>
bash$ su - root
bash# cd /mnt/cdrom/RedHat/RPMS 
bash# rpm -i    kernel-headers*.rpm 
bash# rpm -i    kernel-source*.rpm 
bash# rpm -i dev86*.rpm   
bash# rpm -i bin86*.rpm   
</code>
(De bin86*.rpm en 'as86' is alleen nodig voor <bf>OUDERE Linux</bf> systemen
zoals redhat 5.x. Neem de Intel assembler 'as86' opdracht uit
dev86*.rpm op de cdrom of vanaf
<url url="http://rpmfind.net/linux/RPM/mandrake/7.1/Mandrake/RPMS/bin86-0.4-12mdk.i586.html">
, <url url="http://rpmfind.net/linux/RPM/kondara/jirai/i586/bin86-0.4-8k.i586.html">
).
</item>

<item> Start X-window op met 'startx'. 
<code>
bash# man startx
bash# startx
bash# cd /usr/src/linux 
bash# make xconfig 
</code>
De <bf>"make xconfig"</bf> komt met een gebruikersvriendelijke GUI interface!
Maak <bf>GEEN</bf> gebruik van 'make config' want dit is een opdrachtregel
optie (gebruik dit <bf>ALLEEN</bf> als je X-window niet kunt uitvoeren).
Een beter alternatief op de opdracht 'make config' is 
<bf>'make menuconfig'</bf> waarmee je een gebruikersvriendelijke
op tekst gebaseerde ncurses interface krijgt. Een aantal mensen geven de
voorkeur aan 'make menuconfig' boven 'make xconfig'. Mijn persoonlijke
voorkeur - wanneer ik X-window niet uit kan voeren, gebruik ik 'make
menuconfig'.
Je kunt het configuratiebestand laden van
<it>/usr/src/linux/.config</it> (punt config file. Let op de punt voor
config).
</item>

<item> Binnen 'make xconfig' moet je het volgende doen om problemen
te voorkomen -
<itemize>
 <item> Selecteer het juiste CPU type - Pentium 3, AMD K6, Cyrix, Pentium 4, 
Intel 386, DEC Alpha, PowerPC anders zal de kernel niet booten!!</item>
 <item> Kies voor SMP - of een enkele CPU of meerdere CPU's</item>
 <item> Filesystems - Selecteer Windows95 Vfat, MSDOS, NTFS als onderdeel
van de kernel en niet als laadbare modules.</item>
 <item> Activeer de ondersteuning voor laadbare kernelmodules!
Met deze optie kun je device drivers op een draaiend linux systeem 
dynamisch laden en uit het geheugen verwijderen.
Zie de volgende manpages
<code>
bash# man lsmod
bash# man insmod
bash# man rmmod
bash# man depmod
bash# man modprobe
</code></item>
</itemize>
</item>
<item>Save en Exit "make xconfig". 
Alle opties die je hebt geselecteerd zullen nu worden opgeslagen in het
configuratiebestand
<it>/usr/src/linux/.config</it> (punt config file).
En voer nu uit:
<code>
bash# make dep
bash# make clean
</code>
</item>
<item> 
Lees het volgende bestand 
(om kennis op te doen over het bouwen van een kernel. Tip: gebruik de
kleureneditor
<url name="gvim" url="http://metalab.unc.edu/LDP/HOWTO/Vim-HOWTO.html">
voor een betere leesbaarheid.
<code>
bash# gvim -R   /usr/src/linux/arch/i386/config.in 
bash# man less 
bash# less   /usr/src/linux/arch/i386/config.in 
Typ 'h' voor hulp en druk voor het navigeren op i, j, k, l, h of 
de pijltjestoets, page up/down toetsen.
</code>
</item>
<item> Geef nu de opdracht make:
<code>
	bash# cd /usr/src/linux
	bash# man nohup
 	bash# nohup make bzImage &  
 	bash# tail -f nohup.out     (.... to monitor the progress) 
Hiermee zal de kernel worden neergezet in 
/usr/src/linux/arch/i386/boot/bzImage 
	bash# man tail 
</code>
</item>
<item> Na een succesvolle bzImage, kopieer je de kernelimage naar de
/boot directory. Je moet de nieuwe kernelimage naar de /boot directory
kopi&euml;ren, anders zal de nieuwe kernel <bf>NIET</bf> booten.
En lees dan de manual page over lilo
(zie ook <url url="http://www.linuxdoc.org/HOWTO/LILO-crash-rescue-HOWTO.html">)
en zie het voorbeeldbestand <ref id="liloconf" name="lilo.conf">.
Geef altijd een datumextensie aan de bestandsnaam, omdat het je vertelt
wanneer je de kernel bouwde. Dit wordt hieronder aangegeven:
<code>
bash# cp /usr/src/linux/arch/i386/boot/bzImage     /boot/bzImage.myker.26mar2001
bash# man lilo
bash# man lilo.conf
Wijzig het bestand /etc/lilo.conf en plaats daar de volgende regels in:
	image=/boot/bzImage.myker.26mar2001 
	label=myker
 	root=/dev/hda1 
 	read-only 
Je kunt de devicenaam voro 'root=' controleren met de opdracht:
 	bash# df   / 
 </code>
</item> 
 <item> Start nu
 <code>
 bash# lilo 
 bash# lilo -q 
 </code>
Je moet lilo iedere keer dat je een nieuwe bzImage aanmaakt, opnieuw opstarten,
zelfs als zou het record 'myker' reeds
bestaan. 
</item>

<item> Start de machine opnieuw op en achter lilo druk je de tab toets in
en typt 'myker'. Als het boot dan heb je goed werk verricht! 
Selecteer anders achter de lilo je oude kernel, boot en begin helemaal
opnieuw. Je oude kernel
<bf>is nog steeds INTACT en VEILIG gesteld</bf> 
in stel <it>/boot/vmlinuz-2.0.34-0.6</it>
</item>

 <item> Laadbare modules:
 Zoek naar de insmod opdracht die zeer frequent wordt gebruikt voor het
laden van de modules.
 <code>
 bash# man insmod
 bash# insmod 
 bash# rpm -i /mnt/cdrom/Redhat/RPMS/modutils*.rpm
 </code>
 
De stap hieronder is wellicht niet nodig, maar slechts nodig voor
<bf>NOODGEVALLEN</bf> wanneer je /lib/modules bestanden zijn beschadigd.
Wanneer je reeds een /lib/modules directory hebt en in het geval je de
bestanden wilt vervangen, gebruik dan de --force om het package te
vervangen en selecteer de van toepassing zijnde cpu architectuur.
 
Voor nieuwe versies van linux redhat linux 6.0 en latere versies zijn de
kernelmodules opgenomen in kernel-2.2*.rpm. Installeer de laadbare modules
en de kernel met
 <code>
Hiermee krijg je een reeds ge&iuml;nstalleerd package te zien.
 bash# rpm -qa | grep -i kernel
 	
 bash# rpm -U --force  /mnt/cdrom/Redhat/RPMS/kernel-2.2.14-5.0.i686.rpm
 (or)
 bash# rpm -U --force  /mnt/cdrom/Redhat/RPMS/kernel-2.2.14-5.0.i586.rpm
 (or)
 bash# rpm -U --force  /mnt/cdrom/Redhat/RPMS/kernel-2.2.14-5.0.i386.rpm
 </code>
 
Dit geldt alleen voor oude versies van redhat linux 5.2 en eerdere versies.
Boot de nieuwe kernel en installeer de laadbare modules vanaf de
RedHat Linux "contrib" cdrom 
 <code>
bash# rpm -i /mnt/cdrom/contrib/kernel-modules*.rpm 
....(Voor oude linux systemen waarop insmod niet is voorge&iuml;nstalleerd)
 </code>
</item>

<item>Deze stap is <bf>ALLEEN</bf> nodig als je een nieuwe versie van
de kernelsource hebt gedownload.
Laadbare modules zijn te vinden in /lib/modules. 
<code>
bash# cd /usr/src/linux
bash# make modules
bash# make modules_install
</code>
</item>

<item>Als je nieuwe kernel 'myker' boot en correct functioneert, dan kun
je de bootdisk aanmaken. Doe een lege diskette in het diskettestation en:
<code>
bash# cd /usr/src/linux
bash# make bzdisk
Zie tevens mkbootdisk -
bash# rpm -i mkbootdisk*.rpm
bash# man mkbootdisk
</code>
</item>
</enum>
</p>

<sect1><heading>Oplossen van veelvoorkomende fouten</heading>
<p>
De volgende fouten worden zeer frequent door nieuwe gebruikers gemaakt:
 
Als je nieuwe kernel niet boot en je krijgt:
 <code>
 Warning: unable to open an initial console
 Kernel panic: no init found. Try passing init= option to kernel
</code>
Het probleem is hier dat je de "root=" parameter <bf>NIET</bf> juist opgaf
in /etc/lilo.conf. In mijn geval maakte ik gebruik van root=/dev/hda1
met daarop de root partitie "/". Je moet naar het juiste rootdevice verwijzen
in lilo.conf. Dit kan bv iets als /dev/hdb2 of /dev/hda7 zijn.
 
De kernel zoekt naar de init opdracht welke is te vinden in /sbin/init.
En de directory /sbin komt voor op de rootpartitie.
Zie voor details:
 <code>
 bash# man init
 </code>
</p>
</sect1>

 <sect1><heading>Voorbeeld lilo.conf <label id="liloconf"></heading>
 <p>
Hieronder wordt een voorbeeldbestand van /etc/lilo.conf gegeven. 
Volg de naamconventies zoals ker2217 (voor kernel 2.2.17), ker2214 
(voor kernel 2.2.14).
Er kunnen meerdere kernelimages op hetzelfde /boot systeem voorkomen.
Op mijn machine heb ik iets als:
 <code>
 boot=/dev/hda
 map=/boot/map
 install=/boot/boot.b
 prompt
 timeout=50
 default=firewall
 
 image=/boot/vmlinuz-2.2.14-5.0
 	label=ker2214
 	read-only
 	root=/dev/hda9
 
 image=/boot/vmlinuz-2.2.17-14
 	label=ker2217
 	read-only
 	root=/dev/hda9
 
 #image=/usr/src/linux/arch/i386/boot/bzImage 
 #	label=myker 
 #	root=/dev/hda7
 #	read-only 
 
 image=/boot/bzImage.myker.11feb2001
 	label=myker11feb 
 	root=/dev/hda9
 	read-only 
 
 image=/boot/bzImage.myker.01jan2001
 	label=myker01jan 
 	root=/dev/hda9
 	read-only 
 
 image=/boot/bzImage.myker-firewall.16mar2001
 	label=firewall 
 	root=/dev/hda9
 	read-only 
 </code>
</p>
</sect1>
</sect>

<sect><heading>Belangrijke vragen en de antwoorden daarop</heading>

<sect1><heading>Wat doet de kernel, eigenlijk?</heading>
<p>
De Unix kernel gedraagt zich als een bemiddelaar voor je programma's en
je hardware. Als eerste doet het (of regelt het) voor alle draaiende 
programma's het geheugenbeheer (processen), en zorgt het ervoor dat ze allen een
eerlijk (of oneerlijk, als je dat wenst) deel van de processor cycli
krijgen. Bovendien voorziet het in een tamelijk fraaie overdraagbare 
interface voor programma's om met je hardware te communiceren.</p>

<p>
De werking van de kernel beslaat beslist meer dan dat, maar dit zijn
de belangrijkste basisfuncties.</p>
</sect1>

<sect1><heading>Waarom zou ik mijn kernel willen upgraden?</heading>
<p>
Nieuwere kernels bieden over het algemeen de mogelijkheid om te kunnen
communiceren met meer soorten hardware
(dat wil zeggen dat ze meer devicedrivers hebben), het kan zijn dat ze een
beter procesbeheer hebben, ze kunnen sneller draaien dan de oudere versie, ze
zouden stabieler kunnen zijn dan de oudere versies, en
ze herstellen domme fouten in de oudere versies.
De meeste mensen upgraden kernels omdat ze de devicedrivers en de 
bug fixes willen.
</p>
</sect1>

<sect1><heading>Welke soort hardware ondersteunen de nieuwere kernels?</heading>

<p>Zie de Hardware-HOWTO. Als alternatief kun je het bestand
`<tt>config.in</tt>' in de linux source bekijken, of er gewoon achterkomen
als je `<tt>make config</tt>' uitprobeert.
Hierdoor wordt alle door de standaard kerneldistributie ondersteunde hardware
getoond, maar niet alles dat door linux wordt ondersteund;
veel algemene devicedrivers (zoals de PCMCIA drivers en een aantal tape 
drivers) bestaan uit laadbare modules die apart worden beheerd en 
gedistribueerd.
</p>
</sect1>

<sect1><heading>Welke versie van gcc en libc heb ik nodig?</heading>
<p>
Linus beveelt in het bestand <tt>README</tt>, dat bij de linux source 
is inbegrepen, een gcc-versie aan.
Als je deze versie niet hebt, zou de documentatie van de aanbevolen versie
van gcc aan moeten geven of je je libc moet upgraden.
Dit is geen moeilijke procedure, maar het is belangrijk de instructies op
te volgen.
</p>
</sect1>

<sect1><heading>Wat is een laadbare module?</heading>

<p>Dit zijn delen van de kernelcode die niet direct in de kernel zijn
gelinkt (ingevoegd). Ze worden apart gecompileerd, en je kunt ze
op bijna ieder moment in de draaiende kernel invoegen en verwijderen.
Vanwege de flexibiliteit ervan, is dit nu de te verkiezen manier
om bepaalde kernelfaciliteiten te coderen. Veel van de populaire devicedrivers,
zoals de PCMCIA drivers en de QIC-80/40 tapedriver, zijn laadbare modules.</p>
</sect1>

<sect1><heading>Hoeveel diskruimte heb ik nodig?</heading>
<p>

Dat is afhankelijk van je afzonderlijke systeemconfiguratie. 
Ten eerste is de gecomprimeerde linux-source van versie 2.2.9 
bijna 14 megabytes groot. Veel sites houden dit zelfs na het uitpakken.
Ongecomprimeerd en gebouwd met een gemiddelde configuratie, neemt het nog
eens 67 MB in beslag.
</p>
</sect1>

<sect1><heading>Hoeveel tijd neemt het in beslag?</heading>
<p>
Met nieuwere computers, neemt de compilatie aanmerkelijk minder tijd in beslag
dan met oudere computers; een AMD K6-2/300 met een snelle harddisk kan 
een 2.2.x kernel in ongeveer vier minuten compileren. 
Als je van plan bent om te gaan compileren, wees dan bij oude Pentiums, 
486'rs, en 386'rs voorbereid dat je zult moeten
wachten, mogelijk wel uren, dagen..</p>
<p>
Als je je daar zorgen over maakt, en je hebt een snellere computer in
de buurt om op te compileren, kun je op de snelle computers bouwen
(ervan uitgaande dat je het de juiste parameters meegeeft, dat je
ulilities up-to-date zijn, enzovoort), en vervolgens de kernel-image
naar de langzamere computer transporteren.</p>
</sect1>
</sect>

<sect><heading>Hoe de kernel feitelijk te configureren</heading>
<sect1><heading>Verkrijgen van de source</heading>
<p>

Je kunt de source via anonieme ftp verkrijgen vanaf <tt>ftp.kernel.org</tt> in
<tt>/pub/linux/kernel/vx.y</tt>, waar <tt>x.y</tt> voor de versie staat 
(bv 2.2), en zoals eerder genoemd, die met een oneven nummer eindigen,
zijn development releases en kunnen onstabiel zijn.
Ze zijn vaak gelabeld als <tt>linux-x.y.z.tar.gz</tt>, waarbij <tt>x.y.z </tt>
voor het versienummer staat. Op de sites staan vaak ook bestanden met het
toevoegsel <tt>.bz2</tt>, deze zijn met bzip2 gecomprimeerd 
(ze zullen kleiner zijn en nemen bij het transporteren minder tijd in beslag).
</p>
<p>
Je kunt het beste <tt>ftp.xx.kernel.org</tt> gebruiken, waar <tt>xx</tt> 
je landcode voorstelt;
voorbeelden zijn <tt>ftp.at.kernel.org</tt> voor Australi&euml;,
en <tt>ftp.us.kernel.org</tt> voor de United States.</p>
</sect1>

<sect1><heading>Het uitpakken van de source</heading>
<p>
Log in als, of <tt>su</tt> naar, `<tt>root</tt>', en <tt>cd</tt> naar
<tt>/usr/src</tt>.
Als je de kernelsource installeerde toen je linux voor het eerst installeerde
(zoals de meeste doen), zal er reeds een directory met de naam
`<tt>linux</tt>' voorkomen, die de gehele oude sourcetree bevat.
Als je de diskruimte hebt en het veilig wilt spelen, bewaar die directory
dan. Het is een goed idee om er achter te komen welke versie nu
op je systeem draait en de directory overeenkomstig te hernoemen.
Het commando `<tt>uname -r</tt>' drukt de huidige kernelversie af.
Daarom zou je (met `<tt>mv</tt>') `<tt>linux</tt>' in `<tt>linux-1.0.9</tt>'
kunnen hernoemen, als `<tt>uname -r</tt> `<tt>1.0.9</tt>' aangeeft.
Als je je daar niet zo om bekommert, verwijder dan gewoon de volledige
directory. Zorg er in ieder geval voor dat er geen `<tt>linux</tt>' directory
in <tt>/usr/src</tt> voorkomt, voordat je de volledige sourcecode uitpakt.
</p>

<p>Pak nu in <tt>/usr/src</tt> de source uit met
`<tt>tar zxpvf linux-x.y.z.tar.gz</tt>'
(als je slechts een <tt>.tar</tt> bestand zonder <tt>.gz</tt> aan het einde
hebt, werkt `<tt>tar xpvf linux-x.y.z.tar</tt>').
De inhoud van de source zal voorbij vliegen. Als 't klaar is, dan zal er
een nieuwe `<tt>linux</tt>' directory in <tt>/usr/src</tt> voorkomen. 
<tt>cd</tt> naar
<tt>linux</tt> en lees het bestand <tt>README</tt> door.
Er zal een sectie in staan met het label `<tt>INSTALLING the kernel</tt>'.
Voer de van toepassing zijnde instructies uit, symbolische links die op
hun plaats zouden moeten staan, verwijdering van oude <tt>.o</tt> bestanden,
enz.
</p>
<p>Als je een <tt>.bz2</tt> bestand en het bzip2 programma hebt (lees erover op
<tt>http://www.muraroa.demon.co.uk/</tt>), doe dan het volgende:

<verb>
     bz2cat linux-x.y.z.tar.bz2 | tar xvf -
</verb>
</p>
</sect1>

<sect1><heading>Configureren van de kernel</heading>
<p>
    Opmerking: Een deel hiervan is een herhaling/opheldering van een
    vergelijkbare sectie in het <tt>README</tt> bestand van Linux.
</p>

<p>Het commando `<tt>make config</tt>' als je je in <tt>/usr/src/linux</tt> 
bevindt, start een configuratiescript, welke je vele vragen stelt.
Het vereist bash, dus verifieer dat bash zich in
<tt>/bin/bash</tt>, <tt>/bin/sh</tt>, of <tt>&dollar;BASH</tt> bevindt.
</p>

<p>Er zijn echter wat plezieriger alternatieven voor `<tt>make
config</tt>' en het kan heel goed zijn dat je ze makkelijker en comfortabeler
in het gebruik vindt.
`<tt>make menuconfig</tt>' is waarschijnlijk de meest gebruikte. Wat je ook
kiest, het is het beste als je bekend raakt met de interface, omdat het heel
goed mogelijk is dat je eerder terug zult keren, dan je zult denken.
Voor degene die ``X draaien,'' kun je `<tt>make xconfig</tt>' proberen,
als je Tk hebt ge&iuml;nstalleerd `<tt>make menuconfig</tt>' is voor degene
die (n)curses hebben en de voorkeur zouden geven aan een op tekst gebaseerd
menu.  Deze interfaces hebben een nogal
duidelijk voordeel: Als je het verprutst en tijdens de configuratie 
een verkeerde keuze maakt, is het heel eenvoudig om terug te gaan en het
te corrigeren.
</p>

<p>De configuratie-opties zullen met `<tt>make menuconfig</tt>' en
<tt>make xconfig</tt>' in hierarchi&euml;n verschijnen.
</p>

<p>Je bent er klaar voor om de vragen te gaan beantwoorden, 
gewoonlijk met `<tt>y</tt>' (yes) of
`<tt>n</tt>' (no). Device drivers hebben typisch een `<tt>m</tt>' optie.
Dit betekent ``module,'' wat inhoudt dat het systeem ze niet direct in de
kernel zal compileren, maar als een laadbare module.
Een komischer manier om het te beschrijven is als ``misschien.'' Een aantal
van de vanzelfsprekende en niet-kritieke opties is hier niet beschreven; 
zie de sectie ``Andere configuratie-opties'' voor beknopte beschrijvingen 
van een paar andere opties.
Met `<tt>make menuconfig</tt>', verwissel je met de spatiebalk van selectie.
</p>

<p>In 2.0.x en later, is er een `?' optie, die voorziet in een korte
beschrijving van de configuratieparameter.
Die informatie is waarschijnlijk het meest up-to-date. 
Hier is een opsomming van een aantal van de belangrijke faciliteiten,
in welke hierarchie ze staan, en met een korte beschrijving.
</p>

<sect2><heading>Kernel math emulatie (Processor type and facilities)</heading>
<p>
Als je geen math processor hebt (je hebt een minimale 386 of
486SX), moet je hier met `<tt>y</tt>' antwoorden. 
Als je een coprocessor hebt en je zegt dan toch
`<tt>y</tt>', maak je er dan niet te veel zorgen om, de coprocessor wordt
nog steeds gebruikt en de emulatie wordt genegeerd. 
Voor iedere moderne computer, zal het antwoord `no' zijn, maar maak je
geen zorgen als je hier per ongeluk `yes' hebt geantwoord;
als het niet nodig is, wordt het niet gebruikt.</p>
</sect2>

<sect2><heading>Enhanced (MFM/RLL) disk en IDE disk/cdrom support (Block Devices)</heading>
<p>

Je zult de ondersteuning waarschijnlijk nodig hebben; het betekent dat de 
kernel standaard PC harddisks, die de meeste mensen hebben, zal ondersteunen.
Bij deze driver zijn SCSI-drivers niet inbegrepen; die komen later 
in de configuratie aan de orde.</p>
<p>
Er zal dan worden gevraagd naar de ``old disk-only'' en ``new IDE'' drivers.
Je zult er hier &eacute;&eacute;n van willen kiezen; het belangrijkste 
verschil is dat de oude driver alleen twee disks op een enkele interface 
ondersteunt, en de nieuwe een tweede interface en IDE/ATAPI cdromdrives
ondersteunt. De nieuwe driver is 4k groter dan de oude en 
is, naar men mag aannemen, ook ``verbeterd,'' wat betekent dat het afgezien van
een verschillend aantal bevattende fouten, het je diskperformance kan
verbeteren, vooral als je nieuwere (EIDE-type) hardware hebt.</p>
</sect2>

<sect2><heading>Netwerkondersteuning (General Setup)</heading>

<p>In principe, zou je hier slechts `<tt>y</tt>' antwoorden, als je 
computer zich in een netwerk bevindt, zoals het internet, of je gebruik
wilt maken van SLIP, PPP, term, enz. om in te bellen voor toegang tot het
internet. Je zou hier echter `<tt>y</tt>' moeten antwoorden, 
want veel packages (zoals het X-windowsysteem)
vereisen netwerkondersteuning, ook al is je computer niet op een echt
netwerk aangesloten. Later zal je worden gevraagd of je ondersteuning
wilt voor een TCP/IP netwerk; antwoord hier nogmaals
`<tt>y</tt>', als je er niet helemaal zeker van bent.</p>
</sect2>

<sect2><heading>System V IPC (General Setup)</heading>
<p>
&Eacute;&eacute;n van de beste definities van IPC (Interprocess Communication) 
staat in de verklarende woordenlijst van het Perl boek. 
Het is niet verwonderlijk dat een aantal Perl programmeurs het gebruikt
om processen met elkaar te laten communiceren, evenals vele andere
packages (in 't bijzonder DOOM), dus het is geen goed idee om hier 
<tt>n</tt> op te antwoorden, tenzij je precies weet wat je aan het doen bent.
</p>
</sect2>

<sect2><heading>Processor familie (Processor type en faciliteiten)</heading>

<p>
(in oudere kernels: Gebruik de -m486 flag voor 486-specifieke optimalisaties)
</p>

<p>Volgens traditie werden hierdoor bepaalde optimalisaties voor een bepaalde
processor meegecompileerd; de kernels draaide prima op andere chips, maar
de kernel was misschien wat groter. 
In nieuwere kernels geldt dit echter niet meer, dus je zou op moeten geven
voor welke processor je de kernel aan het compileren bent.
Een ``386'' kernel werkt met alle computers.
</p>
</sect2>

<sect2><heading>SCSI-support</heading>

<p>Als je SCSI-devices hebt, antwoord je `<tt>y</tt>'. Er zal je worden gevraagd
naar meer informatie, zoals ondersteuning voor CD-ROM, disks, en wat voor soort
SCSI-adapter je hebt. Zie de SCSI-HOWTO voor uitgebreidere details.
</p>
</sect2>

<sect2><heading>Network device support</heading>

<p>Als je een netwerkkaart hebt, of je zou SLIP, PPP of een parallelle
poortadapter wilen gebruiken om verbinding te maken met het Internet,
antwoord je `<tt>y</tt>'. Het configuratiescript zal je vragen naar de soort
kaart die je hebt, en welk protocol moet worden gebruikt.
</p>
</sect2>

<sect2><heading>Filesystems</heading>
<p>

Het configureerscript vraagt je vervolgens of je ondersteuning voor
de volgende bestandssystemen wilt:
</p>

<p>Standard (minix) - Nieuwere distributies maken geen minix bestandssystemen
aan, en veel mensen gebruiken het niet, maar het kan nog steeds een goed
idee zijn om deze te configureren.
Een aantal ``rescue disk'' programma's maakt er gebruik van, en steeds
meer diskettes kunnen een minix bestandssysteem hebben,
aangezien het minix bestandssysteem minder moeizaam op een diskette
is te gebruiken.
</p>

<p>Second extended - Dit is het standaard Linux bestandssysteem. Het is bijna
zeker dat je er hier &eacute;&eacute;n van hebt, en 
`<tt>y</tt>' moet antwoorden.
</p>

<p>msdos - Als je je MS-DOS harddisk partities wilt gebruiken, of MS-DOS
geformatteerde diskettes wilt gebruiken, antwoord je `<tt>y</tt>'.
</p>

<p>Er zijn diverse andere externe soorten besturingssystemen beschikbaar.
</p>

<p>/proc - (idee van Bell Labs, denk ik). Men maakt geen proc bestandssysteem
op een disk;
dit is een bestandssysteeminterface naar de kernel en de processen.
Veel programma's die processen weergeven (zoals `<tt>ps</tt>') maken er
gebruik van. Probeer eens een keer
`<tt>cat /proc/meminfo</tt>' of `<tt>cat /proc/devices</tt>'.
Een aantal shells (rc, in het bijzonder) gebruikt voor I/O 
<tt>/proc/self/fd</tt> (op andere systemen bekend als <tt>/dev/fd</tt>).
Je zou hier bijna zeker `<tt>y</tt>' moeten antwoorden;
veel belangrijke linux tools zijn ervan afhankelijk.
</p>

<p>NFS - Als je computer op een netwerk is aangesloten, en je wilt
bestandssystemen gebruiken die voorkomen op andere systemen met NFS,
antwoord dan `<tt>y</tt>'.
</p>

<p>ISO9660 - Wordt op de meeste CD-ROM's aangetroffen. Als je een CD-ROM 
drive hebt en je wilt het onder Linux gebruiken, geef je als
antwoord `<tt>y</tt>'.
</p>


<sect3><heading>Maar ik weet niet welke bestandssystemen ik nodig heb!</heading>
<p>

Ok, typ `<tt>mount</tt>'. De uitvoer zal er ongeveer zo uitzien:
</p>
<p>
<tscreen><verb>
    blah# mount
    /dev/hda1 on / type ext2 (defaults)
    /dev/hda3 on /usr type ext2 (defaults)
    none on /proc type proc (defaults)
    /dev/fd0 on /mnt type msdos (defaults)
</verb></tscreen>
</p>

<p>Bekijk iedere regel; het woord naast `<tt>type</tt>' is het type 
bestandssysteem.
In dit voorbeeld zijn mijn <tt>/</tt> en <tt>/usr</tt> bestandssystemen
second extended, Ik gebruik <tt>/proc</tt>, en er is een diskette gemount
door gebruik te maken van het msdos-bestandssysteem.
</p>
<p>Je kunt `<tt>cat /proc/filesystems</tt>' proberen, als je <tt>/proc</tt>
thans is geactiveerd; je huidige kernel's bestandssystemen zullen worden
weergegeven.</p>
<p>
De configuratie van zeldzaam gebruikte, niet kritieke bestandssystemen
kunnen een bloat kernel veroorzaken; zie de sectie over modules voor een 
manier om dit te voorkomen en de sectie
``Valkuilen'' over waarom een bloat kernel niet wenselijk is.
</p>
</sect3>
</sect2>

<sect2><heading>Character devices</heading>
<p>

Hier activeer je de drivers voor je printer (dat wil zeggen, parallelle
printer), busmouse, PS/2 mouse (veel notebooks gebruiken het PS/2 
mouse protocol voor hun ingebouwde trackballs), een aantal tapedrives, 
en andere ``character'' devices. Antwoord `<tt>y</tt>' als dit van
toepassing is.
</p>

<p>Opmerking: <tt>gpm</tt> is een programma waarmee
het gebruik van de muis buiten het X-windowsysteem voor knippen en plakken
tussen virtuele consoles is toegestaan.
Het is echt heel aardig als je een seri&euml;le muis hebt, omdat
het goed naast X kan voortbestaan, maar je hebt voor andere muizen
speciale foefjes nodig.
</p>
</sect2>

<sect2><heading>Sound</heading>
<p>

Als je een groot verlangen voelt om <tt>geklap en geblaf</tt> te horen, 
antwoord dan `<tt>y</tt>',
en je kunt het configuratieprogramma alles over je geluidskaart laten weten.
(Een opmerking over de configuratie van een geluidskaart: 
als je wordt gevraagd of je de volledige versie van de driver wilt
installeren, kun je hier
`<tt>n</tt>' antwoorden en wat kernelgeheugen besparen door alleen
de faciliteiten eruit te pikken die je nodig acht).
</p>

<p>Als de geluidsondersteuning je menens is, bekijk dan eens de 
vrij verkrijgbare drivers bij <tt>http://www.linux.org.uk/OSS/</tt> en 
het commerci&euml;le Open Sound System bij <tt>http://www.opensound.com/</tt>.
</p>
</sect2>

<sect2><heading>Andere configuratie-opties</heading>
<p>
Niet alle configuratie-opties worden hier opgesomd, omdat ze te vaak
wijzigen of tamelijk vanzelfsprekend zijn (bijvoorbeeld, 3Com 3C509 
ondersteuning voor het compileren van de devicedriver voor deze 
speciale ethernetkaart).
Er bestaat een tamelijk uitgebreide lijst met opties (plus een manier om
ze in het <tt>Configure</tt> script te plaatsen) met inzet gestart en
beheerd door Axel Boldt (<tt>boldt@math.ucsb.edu</tt>) en het is de online-
help. Het is sinds versie 2.0 ook beschikbaar als &eacute;&eacute;n 
groot bestand als de
<tt>Documentation/Configure.help</tt> in je Linux kernel source tree.
</p>
</sect2>

<sect2><heading>Kernel hacking</heading>
<p>

>Vanuit het README bestand van Linus:

    de ``kernel hacking'' configuratie details resulteren meestal in
    een grotere of langzamere kernel (of beiden), en kan de kernel zelfs
    minder stabiel maken door een aantal routines te configureren die actief
    probeert slechte code aan de oppervlakte te laten komen om kernelproblemen
    op te sporen (kmalloc()). Dus je zou waarschijnlijk `n' moeten 
    antwoorden op de vragen voor een ``production'' kernel.
</p>
</sect2>
</sect1>

<sect1><heading>Wat nu? (De Makefile)</heading>
<p>

Nadat je de configuratie hebt be&euml;indigd, krijg je een bericht dat je
kernel is geconfigureerd en de melding  
``check the top-level <tt>Makefile</tt> for additional configuration,'' 
enz.</p>

<p>Dus bekijk <tt>Makefile</tt>. Je zult het waarschijnlijk niet hoeven
wijzigen, maar het kan nooit kwaad het te bekijken. 
Je kunt de opties ervan ook wijzigen met het
commando `<tt>rdev</tt>' zodra de nieuwe kernel op z'n plaats staat.
Als het je ontgaat als je het bestand bekijkt, maak je er dan geen zorgen om.
</p>
</sect1>
</sect>

<sect><heading>Compileren van de kernel</heading>

<sect1><heading>Opschonen en afhankelijkheden</heading>
<p>

Als het configuratiescript eindigt, geeft het ook aan een `<tt>make dep</tt>'
en (mogelijk) `<tt>clean</tt>' uit te voeren.
Dus, doe de `<tt>make dep</tt>'. Dit verzekert je dat alle
afhankelijkheden, zoals de include bestanden, op hun plaats staan. 
Het duurt niet lang, tenzij je computer om te beginnen nogal langzaam is.
Je zou voor oudere versies van de kernel een `<tt>make clean</tt> 
moeten doen, als je klaar bent.
Hiermee worden alle object-bestanden en wat andere zaken verwijderd die door
een oude versie achter worden gelaten. Vergeet deze stap in ieder geval
<it>niet</it> voordat je een poging gaat ondernemen om een kernel te
hercompileren.
</p>
</sect1>

<sect1><heading>Compileertijd</heading>
<p>

Na een <tt>make dep</tt> en een <tt>make clean</tt>, kun je nu een
`<tt>make bzImage</tt>' of `<tt>make bzdisk</tt>' opstarten 
(dit is het onderdeel dat lang duurt).
`<tt>make bzImage</tt>' zal de kernel compileren, en (onder andere)
een bestand in <tt>arch/i386/boot</tt> met de naam `<tt>bzImage</tt>'
achterlaten. Dit is de nieuw gecomprimeerde kernel.
`<tt>make bzdisk</tt>' doet hetzelfde, maar het plaatst ook het nieuwe
<tt>bzImage</tt> op een diskette, die je hopelijk in drive
``A:'' deed. `<tt>bzdisk</tt>' is nogal handig voor het testen van nieuwe
kernels; als het totaal mislukt (of het gewoon niet goed werkt), 
verwijder dan gewoon de diskette en boot met je oude kernel.
Als je per ongeluk je kernel verwijdert (of iets net zo vreselijks),
kan het ook een handige manier zijn om te booten. Je kunt het ook 
gebruiken om nieuwe systemen te installeren als je de inhoud van de ene naar
de andere disk dumpt.
(``dit alles en meer! hoeveel zou je NU willen betalen?'').
</p>

<p>Alle pas halverwege redelijk recente kernels zijn gecomprimeerd, hieruit
volgt de `<tt>bz</tt>' aan het begin van de naam. Een gecomprimeerde 
kernel decomprimeert zichzelf als het wordt uitgevoerd.
</p>
<p>In oudere kernels had je de optie niet om een <tt>bzImage</tt> te bouwen; het
was gewoon een <tt>zImage</tt>. Die optie is op het moment nog steeds
beschikbaar, het is echter, gegeven de grootte van de nieuwere kernels, min
of meer verplicht om een <tt>bzImage</tt> te bouwen, omdat de oudere
methoden niet met een al te grote kernel om kunnen gaan.
</p>
</sect1>

<sect1><heading>Andere ``make'' 's</heading>

<p>Met `<tt>make mrproper</tt>' zal een grootser opgezette `<tt>schoonmaak</tt>
worden uitgevoerd.
Soms is het nodig; je wilt het misschien bij iedere patch doen. Met `<tt>make
mrproper</tt>' zal ook je configuratiebestand worden verwijderd, 
dus misschien wil je een backup maken van
(<tt>.config</tt>), als je het als waardevol beschouwd.
</p>

<p>Met `<tt>make oldconfig</tt>' zal worden geprobeerd de kernel vanuit een
oud configuratiebestand te configureren;
het zal het `<tt>make config</tt>' proces voor je doorlopen.
Als je nooit eerder een kernel hebt gecompileerd of je hebt geen
oud configuratiebestand, dan zou je dit waarschijnlijk niet moeten doen,
aangezien je zeer waarschijnlijk je standaardconfiguratie zal willen
veranderen.
</p>

<p>Zie de sectie over modules voor een beschrijving van `<tt>make modules</tt>'.
</p>
</sect1>

<sect1><heading>Installeren van de kernel</heading>
<p>
Nu dat je een kernel hebt die lijkt te werken zoals je het wilt, is het tijd
om het te installeren.
De meeste mensen gebruiken hiervoor LILO (Linux Loader).
`<tt>make bzlilo</tt>' zal de kernel installeren, draai LILO,
en je bent er helemaal klaar voor om te booten, MAAR ALLEEN als lilo 
op de volgende manier op je systeem is geconfigureerd:
kernel is <tt>/vmlinuz</tt>, lilo is in <tt>/sbin</tt>, en je lilo config
(<tt>/etc/lilo.conf</tt>) stemt daar mee overeen.
</p>

<p>Anders moet je LILO op directe wijze gebruiken. Het is een tamelijk makkelijk
package om te installeren en om mee te werken, maar het heeft de
neiging om mensen met z'n configuratiebestand in de war te brengen.
Zoek naar het configuratiebestand (<tt>/etc/lilo/config</tt> voor oudere
versies of <tt>/etc/lilo.conf</tt> voor nieuwe versies), en bekijk de
huidige setup. Het configuratiebestand ziet er ongeveer zo uit:
</p>

<p>
<verb>
    image = /vmlinuz
	label = Linux
	root = /dev/hda1
	...
</verb>
</p>

<p>De `<tt>image =</tt>' is op de huidige ge&iuml;nstalleerde kernel ingesteld.
De meeste mensen gebruiken <tt>/vmlinuz</tt>. `<tt>label</tt>'
wordt door lilo gebruikt om vast te stellen welke kernel of welk
besturingssysteem moet worden geboot, en
`<tt>root</tt>' is de <tt>/</tt> van dat bepaalde besturingssysteem.
Maak een backup van je oude kernel en kopieer het
<tt>bzImage</tt> dat je net op z'n plaats hebt gezet
(je zou hier `<tt>cp bzImage /vmlinuz</tt>' opgeven als je
`<tt>/vmlinuz</tt>' gebruikt). Start lilo dan weer op,
op nieuwere systemen kun je gewoon
`<tt>lilo</tt>' opstarten, maar op oudere, kan het zijn dat je
<tt>/etc/lilo/install</tt> of zelfs 
<tt>/etc/lilo/lilo -C /etc/lilo/config</tt> op moet geven.
</p>

<p>Als je meer zou willen weten over de configuratie van LILO, of je hebt
LILO niet, haal dan de nieuwste versie vanaf je favoriete ftp-site en
volg de instructies op.
</p>

<p>Om &eacute;&eacute;n van je oude kernels vanaf de harddisk te booten
(een andere manier om jezelf te redden voor 't geval je de nieuwe kernel
hebt verprutst), kopieer je de regels hieronder (en voeg ze in): 
`<tt>image = xxx</tt>' in het configuratiebestand van LILO onderaan
het bestand, waarbij je 
`<tt>image = xxx</tt>' wijzigt in
`<tt>image = yyy</tt>';hierbij staat `<tt>yyy</tt>' voor de volledige padnaam
van het bestand, waarin je je backup van de kernel bewaarde.
</p>

<p>Wijzig dan de regel `<tt>label = zzz</tt>' in
`<tt>label = linux-backup</tt>' en herstart <tt>lilo</tt>. 
Misschien moet je nog een regel in het configuratiebestand plaatsen
zoals `<tt>delay=x</tt>', waar x staat voor het aantal tienden seconden,
dat LILO voor het booten moet wachten, zodat je het kunt onderbreken.
(bijvoorbeeld met de shift-toets), en het label in kunt tikken 
van de backup boot-image (voor 't geval er onplezierige dingen gebeuren).
</p>
</sect1>
</sect>

<sect><heading>Patchen van de kernel</heading>

<sect1><heading>Toepassen van een patch</heading>
<p>

Periodieke upgrades van de kernel worden als patches gedistribueerd.
Als je bijvoorbeeld versie 1.1.45 hebt, en je merkt dat er een 
`<tt>patch46.gz</tt>' voor is, betekent het dat je naar versie 
1.1.46 kunt upgraden door toepassing van de patch. 
Misschien wil je eerst een backup van de sourcetree maken
(`<tt>make clean</tt>' en vervolgens
`<tt>cd /usr/src; tar zcvf old-tree.tar.gz linux</tt>'
zal een gecomprimeerd tar-archief voor je maken).
</p>

<p>Dus, verdergaand met het voorbeeld van hierboven, laten we ervan uitgaan
dat je `<tt>patch46.gz</tt>' in <tt>/usr/src</tt> hebt. <tt>cd</tt> naar
<tt>/usr/src</tt>  en doe een `<tt>zcat patch46.gz | patch -p0</tt>'
(of `<tt>patch -p0 &lt; patch46</tt>'
als de patch niet is gecomprimeerd). Je zult van alles voorbij zien
vliegen (of fladderen als je systeem zo langzaam is) om je te laten
weten dat het aan het proberen is om brokken toe te passen en of het
daarin slaagt of niet.  Meestal gaan deze acties te snel voorbij om
ze te kunnen lezen, en ben je er niet helemaal zeker van of het wel of
niet werkte, dus misschien wil je de
<tt>-s</tt> flag aan <tt>patch</tt> opgeven, welke <tt>patch</tt> aangeeft
alleen de foutmeldingen te rapporteren (je krijgt niet zoveel als bij het
``h&eacute;, mijn computer doet eindelijk eens wat voor de verandering!''
gevoel, maar het kan zijn dat je hier de voorkeur aan geeft ..). 
Om die onderdelen te bekijken die misschien niet zo soepel zijn verlopen,
cd je naar <tt>/usr/src/linux</tt> en
zoek je naar bestanden met een <tt>.rej</tt> extensie. 
Een aantal versies van <tt>patch</tt>
(oudere versies welke kunnen zijn gecompileerd met een inferieur
bestandssysteem) laat de verwerpingen met een <tt>&num;</tt> extensie achter.
Je kunt `<tt>find</tt>' gebruiken om ze voor je op te sporen;
<verb>
    find .  -name '*.rej' -print
</verb>
drukt alle bestanden in de huidige directory of elke subdirectory met de
<tt>.rej</tt> extensie naar standaarduitvoer af.
</p>

<p>Als alles goed ging, doe je een `<tt>make clean</tt>', `<tt>config</tt>',
en `<tt>dep</tt>' zoals in sectie 3 en 4 werd beschreven.
</p>

<p>Er zijn heel wat opties voor het <tt>patch</tt> commando. Zoals hierboven
genoemd, zal <tt>patch -s</tt> alle berichten behalve de foutmeldingen
onderdrukken. Als je je kernelsource op een andere plaats dan
<tt>/usr/src/linux</tt> bewaart, zal er met <tt>patch -p1</tt>
(in die directory) een zuivere patch worden uitgevoerd. 
Andere <tt>patch</tt> opties zijn goed gedocumenteerd in de manual page.
</p>
</sect1>

<sect1><heading>Als er iets fout gaat</heading>
<p>

(Opmerking: deze sectie refereert voornamelijk naar nogal oude kernels)</p>

<p>Het meest voorkomende probleem dat zich voordeed was wanneer een patch 
een bestand met de naam `<tt>config.in</tt>' wijzigde en het er niet helemaal
goed uitzag, omdat je de opties wijzigde om aan je computer aan te passen.
Dit is verholpen, maar het kan zijn dat je het met een oudere release
nog aan zult treffen.  
Bekijk het bestand <tt>config.in.rej</tt> om het te herstellen, en zie
wat er van de originele patch over is gebleven.
Kenmerkend is dat de wijzigingen aan het begin van de regel
met een `<tt>+</tt>' en een `<tt>-</tt>' worden gemarkeerd.
Kijk naar de regels die erdoor worden omsloten, en denk eraan terug of ze
met `<tt>y</tt>' of `<tt>n</tt>' werden ingesteld. Wijzig nu
je <tt>config.in</tt>, en verander daar waar van toepassing de
`<tt>y</tt>' in een `<tt>n</tt>' en de `<tt>n</tt>' in een `<tt>y</tt>'
Tik in
<verb>
    patch -p0 < config.in.rej
</verb>
en als het rapporteert dat het
succesvol was (zonder gebreken), dan kun je verdergaan met de 
configuratie en compilatie.
Het bestand <tt>config.in.rej</tt> blijft behouden, maar je kunt het
verwijderen.
</p>

<p>Als je verdere problemen tegenkomt, kan het zijn dat je een patch in de
verkeerde volgorde hebt ge&iuml;nstalleerd.
Als patch de melding `<tt>previously applied patch detected: Assume
-R?</tt>' geeft, ben je waarschijnlijk aan het proberen om een patch
toe te passen welke lager is dan het huidige versienummer;
als je `<tt>y</tt>' antwoordt, zal het proberen je source te degraderen,
en zal hier waarschijnlijk niet in slagen; dus je zult een volledige nieuwe
versie van de source tree nodig hebben
(wat in eerste instantie niet eens zo'n slecht idee zou zijn geweest).
</p>

<p>Om een patch achteraf te verwijderen, gebruik je
`<tt>patch -R</tt>' op de originele patch
(het toepassen ongedaan maken).
</p>

<p>Als patches echt verkeerd blijken te zijn, kun je het beste
opnieuw beginnen met een nog onaangetaste source tree (bijvoorbeeld 
vanuit &eacute;&eacute;n van de <tt>linux-x.y.z.tar.gz</tt> bestanden).
</p>
</sect1>

<sect1><heading>De .orig bestanden zien kwijt te raken</heading>
<p>

Na slechts een paar patches, zullen de <tt>.orig</tt> bestanden zich beginnen
op te stapelen. Een 1.1.51 tree die ik bijvoorbeeld ooit had, was voor het
laatst bij 1.1.48 opgeschoond.
Het verwijderen van de .orig bestanden bespaarde me meer dan een halve meg.
<verb>
    find .  -name '*.orig' -exec rm -f {} ';'
</verb>
zal dit voor je regelen. Versies van <tt>patch</tt> die
<tt>&num;</tt> gebruiken voor verwerpingen, maken gebruik van een tilde 
in plaats van <tt>.orig</tt>.
</p>
<p>
Er zijn betere manieren om af te geraken van de <tt>.orig</tt> bestanden,
die afhankelijk zijn van GNU <tt>xargs</tt>:
<verb>
    find .  -name '*.orig' | xargs rm
</verb>
of de ``heel veilige maar een beetje uitgebreidere'' methode:
<verb>
    find . -name '*.orig' -print0 | xargs --null rm --
</verb>
</p>
</sect1>

<sect1><heading>Andere patches </heading>
<p>

Er zijn andere patches (Ik zal ze ``nietstandaard'' noemen) dan die
Linus distribueert. Als je deze toepast, kan het zijn dat de patches
van Linux niet correct werken en dan zul je ze alsnog moeten verwijderen,
de source of de patch moeten herstellen, een nieuwe sourcetree moeten
installeren, of een combinatie van het bovenstaande. Dit kan erg
frustrerend worden, dus als je de source niet wilt wijzigen (met de
kans op een zeer slechte uitkomst), verwijder dan de niet-standaard
patches voordat je die van Linux toepast, of installeer gewoon een
nieuwe tree. Vervolgens kun je zien of de niet-standaard patches nog
steeds werken. Als dat niet zo is, zit je vast aan een oude
kernel, het spelen met de patch of de source om het aan het werk te
krijgen, of zul je moeten wachten (of bedelen) tot er een nieuwe versie
van de patch uitkomt.
</p>

<p>Hoe algemeen zijn de patches die zich niet in de standaarddistributie
bevinden? Je zult waarschijnlijk van ze horen. Ik was gewend de noblink
patch voor mijn virtuele consoles te gebruiken, omdat ik een hekel heb
aan knipperende cursors. (Deze patch wordt (of tenminste werd) vaak
bijgewerkt voor nieuwe kernelreleases). Van de meeste nieuwe devicedrivers,
die als laadbare modules worden ontwikkeld, is de frequentie van 
"niet-standaard" patches echter aanmerkelijk aan het afnemen.
</p>
</sect1>
</sect>

<sect><heading>Aanvullende packages</heading>
<p>
Je linuxkernel heeft vele faciliteiten die niet in de kernelsource zelf
zijn uitgelegd; deze faciliteiten worden kenmerkend door externe
packages gebruikt. Een aantal van de meest gebruikelijke faciliteiten
wordt hier opgesomd.
</p>


<sect1><heading>kbd</heading>
<p>
De linux console heeft waarschijnlijk meer faciliteiten dan het toekomt.
Hiertussen bevindt zich de mogelijkheid om van lettertypen te verwisselen,
je toetsenbord opnieuw in te delen, tussen video-modes te schakelen
(in nieuwere kernels), enz. Het kbd package bestaat uit programma's
die de gebruiker in staat stellen om dit allemaal te doen, plus nog
vele lettertypen en toetsenbordindelingen voor bijna ieder toetsenbord, 
en het is vanaf dezelfde sites beschikbaar waar de kernelsource te
vinden is.
</p>
</sect1>

<sect1><heading>util-linux</heading>
<p>
Rik Faith (<tt>faith@cs.unc.edu</tt>) heeft een grote verzameling
linux utility's bijeen gebracht, door een eigenaardig toeval, met de naam
util-linux. Deze
worden nu door Andries Brouwer (<tt>util-linux@math.uio.no</tt>) beheerd.
Beschikbaar via anonieme ftp vanaf sunsite.unc.edu in 
<tt>/pub/Linux/system/misc</tt>, het
bevat programma's zoals <tt>setterm</tt>, <tt>rdev</tt>, en
<tt>ctrlaltdel</tt>, die relevant zijn voor de kernel. Zoals Rik zegt, 
<it>installeer het niet zonder erbij na te denken ;</it> 
je hoeft niet alles dat zich in het package bevindt, te installeren, en
het zou heel goed ernstige problemen kunnen veroorzaken als je dit
wel doet.
</p>
</sect1>

<sect1><heading>hdparm</heading>
<p>
Zoals met vele packages, was dit ooit een kernelpatch en ondersteunde
programma's. De patches haalde het tot in de offici&euml;le kernel, en
de programma's voor het optimaliseren en spelen met je harddisk worden
afzonderlijk gedistribueerd.
</p>
</sect1>

<sect1><heading>gpm</heading>
<p>
gpm staat voor `general purpose mouse.' Dit programma staat je toe om tussen
virtuele consoles tekst te knippen en te plakken en wat andere dingen te
doen met een grote diversiteit aan muistypes.
</p>
</sect1>
</sect>

<sect><heading>Een aantal valkuilen</heading>

<sect1><heading>make clean </heading>
<p>
Als je nieuwe kernel echt vreemde dingen doet na een routine kernel-upgrade,
bestaat de kans dan je vergat 
<tt>make clean</tt> uit te voeren voordat je de nieuwe kernel compileerde.
De symptomen kunnen van alles zijn, van je systeem dat ineens crasht,
vreemde I/O problemen, te lage performance. Wees er zeker van dat je
ook een <tt>make dep</tt> doet.
</p>
</sect1>

<sect1><heading>Zeer grote of langzame kernels</heading>
<p>
Als je kernel een boel geheugen opslurpt, te groot is, en/of het compileren
eeuwig duurt, ook al heb je een nieuwe Quadbazillium-III/4400 die eraan werkt,
dan heb je waarschijnlijk erg veel onnodig spul (device drivers, 
bestandssystemen, enz) geconfigureerd. Als je het niet gebruikt, configureer
het dan niet, want het neemt geheugen in beslag.
Het meest opvallende van kernel bload is het extreme in en uitswappen van 
geheugen naar de disk; als je disk een heleboel lawaai maakt en het niet
&eacute;&eacute;n van die oude Fujitsu Eagles is, die klinken alsof er een
straalvliegtuig landt als je je computer uitzet, kijk dan nog eens naar je 
kernelconfiguratie.
</p>

<p>Je kunt erachter komen hoeveel geheugen je kernel gebruikt door de
totale hoeveelheid geheugen in je machine af te trekken van de hoeveeelheid
van ``total mem'' in <tt>/proc/meminfo</tt>  of de uitvoer van het
commando `<tt>free</tt>'.
</p>
</sect1>

<sect1><heading>De parallelle poort werkt niet/mijn printer werkt niet</heading>
<p>
Configuratie-opties voor PC's zijn: Selecteer als eerste, onder de categorie
`General Setup', `Parallel port support' en `PC-style hardware'. Selecteer 
dan onder `Character devices', `Parallel printer support'.
</p>
<p>En dan zijn er nog de namen. Linux 2.2 noemt de printerdevices anders dan
in voorgaande releases.
Het komt hierop neer dat, als je onder je oude kernel een <tt>lp1</tt> 
had, het onder je nieuwe kernel waarschijnlijk een <tt>lp0</tt> is.
Gebruik `<tt>dmesg</tt>' of doorzoek de logs in <tt>/var/log</tt> om erachter
te komen.
</p>
</sect1>

<sect1><heading>Kernel compileert niet </heading>
<p>

Als het niet compileert, dan is het waarschijnlijk dat er een patch 
mislukte, of je source is op &eacute;n&eacute;n of andere manier verknoeid.
Het kan ook zijn dat je niet de juiste versie van gcc hebt, of deze kan
ook verknoeid zijn (de include bestanden kunnen bijvoorbeeld fout zijn).
Zorg ervoor dat de symbolische links, die Linux in de
<tt>README</tt> beschrijft, juist zijn ingesteld. 
In het algemeen geldt, dat als een standaardkernel niet compileert, er
iets ernstig mis is met het systeem, en opnieuw installeren van bepaalde
tools is waarschijnlijk noodzakelijk.
</p>

<p>In een aantal gevallen kan gcc door hardwareproblemen crashen. 
De foutmelding zal iets zijn als ``xxx exited with signal 15'' en het zal
er gewoonlijk zeer mysterieus uitzien. Ik zou dit waarschijnlijk niet
ter sprake hebben gebracht, behalve dat het me een keer overkwam
- Ik had wat slecht cache geheugen, en de compiler kon nu en dan
willekeurig weigeren<!--barf-->. Probeer als eerste gcc opnieuw te
installeren als je problemen ervaart.
Je zou alleen achterdochtig moeten zijn, als je kernel goed compileert
met externe cache uitgezet, een verminderde hoeveelheid RAM, enz.
</p>

<p>Het schijnt mensen te storen wanneer er wordt gesuggereerd, dat er problemen
met hun hardware zijn. Ik verzin dit niet. Er is een FAQ voor -- het is te
vinden bij <tt>http://www.bitwizard.nl/sig11/</tt>.
</p>
</sect1>

<sect1><heading>De nieuwe kernelversie lijkt niet te booten</heading>
<p>

Je hebt LILO niet gedraaid of het is niet juist geconfigureerd. 
&Eacute;&eacute;n ding dat me eens ``overkwam'', was een probleem in het
configuratiebestand; het gaf aan `<tt>boot = /dev/hda1</tt>'
in plaats van `<tt>boot = /dev/hda</tt>' (Dit kan in het begin echt 
hinderlijk zijn, maar zodra je een werkend configuratiebestand hebt, zou
je het niet meer hoeven te wijzigen).
</p>
</sect1>

<sect1><heading> Je vergat LILO te draaien, of je systeem boot helemaal niet</heading>
<p>

Oeps! Het beste wat je hier kunt doen is met een diskette of CDROM te 
booten en een andere opstartbare diskette aan te maken
(zoals `<tt>make zdisk</tt>' zou doen).
Je zult moeten weten waar je root (<tt>/</tt>) bestandssysteem zich bevindt 
en van welk type het is
(b.v. second extended, minix). In het voorbeeld hieronder zul je ook moeten
weten op welk bestandssysteem je
<tt>/usr/src/linux</tt> source-tree zich bevindt, het type, 
en waar het normaal gesproken wordt gemount.</p>

<p>In het volgende voorbeeld, is <tt>/</tt> <tt>/dev/hda1</tt>, en het
bestandssysteem met <tt>/usr/src/linux</tt>
is <tt>/dev/hda3</tt>, normaal gesproken gemount onder <tt>/usr</tt>. 
Het zijn allebei second extended bestandssystemen. De werkende kernel image in
<tt>/usr/src/linux/arch/i386/boot</tt> wordt <tt>bzImage</tt> genoemd.</p>

<p>De bedoeling is, dat als er een functionerend
<tt>bzImage</tt> is, het mogelijk is om dat voor de nieuwe diskette te
gebruiken. Een ander alternatief, welke wel of niet beter kan werken,
(dit hangt af van de speciale methode waarin je je systeem hebt verknoeid) 
wordt na het voorbeeld besproken.</p>

<p>Boot om te beginnen vanaf een boot/root diskset of rescuedisk, 
en mount het bestandssysteem waarin zich de werkende kernel-image
bevindt:


<verb>
    mkdir /mnt
    mount -t ext2 /dev/hda3 /mnt
</verb>
</p>

<p>Als <tt>mkdir</tt> je de melding geeft dat de directory al bestaat, negeer
het dan gewoon.
<tt>cd</tt> nu naar de plaats waar de werkende kernel-image stond. Merk
op dat 
<verb>
/mnt + /usr/src/linux/arch/i386/boot - /usr = /mnt/src/linux/arch/i386/boot
</verb>
</p>
<p>Plaats een geformatteerde disk in drive ``A:'' (niet je boot- of rootdisk!),
dump de image naar de disk, en configureer het voor je root bestandssysteem:

<verb>
    cd /mnt/src/linux/arch/i386/boot
    dd if=bzImage of=/dev/fd0
    rdev /dev/fd0 /dev/hda1
</verb>
</p>

<p><tt>cd</tt> naar <tt>/</tt> en unmount het normale <tt>/usr</tt>
bestandssysteem:
<verb>
    cd /
    umount /mnt
</verb>
</p>

<p>Je zou je systeem nu zoals gewoonlijk vanaf deze diskette op moeten kunnen
starten. Vergeet na het opstarten, lilo niet te draaien 
(of wat je ook verkeerd deed)!
</p>

<p>Zoals hierboven genoemd, is er nog een ander alternatief. Als je
een werkende kernel-image in <tt>/</tt> hebt, (bijvoorbeeld
<tt>/vmlinuz</tt>), kun je dat voor een bootdisk gebruiken.
Uitgaande van alle bovenstaande condities, en dat mijn kernel-image 
<tt>/vmlinuz</tt> is, maak je gewoon deze wijzigingen aan, in het
voorbeeld hierboven:
verander
<tt>/dev/hda3</tt> in <tt>/dev/hda1</tt> (het <tt>/</tt> bestandssysteem),
<tt>/mnt/src/linux</tt> in
<tt>/mnt</tt>, en <tt>if=bzImage</tt> in <tt>if=vmlinuz</tt>. De
opmerking die uitleg geeft hoe <tt>/mnt/src/linux</tt> kan worden afgeleid,
kan worden genegeerd.
</p>

<p>LILO met grote drives gebruiken, (meer dan 1024 cylinders) 
kan problemen veroorzaken.
Zie de LILO mini-HOWTO of documentatie hierover voor hulp.
</p>
</sect1>

<sect1><heading>Het geeft de melding `warning: bdflush not running'</heading>
<p>

Dit kan een ernstig probleem zijn. Beginnend met kernelrelease
na 1.0 (rond 20 Apr 1994), werd een programma met de naam
`<tt>update</tt>' bijgewerkt, welke periodiek de buffers van het 
bestandssysteem opschoont. 
Haal de sources van `<tt>bdflush</tt>' op
(je zou het moeten kunnen vinden daar waar je je kernelsource vandaan hebt
gehaald), en installeer het (je wilt je systeem waarschijnlijk
onder de oude kernel draaien als je hiermee bezig bent). Het
installeert zichzelf als `<tt>update</tt>' en na een reboot, zou de nieuwe
kernel er niet langer problemen mee moeten hebben.
</p>
</sect1>

<sect1><heading>Ik krijg mijn IDE/ATAPI CD-ROM drive niet aan de praat</heading>
<p>
Vreemd genoeg krijgen een heleboel mensen hun ATAPI drives niet werkend,
waarschijnlijk omdat er een aantal dingen verkeerd kan gaan.
</p>
<p>Als je CD-ROM drive het enige apparaat op een bepaalde IDE interface is,
moet het als ``master'' of ``slave'' zijn gejumperd.
Dit is vermoedelijk de meest voorkomende fout.
</p>
<p>
Creative Labs<!--(for one)--> heeft nu IDE-interfaces op hun geluidskaarten
gezet. Dit leidt echter tot het interessante probleem dat terwijl een
aantal mensen slechts &eacute;&eacute;n interface heeft
<!--to being with(misschien to begin with?-->, hebben velen twee
IDE-interfaces op hun moederborden ingebouwd (meestal op IRQ15), dus 
het is een algemene gewoonte om van de
soundblaster interface een derde IDE poort te maken (IRQ11, is me verteld).
</p>
<p>Dit veroorzaakt problemen met linux gezien versies 1.2.x geen derde
IDE-interface ondersteunen
(er is ondersteuning te beginnen ergens in 1.3.x series
maar dat is development, denk daaraan, en het doet geen auto-probe). 
Om dit te omzeilen, heb je een paar keuzes.</p>
<p>
Als je al een tweede IDE-poort hebt, bestaat de kans dat je het niet
gebruikt, of er zich nog geen twee devices op bevinden.
Haal de ATAPI-drive van de geluidskaart af en bevestig het aan de tweede
interface. Je kunt de interface van de geluidskaart vervolgens de-activeren,
wat je hoe dan ook een IRQ bespaart.
</p>
<p>Als je geen tweede interface hebt, jumper de interface van de geluidskaart
(niet het geluidsdeel van de geluidskaart) dan als IRQ15, de tweede interface. 
Het zou moeten werken.
</p>
</sect1>

<sect1><heading>Het geeft rare meldingen over `obsolete routing requests'</heading>
<p>

Haal nieuwe versies op van het <tt>route</tt> programma en enige andere
programma's die er zijn voor route manipulatie.
<tt>/usr/include/linux/route.h</tt>  (dat eigenlijk een bestand in
<tt>/usr/src/linux</tt> is), is gewijzigd.
</p>
</sect1>

<sect1><heading>Firewall werkt niet in 1.2.0</heading>
<p>
Upgrade naar tenminste versie 1.2.1.
</p>
</sect1>

<sect1><heading>``Not a compressed kernel Image file''</heading>
<p>
Gebruik het bestand <tt>vmlinux</tt> die je in <tt>/usr/src/linux</tt>
hebt aangemaakt, niet als je boot-image; het juiste bestand is
<tt>[..]/arch/i386/boot/bzImage</tt>.
</p>
</sect1>

<sect1><heading>Problemen met console terminal na het upgraden tot 1.3.x</heading>
<p>
Wijzig het woord <tt>dumb</tt> in <tt>linux</tt> in de console termcap
entry in <tt>/etc/termcap</tt>. Het kan ook zijn dat je een terminfo
entry moet maken.
</p>
</sect1>

<sect1><heading>Het lijkt erop dat ik dingen na de kernel-upgrade niet kan compileren</heading>
<p>
De linux kernelsource bevat een aantal include bestanden (die met
een <tt>.h</tt> eindigen), waarnaar wordt verwezen door de standaard
include bestanden in <tt>/usr/include</tt>. 
Er wordt als volgt naar verwezen (waar
<tt>xyzzy.h</tt> iets in <tt>/usr/include/linux</tt> zou zijn):
<verb>
    #include <linux/xyzzy.h>
</verb>
</p>
<p>Normaal gesproken, is er een link met de naam <tt>linux</tt> in 
<tt>/usr/include</tt> naar de directory
<tt>include/linux</tt> van je kernelsource
(<tt>/usr/src/linux/include/linux</tt> op het systeem). Als deze link
niet voorkomt, of naar de verkeerde plaats verwijst, zal het meeste helemaal
niet worden gecompileerd.
Als je besloot de kernelsource te verwijderen, omdat het te veel
ruimte op de disk in beslag nam, zal dit uiteraard een probleem zijn.
Een andere manier waarop het fout kan gaan is door bestandspermissies;
als je <tt>root</tt> een umask heeft, die andere gebruikers niet toestaat,
standaard de bestanden te zien, en je pakte de kernelsource uit met de
<tt>p</tt> (preserve filemodes)
optie, dan zullen die gebruikers ook niet in staat zijn om de C compiler
te gebruiken. Alhoewel je het
<tt>chmod</tt> commando zou kunnen gebruiken om dit te herstellen, 
is het waarschijnlijk makkelijker om de include bestanden opnieuw uit te
pakken. Je kunt dit op dezelfde manier doen zoals
je in het begin met de hele source deed, alleen met een aanvullend argument:
</p>
<p>
<verb>
    blah# tar zxvpf linux.x.y.z.tar.gz linux/include
</verb>
Opmerking: ``<tt>make config</tt>'' zal de <tt>/usr/src/linux</tt>
opnieuw aanmaken als het er niet is.
</p>
</sect1>

<sect1><heading>Verhogen van limieten</heading>
<p>
De volgende paar <it>voorbeeld</it>commando's kunnen handig zijn voor
degenen die zich afvragen hoe ze bepaalde software-limieten kunnen
verhogen die door de kernel worden opgelegd:
<verb>
echo 4096 > /proc/sys/kernel/file-max
echo 12288 > /proc/sys/kernel/inode-max
echo 300 400 500 > /proc/sys/vm/freepages
</verb>
</p>
</sect1>
</sect>

<sect><heading>Opmerking voor upgrade naar versie 2.0.x, 2.2.x</heading>
<p>
Kernel versies 2.0.x en 2.2.x introduceerde heel wat wijzigingen voor de
kernel-installatie.
Het bestand <tt>Documentation/Changes</tt> in de 2.0.x source
tree bevat informatie waarmee je bekend zou moeten zijn als je naar 
&eacute;&eacute;n van deze versies gaat upgraden.
Je zult zeer waarschijnlijk verscheidene packages moeten upgraden, zoals
gcc, libc, en SysVInit, en misschien een aantal systeembestanden moeten
wijzigen, dus wees hier op voorbereid. Echter, geen paniek.
</p>
</sect>

<sect><heading>Modules</heading>
<p>
Laadbare kernelmodules kunnen geheugen besparen en de configuratie
vergemakkelijken. De strekking van modules
is gegroeid dat het bestandssystemen, ethernetkaartdrivers, tapedrivers, 
printer drivers, en meer bevat.
</p>


<sect1><heading>Installeren van de module-utility's</heading>
<p>
De module utility's zijn beschikbaar vanwaar je je kernelsource vandaan
hebt gehaald als <tt>modutils-x.y.z.tar.gz</tt>; kies het hoogste
patchlevel <tt>x.y.z</tt> dat gelijk is of lager dan dat van je huidige
kernel. Pak het uit met `<tt>tar zxvf modutils-x.y.z.tar.gz</tt>',
<tt>cd</tt> naar de directory, het maakt (<tt>modutils-x.y.z</tt>) aan,
bekijk de <tt>README</tt>, en voer de installatie-instructies ervan uit
(die meestal erg eenvoudig zijn, zoals <tt>make install</tt>). Je
zou nu de programma's <tt>insmod</tt>, <tt>rmmod</tt>, <tt>ksyms</tt>,
<tt>lsmod</tt>, <tt>genksyms</tt>, <tt>modprobe</tt>, en <tt>depmod</tt> in
<tt>/sbin</tt> moeten hebben.
Test de utility's met de ``hw'' voorbeelddriver in <tt>insmod</tt>, als je
dat wilt; bekijk het bestand
<tt>INSTALL</tt> in die subdirectory voor details.
</p>
<p><tt>insmod</tt> voegt een module in, in de draaiende kernel. Modules
hebben meestal een <tt>.o</tt> extensie; de voorbeelddriver die hierboven
werd genoemd, heeft de naam 
<tt>drv_hello.o</tt>, dus om dit in te voegen, zou men intikken
`<tt>insmod drv_hello.o</tt>'. Om te modules te zien die de kernel op
dit moment gebruikt, gebruik je <tt>lsmod</tt>. 
De uitvoer ziet er ongeveer zo uit:
<verb>
    blah# lsmod
    Module:        #pages:  Used by:
    drv_hello          1
</verb>
</p>
<p>`<tt>drv_hello</tt>' is de naam van de module, het gebruikt &eacute;&eacute;n
pagina (4k) van het geheugen, en er zijn op dit moment geen 
andere kernelmodules afhankelijk van.
Om deze module te verwijderen, gebruik je `<tt>rmmod drv_hello</tt>'. 
Merk op dat <tt>rmmod</tt> de 
<it>naam van een module</it> verlangt, geen bestandsnaam; je krijgt dit van de
uitvoer van <tt>lsmod</tt>. De strekking van de andere utility's voor de
modules staan in hun manual pages gedocumenteerd.
</p>
</sect1>

<sect1><heading>Met de kernel gedistribueerde modules</heading>
<p>
Sinds versie 2.0.30, is bijna alles als een laadbare module beschikbaar.
Zorg er eerst voor dat je ze niet in de reguliere kernel configureert, om
ze te gebruiken; dat wil zeggen, beantwoord 't niet met
<tt>y</tt> tijdens `<tt>make config</tt>'.
Compileer een nieuwe kernel en reboot ermee. <tt>cd</tt> dan nogmaals naar
<tt>/usr/src/linux</tt>, en doe een `<tt>make modules</tt>'. Hiermee
worden alle modules gecompileerd die je niet in de kernelconfiguratie hebt
gespecificeerd, en links ernaar in <tt>/usr/src/linux/modules</tt> geplaatst.
Je kunt ze direct vanuit die directory gebruiken of `<tt>make
modules_install</tt>' uitvoeren, waarmee ze in
<tt>/lib/modules/x.y.z</tt> worden ge&iuml;nstalleerd, hierbij
staat <tt>x.y.z</tt> voor de kernelrelease.
</p>

<p>Dit kan vooral handig zijn met bestandssystemen. Het kan zijn dat je het
minix of msdos bestandssysteem niet vaak gebruikt.
Als ik bijvoorbeeld een msdos (huiver) diskette trof, zou ik
<tt>insmod /usr/src/linux/modules/msdos.o</tt>, en dan
<tt>rmmod msdos</tt> als ik klaar ben. Deze procedure bespaart
gedurende de normale bewerking ongeveer 50k RAM in de kernel. 
Een kleine aantekening voor het minix bestandssysteem:
je zou het <it>altijd</it> direct in de kernel moeten configureren, voor
gebruik in ``rescue'' disks.
</p>
</sect1>
</sect>

<sect><heading>Tips en trucs</heading>

<sect1><heading>Doorsturen van uitvoer van de make of patch commando's </heading>
<p>

Als je logs van wat die `<tt>make</tt>' of `<tt>patch</tt>'
commando's deden, zou willen hebben, kun je de uitvoer naar een bestand 
doorsturen. Zoek als eerste uit onder welke shell je draait:
`<tt>grep root /etc/passwd</tt>' en zoek naar iets als
`<tt>/bin/csh</tt>'.
</p>

<p>Als je sh of bash gebruikt, zal
<verb>
    (commando) 2>&1 | tee (uitvoerbestand)
</verb>
een kopie van de uitvoer van <tt>(commando)</tt> in het bestand
`<tt>(uitvoerbestand)</tt>' plaatsen.
</p>

<p>Gebruik voor csh of tcsh,
<verb>
    (command) |& tee (uitvoerbestand)
</verb>
</p>

<p>Voor rc (Opmerking: je gebruikt rc waarschijnlijk niet) is het
<verb>
    (command) >[2=1] | tee (uitvoerbestand)
</verb>
</p>
</sect1>

<sect1><heading>Voorwaardelijke kernel-installatie</heading>
<p>
Naast het gebruiken van diskettes, zijn er nog verscheidene methoden om een
nieuwe kernel uit te testen zonder de oude kernel aan te roeren. In
tegenstelling tot andere Unix-soorten, heeft LILO de mogelijkheid om een
kernel vanaf iedere plaats op de disk te booten. (als je een grote disk
(500 MB of meer) hebt, lees dan alsjeblieft de LILO-documentatie door over
hoe dit problemen kan veroorzaken).
Dus, als je iets vergelijkbaars als het volgende aan het einde van je
LILO configuratiebestand toevoegt,
<verb>
    image = /usr/src/linux/arch/i386/boot/bzImage
        label = new_kernel
</verb>
kun je ervoor kiezen een nieuwe gecompileerde kernel te draaien zonder dat
je je oude <tt>/vmlinuz</tt> aanroert (na het draaien van 
<tt>lilo</tt>, natuurlijk). De makkelijkste manier om LILO te vertellen dat
het een nieuwe kernel moet booten is om de linker shift-toets tijdens het
opstarten in te drukken,
(als je <tt>LILO</tt> op het scherm ziet staan, en niets anders)
waardoor je een prompt krijgt.
Op dit punt kun je `<tt>nieuwe_kernel</tt>' opgeven om de nieuwe kernel te
booten.
</p>
<p>Als je verscheidene verschillende kernel source-trees tegelijkertijd
op je systeem wilt behouden (dit kan <it>heel veel</it> diskruimte innemen;
wees voorzichtig), is de meest gebruikelijke
manier om ze <tt>/usr/src/linux-x.y.z</tt> te noemen, waar
<tt>x.y.z</tt> voor de kernelversie staat. Je kunt een sourcetree
dan met een symbolische link ``selecteren''; 
bijvoorbeeld, `<tt>ln -sf linux-1.2.2
/usr/src/linux</tt>' zou de 1.2.2 tree de huidige maken. 
Zorg ervoor dat het laatste 
argument van <tt>ln</tt> geen echte directory is (oude symbolische links 
zijn prima), voordat je op deze manier een symbolische link maakt; 
het resultaat zal je namelijk anders niet hetgene geven wat je ervan zou 
verwachten.
</p>
</sect1>

<sect1><heading>Kernel updates </heading>
<p>
Russell Nelson (<tt>nelson@crynwr.com</tt>) vat de wijzigingen in
nieuwe kernelreleases samen.
Ze zijn beknopt, en je zou er misschien voor een upgrade naar willen kijken.
Ze zijn beschikbaar via anonieme ftp vanaf
<tt>ftp.emlist.com</tt> in <tt>pub/kchanges</tt> of via de URL
<verb>
    http://www.crynwr.com/kchanges
</verb>
</p>
</sect1>
</sect>

<sect><heading>Andere relevante HOWTO's die nuttig kunnen zijn</heading>
<p>
<itemize>
<item> Sound-HOWTO: geluidskaarten en utility's
</item>
<item> SCSI-HOWTO: alles over SCSI-controllers en -devices
</item>
<item> NET-2-HOWTO: netwerk
</item>
<item> PPP-HOWTO: PPP-netwerken in het bijzonder
</item>
<item> PCMCIA-HOWTO: over de drivers voor je notebook
</item>
<item> ELF-HOWTO: ELF: wat het is, het converteren..
</item>
<item> Hardware-HOWTO: overzicht van ondersteunde hardware
</item>
<item> Module mini-HOWTO: meer over kernelmodules
</item>
<item> Kerneld mini-HOWTO: over kerneld
</item>
<item> BogoMips mini-HOWTO: voor 't geval je 't je af mocht vragen
</item>
</itemize>
</p>
</sect>

<sect><heading>Diversen</heading>

<sect1><heading>Auteur</heading>
<p>

De auteur en beheerder van de Linux Kernel-HOWTO is Brian Ward
(<tt>bri@cs.uchicago.edu</tt>). Stuur me alsjeblieft je opmerkingen,
aanvullingen, correcties
(Correcties zijn voor mij in het bijzonder het belangrijkst).
</p>

<p>Je kunt een kijkje nemen op mijn `home page' op &eacute;&eacute;n 
van deze URL's:
<verb>
    http://www.math.psu.edu/bri/
    http://blah.math.tu-graz.ac.at/~bri/
</verb>
</p>

<p>Ook al probeer ik zo attent mogelijk te zijn met mail, denk er alsjeblieft
aan dat ik er iedere dag <it>heel veel</it> van krijg, dus het kan even
duren voor ik je antwoord.
Vooral als je me mailt met een vraag, probeer dan alsjeblieft extra je
best te doen in je bericht duidelijk en gedetailleerd te zijn.
Als je me schrijft over niet werkende hardware (of iets dergelijks)
moet ik weten wat je hardwareconfiguratie is.
Als je een fout rapporteert, zeg dan niet slechts
``Ik heb dit geprobeerd, maar het gaf een foutmelding;'' 
Ik moet weten wat de foutmelding was.
Ik zou ook willen weten welke versie van de kernel, gcc, en libc je gebruikt.
Als je me slechts vertelt dat je &eacute;&eacute;n of andere versie van
een bepaalde distributie gebruikt, zal me dat niet veel zeggen.
Het maakt me niet uit als je eenvoudige vragen stelt; denk eraan, als je
niets vraagt, kun je ook nooit een antwoord krijgen!
Ik zou graag iedereen willen bedanken die me feedback heeft gegeven.
</p>
<p>Als je vraag niets met de kernel te maken heeft, of in een taal staat die
ik niet begrijp, kan het zijn dat ik niet antwoord.</p>

<p>

Als je me een mail hebt gestuurd en binnen redelijke tijd (drie weken of
meer) geen antwoord hebt gekregen, dan bestaat de kans dat ik je bericht
per ongeluk heb verwijderd of iets van die strekking (sorry). Probeer het
alsjeblieft opnieuw.
</p>

<p>Ik krijg erg veel mail over zaken die eigenlijk te maken hebben met
hardware of hardwareproblemen.
Dat is prima, maar probeer er alsjeblieft aan te denken dat ik niet
bekend ben met alle in de wereld te krijgen hardware. 
Ik gebruik AMD processors, Adaptec en Sybios SCSI-controllers, en 
IBM SCSI-disks.
</p>

<p>Versie -0.1 werd geschreven op 3 oktober 1994. Dit document is beschikbaar in
SGML, PostScript, TeX, roff, en plain-text formaten.
</p>
</sect1>

<sect1><heading>Te doen</heading>
<p>
De ``Tips en trucs'' sectie is wat klein. Ik hoop het uit te kunnen
breiden door suggesties van anderen. Zo ook ``Aanvullende packages.''
Meer debugging/crash herstel info nodig.</p>
</sect1>

<sect1><heading>Contributies</heading>
<p>
Een klein deel van Linus' README (kernelhacking opties) is inbegrepen.
(Bedankt, Linus!)
</p>
<p><tt>uc@brian.lunetix.de</tt> (Ulrich Callmeier): patch -s en xargs.</p>
<p>
<tt>quinlan@yggdrasil.com</tt> (Daniel Quinlan): correcties en aanvullingen
in vele secties. </p>
<p><tt>nat@nat@nataa.fr.eu.org</tt> (Nat Makarevitch): mrproper, tar -p, vele
andere zaken</p>
<p><tt>boldt@math.ucsb.edu</tt> (Axel Boldt): verzamelde beschrijvingen
van kernelconfiguratie-opties op het net; voorzag me vervolgens in een lijst</p>
<p><tt>lembark@wrkhors.psyber.com</tt> (Steve Lembark): multiple boot
suggestie</p>
<p><tt>kbriggs@earwax.pd.uwa.edu.au</tt> (Keith Briggs): een aantal correcties
en suggesties</p>
<p><tt>rmcguire@freenet.columbus.oh.us</tt> (Ryan McGuire): makeables
aanvullingen</p>
<p><tt>dumas@excalibur.ibp.fr</tt> (Eric Dumas): Franse vertaling</p>
<p><tt>simazaki@ab11.yamanashi.ac.jp</tt> (Yasutada Shimazaki):
Japanse vertaling</p>
<p><tt>jjamor@lml.ls.fi.upm.es</tt> (Juan Jose Amor Iglesias):
Spaanse vertaling</p>
<p><tt>mva@sbbs.se</tt> (Martin Wahlen): Zweedse vertaling</p>
<p><tt>jzp1218@stud.u-szeged.hu</tt> (Zoltan Vamosi): Hongaarse vertaling
</p>
<p><tt>bart@mat.uni.torun.pl</tt> (Bartosz Maruszewski): Poolse vertaling</p>
<p><tt>donahue@tiber.nist.gov</tt> (Michael J Donahue): typos, winnaar van de
``sliced bread competition''</p>
<p><tt>rms@gnu.ai.mit.edu</tt> (Richard Stallman):
``vrije'' documentatie concept/distributie notitie</p>
<p><tt>dak@Pool.Informatik.RWTH-Aachen.DE</tt> (David Kastrup): iets over NFS
</p>
<p><tt>esr@snark.thyrsus.com</tt> (Eric Raymond): diverse juweeltjes</p>

<p>De mensen die me mail zonden met vragen en problemen waren ook 
zeer behulpzaam.
</p>
</sect1>

<sect1><heading>Copyright-melding, Licentie en al dat soort zaken</heading>
<p>
Copyright &copy Brian Ward, 1994-1999.</p>
<p>Het is toegestaan kopie&euml;n van deze handleiding te distribueren, op
voorwaarde dat de copyright-melding en deze permissie-melding op alle
kopie&euml;n behouden blijft.
</p>

<p>Het is toegestaan gewijzigde versies van deze handleiding te kopie&euml;ren
en te distribueren onder de condities voor letterlijk kopie&euml;ren,
op voorwaarde dat het afgeleide werk onder de voorwaarden van 
een permissie-melding identiek is aan deze vermelding.
Vertalingen vallen onder de categorie ``gewijzigde versies.''
</p>

<p>Garantie: Geen.</p>

<p>Aanbevelingen:
Commerci&euml;le herdistributie is toegestaan en wordt aangemoedigd; het wordt
echter sterk aangeraden dat de herdistributeur contact opneemt met de auteur
voor de herdistributie, in het belang van zaken up-to-date te houden 
(je zou me een kopie van hetgeen je aan het maken bent toe kunnen sturen
terwijl je er mee bezig bent). Vertalers
worden ook geadviseerd om contact op te nemen met de auteur voor het vertalen.
De afgedrukte versie ziet er mooier uit. Recycle.</p>
</sect1>
</sect>




<sect><heading>Andere formaten van dit document</heading>
<p>
Deze sectie is geschreven door
       <htmlurl url="mailto:alavoor@yahoo.com"
             name="Al Dev">
(op de site <url url="http://www.aldev.8m.com"> 
mirrors bij 
<url url="http://aldev.webjump.com">,
<url name="angelfire" url="http://www.angelfire.com/country/aldev0">,
<url name="geocities" url="http://www.geocities.com/alavoor/index.html">,
<url name="virtualave" url="http://aldev0.virtualave.net">,
<url name="50megs" url="http://aldev0.50megs.com">,
<url name="theglobe" url="http://members.theglobe.com/aldev1/index.html">,
<url name="NBCi" url="http://members.nbci.com/alavoor">,
<url name="Terrashare" url="http://aldev.terrashare.com">,
<url name="Fortunecity" url="http://members.fortunecity.com/aldev">,
<url name="Freewebsites" url="http://aldev.freewebsites.com">,
<url name="Tripod" url="http://members.tripod.lycos.com/aldev">,
<url name="Spree" url="http://members.spree.com/technology/aldev">,
<url name="Escalix" url="http://www.escalix.com/freepage/aldev">,
<url name="Httpcity" url="http://www.httpcity.com/aldev/index.html">,
<url name="Freeservers" url="http://aldev.freeservers.com">
)


Dit document is in 12 verschillende formaten geschreven, te weten - DVI, 
Postscript, Latex, Adobe Acrobat PDF, LyX, GNU-info, HTML, 
RTF(Rich Text Format), Plain-text, Unix man pages, een enkel HTML bestand en
SGML.
<itemize>
<item>
Je kunt dit HOWTO document als een enkele tarball ophalen in HTML, DVI,
Postscript of SGML formaten vanaf -
<url url="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/other-formats/">
en <url url="http://www.linuxdoc.org/docs.html#howto"></item>

<item>Het gewone tekstformaat is te vinden in:
<url url="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO">
en <url url="http://www.linuxdoc.org/docs.html#howto"></item>
<item>Het enkele HTML bestandsformaat is te vinden in:
<url url="http://www.linuxdoc.org/docs.html#howto"></item>

<item>Vertalingen naar andere talen zoals Frans, Duits, Spaans, Chinees,
Japanees zijn te vinden in
<url url="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO">
en <url url="http://www.linuxdoc.org/docs.html#howto">
Elke hulp om naar andere talen te vertalen is welkom.</item>
</itemize>
Het document is geschreven met een tool genaamd "SGML-Tools" wat kan worden
opgehaald vanaf
<url url="http://www.sgmltools.org">
Voor het compileren van de source gebruik je de volgende opdrachten
<itemize>
<item>sgml2html Kernel-HOWTO.sgml     (voor het genereren van het html bestand)
</item>
<item>sgml2rtf  Kernel-HOWTO.sgml     (voor het genereren van het RTF bestand)
</item>
<item>sgml2latex Kernel-HOWTO.sgml    (voor het genereren van het latex bestand)
</item>
</itemize>

LaTeX documenten kunnen naar PDF bestand worden geconverteerd door eenvoudigweg
Postscript uitvoer te produceren met behulp van
<bf>sgml2latex</bf> ( en dvips) en de uitvoer door als volgt de Acrobat
<bf>distill</bf> (<url url="http://www.adobe.com">) opdracht uit te voeren:
<code>
bash$ man sgml2latex
bash$ sgml2latex filename.sgml
bash$ man dvips
bash$ dvips -o filename.ps filename.dvi
bash$ distill filename.ps
bash$ man ghostscript
bash$ man ps2pdf
bash$ ps2pdf input.ps output.pdf
bash$ acroread output.pdf &
</code>
Of je kunt gebruik maken van de Ghostscript opdracht <bf>ps2pdf</bf>.
ps2pdf is een work-alike voor bijna alle functionaliteit van
Adobe's Acrobat Distiller product: het converteert PostScript bestanden
naar Portable Document Format (PDF) bestanden.
<bf>ps2pdf</bf> is ge&iuml;mplementeerd als een zeer klein opdrachtscript
(batch file) dat Ghostscript aanroept, waarbij het een speciaal
"output device" genaamd <bf>pdfwrite</bf> selecteert. 
Voor gebruik van ps2pdf moest het pdfwrite device zijn opgenomen in de
makefile wanneer Ghostscript werd gecompileerd;
zie de documentatie over het bouwen van Ghostscript voor details.

Dit howto document is te vinden op:
<itemize>
<item> <url url="http://sunsite.unc.edu/LDP/HOWTO/Kernel-HOWTO.html"></item>
</itemize>

Dit document is ook te vinden op de volgende mirrorsites:
<itemize>
<item> <url url="http://www.caldera.com/LDP/HOWTO/Kernel-HOWTO.html">
</item>
<item> <url url="http://www.WGS.com/LDP/HOWTO/Kernel-HOWTO.html">
</item>
<item> <url url="http://www.cc.gatech.edu/linux/LDP/HOWTO/Kernel-HOWTO.html">
</item>
<item> <url url="http://www.redhat.com/linux-info/ldp/HOWTO/Kernel-HOWTO.html">
</item>
<item> Andere mirrorsites in je buurt (netwerk-adres-wijsheid) zijn te
vinden op
<url url="http://sunsite.unc.edu/LDP/hmirrors.html">
selecteer een site en ga naar de directory /LDP/HOWTO/Kernel-HOWTO.html
</item>
</itemize>


Om het document te bekijken in dvi formaat, gebruik je het programma xdvi.
Het programma xdvi is onder RedHat Linux te vinden in het 
tetex-xdvi*.rpm package welke kan worden gelokaliseerd via het menu
ControlPanel | Applications | Publishing | TeX .
	Geef de volgende opdracht om het dvi document te lezen
<tscreen><verb>
	xdvi -geometry 80x90 howto.dvi
	man xdvi
</verb></tscreen>
	En vergroot/verklein het venster met de muis.
	Gebruik om te navigeren de Pijltjestoetsen, Page Up, Page Down toetsen,
    tevens kun je gebruik maken van de lettertoetsen
	'f', 'd', 'u', 'c', 'l', 'r', 'p', 'n' voor respectievelijk
    naar boven, naar beneden, centreren, volgende pagina, vorige pagina, enz. 
	Druk de 'x' toets in om het expert menu uit te zetten.

Met het programma 'gv' (ghostview) of 'ghostscript' kun je het postscript
bestand lezen. Onder RedHat is het ghostscript programma te vinden in het 
ghostscript*rpm package en het programma gv in het gv*rpm package wat
te vinden is via het menu ControlPanel | Applications | Graphics.
Het programma gv is veel gebruikersvriendelijker dan ghostscript.
Ghostscript en gv zijn ook beschikbaar voor andere platformen, zoals
OS/2, Windows 95 en NT. Je kunt dit document zelfs onder deze platformen
bekijken.
 
<itemize>
<item>Ghostscript voor Windows 95, OS/2, en voor alle andere besturingssystemen
is op te halen vanaf <url url="http://www.cs.wisc.edu/~ghost">
</item>
</itemize>

Geef de opdracht
<tscreen><verb>
		gv howto.ps
		ghostscript howto.ps
</verb></tscreen>
om het postscript document te kunnen lezen.

Met Netscape Navigator, Microsoft Internet explorer, Redhat Baron Web browser
of een van de andere 10 webbrowsers kun je het document in HTML formaat lezen.

De uitvoer van LyX, de latex uitvoer, kun je lezen met LyX, een X-Window 
frontend naar latex.
</p>
</sect>
</article>
</linuxdoc>
