<!--
     The FreeBSD Dutch Documentation Project

     $FreeBSD$
     $FreeBSDnl: nl_NL.ISO8859-1/books/handbook/kernelconfig/chapter.sgml,v 1.20 2005/04/24 19:06:11 siebrand Exp $
     Gebaseerd op: 1.156
-->

<chapter id="kernelconfig">
  <chapterinfo>
    <authorgroup>
      <author>
	<firstname>Jim</firstname>
	<surname>Mock</surname>
	<contrib>Bijgewerkt en opnieuw gestructureerd door </contrib>
	<!-- Mar 2000 -->
      </author>
    </authorgroup>
    <authorgroup>
      <author>
	<firstname>Jake</firstname>
	<surname>Hamby</surname>
	<contrib>Oorspronkelijk bijgedragen door </contrib>
	<!-- 6 Oct 1995 -->
      </author>
    </authorgroup>
    <authorgroup>
      <author>
	<firstname>Ren&eacute;</firstname>
	<surname>Ladan</surname>
	<contrib>Vertaald door </contrib>
	<!-- 18 Nov 2004 -->
      </author>
    </authorgroup>
  </chapterinfo>

  <title>De &os;-kernel instellen</title>

  <sect1 id="kernelconfig-synopsis">
    <title>Samenvatting</title>

    <indexterm>
      <primary>kernel</primary>

      <secondary>een eigen kernel bouwen</secondary>
    </indexterm>

    <para>De kernel is de kern van het &os;-besturingssysteem en is
      verantwoordelijk voor het geheugenbeheer, het opleggen van
      beveiligingsregels, het aansturen van het netwerk, de toegang tot
      schijven en nog veel meer.  Hoewel steeds meer in &os; dynamisch
      instelbaar wordt, is het af en toe nodig om de kernel opnieuw in
      te stellen en te compileren.</para>

    <para>Na het lezen van dit hoofdstuk weet de lezer:</para>

    <itemizedlist>
      <listitem>
	<para>Waarom het nodig is om een eigen kernel te bouwen;
	</para>
      </listitem>

      <listitem>
	<para>Hoe een nieuw kernelinstellingenbestand te schrijven of
	  een bestaand kernelinstellingenbestand aan te passen;</para>
      </listitem>

      <listitem>
	<para>Hoe het kernelinstellingenbestand te gebruiken om een
	  nieuwe kernel aan te maken en te bouwen;</para>
      </listitem>

      <listitem>
	<para>Hoe een nieuwe kernel te installeren;</para>
      </listitem>

      <listitem>
	<para>Hoe de ingangen in <filename>/dev</filename> die nodig
	  kunnen zijn aan te maken;</para>
      </listitem>

      <listitem>
	<para>Hoe problemen op te lossen als er iets verkeerd gaat.
	</para>
      </listitem>
    </itemizedlist>

    <para>Alle opdrachten die in dit hoofdstuk als voorbeeld zijn
      gegeven moeten als <username>root</username> uitgevoerd worden om
      te slagen.</para>
  </sect1>

  <sect1 id="kernelconfig-custom-kernel">
    <title>Redenen om een eigen kernel te bouwen</title>

    <para>Traditioneel heeft &os; zoals dat heet een
      <quote>monolitische</quote> kernel gehad.  Dit betekent dat de
      kernel &eacute;&eacute;n groot programma was, een vaste lijst
      van apparaten ondersteunde en als het gewenst was om het gedrag
      van de kernel te veranderen, moest er een nieuwe kernel
      gecompileerd worden en moest daarna de computer opnieuw gestart
      worden met de nieuwe kernel.</para>

    <para>Vandaag de dag beweegt &os; zich snel naar een model waar
      veel van de functionaliteit van de kernel in modules zit die
      dynamisch in en uit de kernel kunnen worden geladen, naargelang
      dat noodzakelijk is.  Dit stelt de kernel in staat om zich aan
      nieuwe hardware aan te passen die plotseling beschikbaar komt
      (zoals PCMCIA-kaarten in een laptop) of om nieuwe functionaliteit
      in zich op te nemen die niet noodzakelijk was toen de kernel
      oorspronkelijk werd gecompileerd.  Dit staat bekend als een
      modulaire kernel.</para>

    <para>Desondanks is het nog steeds nodig om enkele dingen van de
      kernel statisch in te stellen.  In sommige gevallen komt dit
      doordat de functionaliteit zo diep geworteld zit in de kernel dat
      het niet dynamisch laadbaar gemaakt kan worden.  In andere
      gevallen kan het simpelweg komen doordat nog niemand de tijd
      heeft genomen om een dynamisch laadbare kernelmodule voor die
      functionaliteit te schrijven.</para>

    <para>Het bouwen van een eigen kernel is een van de meest
      belangrijke beproevingen die bijna elke BSD-gebruiker moet
      doorstaan.  Hoewel dit proces veel tijd in beslag neemt, levert
      het veel voordelen op voor een &os; systeem.  In tegenstelling
      tot de <filename>GENERIC</filename>-kernel, die vele typen
      hardware moet ondersteunen, ondersteunt een eigen kernel alleen
      de hardware van de computer waar hij voor gemaakt is.  Dit biedt
      een aantal voordelen, zoals:</para>

    <itemizedlist>
      <listitem>
	<para>Een snellere opstarttijd.  Aangezien de kernel alleen de
	  hardware zoekt die zich in het systeem bevindt, kan de tijd
	  die het systeem nodig heeft om op te starten aanzienlijk
	  korter worden;</para>
      </listitem>

      <listitem>
	<para>Minder geheugengebruik.  Een eigen kernel gebruikt vaak
	  minder geheugen dan de <filename>GENERIC</filename>-kernel,
	  wat van belang is aangezien de kernel zich altijd in het
	  echte geheugen moet bevinden.  Om deze reden is een eigen
	  kernel geknipt voor een systeem met een kleine hoeveelheid
	  RAM;</para>
      </listitem>

      <listitem>
	<para>Aanvullende hardware-ondersteuning.  Een eigen kernel kan
	  ingebouwde ondersteuning bieden voor apparaten die zich niet
	  in de <filename>GENERIC</filename>-kernel bevinden, zoals
	  geluidskaarten.</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="kernelconfig-building">
    <title>Bouwen en installeren van een eigen kernel</title>

    <indexterm>
      <primary>kernel</primary>

      <secondary>bouwen / installeren</secondary>
    </indexterm>

    <para>Eerst wordt er een overzicht gegeven van de mappen waarin de
      kernel gebouwd wordt.  Alle genoemde mappen staan onder de map
      <filename>/usr/src/sys</filename>, die ook toegankelijk is via
      de padnaam <filename>/sys</filename>.  Er zijn hier een aantal
      mappen aanwezig die de verschillende delen van de kernel
      representeren, maar de meest belangrijke hiervan zijn
      <filename><replaceable>arch</replaceable>/conf</filename>, waarin
      de eigen kernelinstellingen bewerkt worden en
      <filename>compile</filename>, waarin de eigen kernel gebouwd
      wordt.  <replaceable>arch</replaceable> representeert hier
      &eacute;&eacute;n van <filename>i386</filename>,
      <filename>alpha</filename>, <filename>amd64</filename>,
      <filename>ia64</filename>, <filename>powerpc</filename>,
      <filename>sparc64</filename> of <filename>pc98</filename> (een
      alternatieve ontwikkelingstak van PC-hardware die populair is in
      Japan).  Alles binnen de map van een bepaalde architectuur is er
      alleen voor die architectuur.  De rest van de code is
      machine-onafhankelijk en hetzelfde op alle platformen waarnaar
      &os; eventueel geport kan worden.  De indeling van de
      mapstructuur is logisch: alle ondersteunde apparaten,
      bestandssystemen en opties staan in een eigen submap.  Versies
      van &os; beneden 5.X ondersteunen alleen de
      <filename>i386</filename>-, <filename>alpha</filename>- en
      <filename>pc98</filename>-architecturen.</para>

    <para>Dit hoofdstuk veronderstelt dat de i386-architectuur in de
      voorbeelden gebruikt wordt.  Als dit voor de lezer anders is,
      moeten de juiste aanpassingen aan de padnamen worden gemaakt voor
      de architectuur van zijn systeem.</para>

    <note>
      <para>Als de map <filename>/usr/src/sys</filename>
	<emphasis>niet</emphasis> aanwezig is op een systeem, dan is de
	kernelbroncode niet ge&iuml;nstalleerd.  De eenvoudigste manier
	om dit te doen is door <command>sysinstall</command> (
	<command>/stand/sysinstall</command> voor versies van &os;
	ouder dan 5.2) te draaien als <username>root</username> en
	<guimenuitem>Configure</guimenuitem>,
	<guimenuitem>Distributions</guimenuitem>,
	<guimenuitem>src</guimenuitem>, <guimenuitem>sys</guimenuitem>
	te kiezen.  Als <application>sysinstall</application> ongewenst
	is en er toegang is tot een <quote>offici&euml;le</quote>
	&os; cd-rom, is de broncode ook vanaf de opdrachtregel te
	installeren:</para>

      <screen>&prompt.root; <userinput>mount /cdrom</userinput>
&prompt.root; <userinput>mkdir -p /usr/src/sys</userinput>
&prompt.root; <userinput>ln -s /usr/src/sys /sys</userinput>
&prompt.root; <userinput>cat /cdrom/src/sys.[a-d]* | tar -xzvf -</userinput></screen>
    </note>

    <para>Daarna kan vanuit de map
      <filename><replaceable>arch</replaceable>/conf</filename> het
      instellingenbestand <filename>GENERIC</filename> naar de naam
      voor de eigen kernel gekopieerd worden:</para>

    <screen>&prompt.root; <userinput>cd /usr/src/sys/<replaceable>i386</replaceable>/conf</userinput>
&prompt.root; <userinput>cp GENERIC MIJNKERNEL</userinput></screen>

    <para>Traditioneel bestaat deze naam geheel uit hoofdletters en als
      er meerdere &os;-machines worden beheerd met verschillende
      hardware is het een goed idee om het te vernoemen naar de
      hostnaam van de machine.  Omwille van dit voorbeeld wordt het
      <filename>MIJNKERNEL</filename> genoemd.</para>

    <tip>
      <para>Het kernelinstellingenbestand direct onder
	<filename>/usr/src</filename> opslaan kan een slecht idee zijn.
	In geval van problemen kan het verleidelijk zijn om
	<filename>/usr/src</filename> te verwijderen en opnieuw te
	beginnen.  Nadat dit gedaan is kost het vaak maar enkele
	seconden om te realiseren dat het instellingenbestand voor de
	eigen kernel verwijderd is.  Ook moet
	<filename>GENERIC</filename> niet gewijzigd worden, omdat het
	tijdens de volgende keer dat de <link linkend="cutting-edge">
	  broncodestructuur bijgewerkt wordt</link>, overschreven kan
	worden waarbij de wijzigingen in de kernelinstellingen verloren
	gaan.</para>

      <para>Het kan gewenst zijn om het kernelinstellingenbestand
	ergens anders op te slaan en een symbolische link naar het
	bestand in de map
	<filename><replaceable>i386</replaceable></filename> aan te
	maken:</para>

      <screen>&prompt.root; <userinput>cd /usr/src/sys/<replaceable>i386</replaceable>/conf</userinput>
&prompt.root; <userinput>mkdir /root/kernels</userinput>
&prompt.root; <userinput>cp GENERIC /root/kernels/<replaceable>MIJNKERNEL</replaceable></userinput>
&prompt.root; <userinput>ln -s /root/kernels/<replaceable>MIJNKERNEL</replaceable></userinput></screen>
    </tip>

    <para>Nu moet <filename>MIJNKERNEL</filename> met de favoriete
      tekstverwerker bewerkt worden.  Voor beginners is waarschijnlijk
      alleen de tekstverwerker <application>vi</application>
      beschikbaar, die te ingewikkeld is om hier te beschrijven, maar
      goed is beschreven in vele boeken in de <link
	linkend="bibliography">bibliografie</link>.  &os; biedt ook de
      eenvoudigere tekstverwerker <application>ee</application>, die
      voor een beginner de keuze bij uitstek is.  De commentaarregels
      in het begin kunnen gewijzigd worden om de persoonlijke
      instellingen of de veranderingen die gemaakt zijn ten opzichte
      van <filename>GENERIC</filename> weer te geven.</para>

    <indexterm><primary>&sunos;</primary></indexterm>

    <para>Voor degenen die een kernel op &sunos; of een andere BSD
      hebben gebouwd zal veel van dit bestand bekend voorkomen.
      Echter, voor degenen die van een ander besturingssysteem zoals
      DOS komen, kan het instellingenbestand
      <filename>GENERIC</filename> overdonderend overkomen, dus moeten
      de beschrijvingen in de sectie <link
	linkend="kernelconfig-config">Het Instellingenbestand</link>
      zorgvuldig opgevolgd worden.</para>

    <note>
      <para>Als de <link
	  linkend="cutting-edge">broncodestructuur
	  gesynchroniseerd</link> is met de nieuwste broncode van het
	&os;-project, moet altijd
	<filename>/usr/src/UPDATING</filename> gelezen worden voordat
	enige updatestappen worden genomen.  Dit bestand beschrijft
	alle belangrijke zaken en gebieden binnen de broncodestructuur
	die speciale aandacht nodig hebben.
	<filename>/usr/src/UPDATING</filename> komt altijd overeen met
	de lokale versie van de &os;-broncode en is daarom meer
	bijgewerkt met nieuwe informatie dan dit handboek.</para>
    </note>

    <para>Nu moet de broncode voor de kernel gecompileerd worden.
      Hiervoor zijn twee procedures beschikbaar en degene die gebruikt
      wordt hangt af van de reden waarom de kernel opnieuw gebouwd
      wordt en de gebruikte versie van &os;.</para>

    <itemizedlist>
      <listitem>
	<para>Als <emphasis>alleen</emphasis> de kernelbroncode is
	  ge&iuml;nstalleerd, moet procedure 1 gevolgd worden.</para>
      </listitem>

      <listitem>
	<para>Als een versie van &os; lager dan 4.0 wordt gedraaid, en
	  er <emphasis>niet</emphasis> wordt geupdate naar
	  &os;&nbsp;4.0 of hoger door middel van de
	  <command>make buildworld</command>&ndash;procedure, moet
	  procedure 1 gebruikt worden.</para>
      </listitem>

      <listitem>
	<para>Als er een nieuwe kernel gebouwd wordt zonder dat de
	  broncode geupdate wordt (misschien om een nieuwe optie, zoals
	  <literal>IPFIREWALL</literal>, toe te voegen), kunnen beide
	  procedures gebruikt worden.</para>
      </listitem>

      <listitem>
	<para>Als de kernel opnieuw wordt gebouwd als onderdeel van een
	  <command>make buildworld</command>-proces, moet procedure 2
	  gebruikt worden.</para>
      </listitem>
    </itemizedlist>

    <indexterm><primary><command>cvsup</command></primary></indexterm>

    <indexterm><primary>CTM</primary></indexterm>

    <indexterm>
      <primary>CVS</primary>

      <secondary>anoniem</secondary>
    </indexterm>

    <para>Als de broncodestructuur <emphasis>niet</emphasis> op enige
      wijze bijgewerkt is sinds de laatste keer dat er met succes een
      <maketarget>buildworld</maketarget>-<maketarget>installworld</maketarget>
      cyclus werd uitgevoerd, <application>CVSup</application> noch
      <application>CTM</application> werden gedraaid en
      <application>anoncvs</application> werd niet gebruikt, dan is
      het veilig om <command>config</command>,
      <command>make depend</command>, <command>make</command>,
      <command>make install</command> te gebruiken.</para>

    <procedure>
      <title>Procedure 1: een kernel op <quote>traditionele
	  wijze</quote> bouwen</title>

      <step>
	<para>Draai &man.config.8; om de kernelbroncode aan te
	  maken:</para>

	<screen>&prompt.root; <userinput>/usr/sbin/config <replaceable>MIJNKERNEL</replaceable></userinput></screen>
      </step>

      <step>
	<para>Ga naar de bouwmap.  &man.config.8; geeft de naam van
	  deze map nadat het gedraaid is zoals boven is
	  aangegeven:</para>

	<screen>&prompt.root; <userinput>cd ../compile/<replaceable>MIJNKERNEL</replaceable></userinput></screen>

	<para>Voor &os; versies lager dan 5.0 moet het volgende
	  gebruikt worden:</para>

	<screen>&prompt.root; <userinput> cd ../../compile/<replaceable>MIJNKERNEL</replaceable></userinput></screen>
      </step>

      <step>
	<para>Compileer de kernel:</para>

	<screen>&prompt.root; <userinput>make depend</userinput>
&prompt.root; <userinput>make</userinput></screen>
      </step>

      <step>
	<para>Installeer de nieuwe kernel:</para>

	<screen>&prompt.root; <userinput>make install</userinput></screen>
      </step>
    </procedure>

    <procedure>
      <title>Procedure 2: een kernel op de <quote>nieuwe wijze</quote>
	bouwen</title>

      <step>
	<para>Ga naar de map <filename>/usr/src</filename>:</para>

	<screen>&prompt.root; <userinput>cd /usr/src</userinput></screen>
      </step>

      <step>
	<para>Compileer de kernel:</para>

	<screen>&prompt.root; <userinput>make buildkernel KERNCONF=<replaceable>MIJNKERNEL</replaceable></userinput></screen>
      </step>

      <step>
	<para>Installeer de nieuwe kernel:</para>

	<screen>&prompt.user; <userinput>make installkernel KERNCONF=<replaceable>MIJNKERNEL</replaceable></userinput></screen>
      </step>
    </procedure>

    <note>
      <para>In &os;&nbsp;4.2 en eerder moet
	<literal>KERNCONF=</literal> door <literal>KERNEL=</literal>
	vervangen worden.  Een 4.2-STABLE die voor 2 februari 2001 is
	opgehaald herkent <literal>KERNCONF=</literal> niet.</para>
    </note>

    <indexterm><primary><filename class="directory">/boot/kernel.old</filename></primary></indexterm>

    <para>De nieuwe kernel wordt naar de map <filename
	class="directory">/boot/kernel</filename> gekopieerd als
      <filename>/boot/kernel/kernel</filename> en de oude kernel wordt
      verplaatst naar <filename>/boot/kernel.old/kernel</filename>.  Nu
      moet het systeem afgesloten worden en opnieuw worden opgestart om
      gebruik te maken van de nieuwe kernel.  Er zijn wat instructies
      voor <link linkend="kernelconfig-trouble">problemen
	oplossen</link> aan het einde van dit hoofdstuk, die erg nuttig
      kunnen zijn als er iets misgaat.  Vergeet niet om het gedeelte te
      lezen waarin staat uitgelegd hoe te herstellen als de nieuwe
      kernel <link linkend="kernelconfig-noboot">niet
	opstart</link>.</para>

    <note>
      <para>In &os;&nbsp;4.X en eerder worden kernels in
	<filename>/kernel</filename> en modules in <filename
	  class="directory">/modules</filename> ge&iuml;nstalleerd en
	worden oude kernels gebackupt in
	<filename>/kernel.old</filename>.  Andere bestanden die te
	maken hebben met het opstartproces, zoals de boot
	&man.loader.8; en instellingen worden opgeslagen in
	<filename>/boot</filename>.  Modules van derde partijen of
	eigen modules kunnen in <filename
	  class="directory">/modules</filename> opgeslagen worden,
	alhoewel gebruikers erop bedacht moeten zijn dat het erg
	belangrijk is dat de modules synchroon worden gehouden met de
	gecompileerde kernel.  Modules die niet bedoeld zijn om met de
	gecompileerde kernel te draaien kunnen voor instabiliteit of
	onjuistheden zorgen.</para>
      </note>

      <note>
	<para>Als er nieuwe apparaten (zoals geluidskaarten) zijn
	  toegevoegd en &os;&nbsp;4.X of eerder wordt gedraaid, kan het
	  zijn dat er enkele apparaatnodes aan de map <filename
	    class="directory">/dev</filename> moeten worden toegevoegd,
	  voordat ze gebruikt kunnen worden.  Er staat meer informatie
	  in het <link linkend="kernelconfig-nodes">Apparaatnodes
	    maken</link> later in dit hoofdstuk.</para>
      </note>
  </sect1>

  <sect1 id="kernelconfig-config">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Joel</firstname>
	  <surname>Dahl</surname>
	  <contrib>Bijgewerkt voor &os;&nbsp;5.X door </contrib>
	  <!-- augustus 2004, PR docs/70674 -->
	</author>
	<!-- <editor><othername role="freefall login">ceri</othername></editor> -->
      </authorgroup>
    </sect1info>

    <title>Het instellingenbestand</title>

    <indexterm>
      <primary>kernel</primary>

      <secondary>NOTES</secondary>
    </indexterm>

    <indexterm>
      <primary>kernel</primary>

      <secondary>LINT</secondary>
    </indexterm>

    <indexterm><primary>NOTES</primary></indexterm>

    <indexterm><primary>LINT</primary></indexterm>

    <indexterm>
      <primary>kernel</primary>

      <secondary>instellingenbestand</secondary>
    </indexterm>

    <para>Het algemene formaat van een instellingenbestand is vrij
      eenvoudig.  Elke regel bevat een sleutelwoord en
      &eacute;&eacute;n of meer argumenten.  Omwille van de eenvoud
      bevatten de meeste regels maar &eacute;&eacute;n argument.  Alles
      wat na een <literal>#</literal> komt, wordt als commentaar
      beschouwd en genegeerd.  De volgende gedeelten beschrijven elk
      sleutelwoord, in het algemeen in dezelfde volgorde als
      <filename>GENERIC</filename>, alhoewel sommige samenhangende
      sleutelwoorden gegroepeerd zijn in een enkel gedeelte (zoals
      Netwerken) zelfs al staan ze verspreid in het bestand
      <filename>GENERIC</filename>.  <anchor id="kernelconfig-options">
      Een uitputtende lijst van architectuurafhankelijke opties en
      apparaten staat in het bestand <filename>NOTES</filename>, dat in
      dezelfde map staat als <filename>GENERIC</filename>.
      Architectuuronafhankelijke opties staan in
      <filename>/usr/src/sys/conf/NOTES</filename>.</para>

    <note>
      <para><filename>NOTES</filename> bestaat niet in &os;&nbsp;4.X.
	In plaats daarvan bevat het bestand <filename>LINT</filename>
	een uitgebreide uitleg over opties en apparaten in
	<filename>GENERIC</filename>.  <filename>LINT</filename> had
	twee doelen in 4.X:  een naslagwerk leveren om kernelopties te
	kiezen voor het bouwen van een eigen kernel en een
	kernelinstelling leveren met zoveel mogelijk instelbare opties
	ingesteld op niet-standaardwaarden.  De redenering hierachter
	was dat zo'n instelling veel hielp (en nog steeds helpt) met
	het testen van nieuwe code en veranderingen aan bestaande code
	die conflicten met andere delen van de kernel kunnen
	veroorzaken.  Er zijn in 5.X echter een hoop veranderingen
	gemaakt aan het raamwerk van kernelinstellingen.  Een voorbeeld
	hiervan is dat de instelopties van de stuurprogramma's zijn
	verplaatst naar een bestand <filename>hints</filename> zodat ze
	tijdens het opstarten dynamisch veranderd en geladen kunnen
	worden, en <filename>LINT</filename> kon deze aanwijzingen niet
	meer bevatten.  Om deze en andere redenen is
	<filename>LINT</filename> hernoemd tot
	<filename>NOTES</filename> en heeft het hoofdzakelijk z'n
	eerste bestaansreden gehouden: de beschikbare opties
	documenteren voor gebruikersgemak.</para>

      <para>In &os;&nbsp;5.X en latere versies is het nog steeds
	mogelijk om een bouwbaar bestand <filename>LINT</filename> aan
	te maken door middel van:</para>

      <screen>&prompt.root; <userinput>cd /usr/src/sys/<replaceable>i386</replaceable>/conf && make LINT</userinput></screen>
    </note>

    <indexterm>
      <primary>kernel</primary>

      <secondary>instellingenbestand</secondary>
    </indexterm>

    <para>Het volgende is een voorbeeld van het
      kernelinstellingenbestand <filename>GENERIC</filename> met
      aanvullend commentaar omwille van de helderheid.  Dit voorbeeld
      is redelijk gelijk aan de versie in
      <filename>/usr/src/sys/<replaceable>i386</replaceable>/conf/GENERIC</filename>.</para>

    <programlisting>#
# GENERIC -- Standaard kernelinstellingenbestand voor &os;/i386
#
# Meer informatie over dit bestand staat in het onderdeel Het Instellen
# van de FreeBSD-kernel in het handboek:
#
#    http://www.FreeBSD.org/doc/nl_NL.ISO8859-1/books/handbook/kernelconfig-config.html
#
# Het handboek is ook lokaal beschikbaar in /usr/share/doc/handbook
# als de doc distributie is ge&iuml;nstalleerd.  Op de &os; World Wide Web
# server (http://www.FreeBSD.org/) staat altijd de meest recente
# informatie.
#
# Een uitputtende lijst met opties en meer gedetailleerde beschrijving
# van de apparaatregels staat ook in de bestanden ../../conf/NOTES en
# NOTES.
# Bij twijfel over het doel en de noodzaak van een regel dient eerst in
# NOTES gekeken te worden.
#
# &dollar;FreeBSD: /repoman/r/ncvs/src/sys/i386/conf/GENERIC,v 1.413 2004/08/11 01:34:18 rwatson Exp &dollar;</programlisting>

    <para>De volgende sleutelwoorden zijn noodzakelijk in
      <emphasis>elke</emphasis> kernel die gebouwd wordt:</para>

    <indexterm>
      <primary>kernelopties</primary>

      <secondary>machine</secondary>
    </indexterm>

    <programlisting>machine   i386</programlisting>

    <para>Dit is de architectuur van de machine.  Het moet
      &eacute;&eacute;n van <literal>alpha</literal>,
      <literal>amd64</literal>, <literal>i386</literal>,
      <literal>ia64</literal>, <literal>pc98</literal>,
      <literal>powerpc</literal> of <literal>sparc64</literal>
      zijn.</para>

    <indexterm>
      <primary>kernelopties</primary>

      <secondary>cpu</secondary>
    </indexterm>

    <programlisting>cpu   I486_CPU
cpu   I586_CPU
cpu   I686_CPU</programlisting>

    <para>Bovenstaande optie geeft het type CPU aan dat in een systeem
      zit.  De CPU-regel kan meerdere keren voorkomen (als bijvoorbeeld
      onbekend is of <literal>I586_CPU</literal> of
      <literal>I686_CPU</literal> gebruikt moet worden), maar voor een
      eigen kernel is het beter om alleen de aanwezige CPU aan te
      geven.  Als er twijfel bestaat over het type CPU, kan het bestand
      <filename>/var/run/dmesg.boot</filename> worden bekeken voor de
      opstartberichten.</para>

    <indexterm>
      <primary>kernelopties</primary>

      <secondary>cputype</secondary>
    </indexterm>

    <para>De broncode van &os; bevat nog steeds ondersteuning voor
      <literal>I386_CPU</literal>, maar staat standaard uit in zowel
      -STABLE als -CURRENT.  Dit betekent dat er nu de volgende
      mogelijkheden zijn om &os; op een CPU van de 386-klasse te
      installeren:</para>

    <itemizedlist>
      <listitem>
	<para>Installeer een oudere versie van &os; en herbouw vanuit
	  de broncode zoals beschreven staat in <xref
	    linkend="kernelconfig-building">.</para>
      </listitem>

      <listitem>
	<para>Bouw userland en de kernel op een nieuwere machine en
	  verricht de installatie op de 386 door gebruik te maken van
	  de voorgecompileerde bestanden in
	  <filename>/usr/obj</filename> (in <xref linkend="small-lan">
	  staan details).</para>
      </listitem>

      <listitem>
	<para>Maak een eigen versie van &os; die ondersteuning voor
	  <literal>I386_CPU</literal> bevat in de kernels van de
	  installatie-cd-rom.</para>
      </listitem>
    </itemizedlist>

    <para>De eerste van deze opties is waarschijnlijk de
      gemakkelijkste, maar deze heeft veel schijfruimte nodig wat een
      probleem kan zijn voor 386-klasse machines.</para>

    <indexterm>
      <primary>kernelopties</primary>

      <secondary>ident</secondary>
    </indexterm>

    <programlisting>ident   GENERIC</programlisting>

    <para>Dit is de identificatie van de kernel.  Dit moet veranderd
      worden in de naam van de kernel, dus
      <literal>MIJNKERNEL</literal> als de instructies van de
      voorgaande voorbeelden gevolgd zijn.  De waarde in de string
      <literal>ident</literal> wordt afgebeeld wanneer de kernel
      opstart, dus is het handig om de nieuwe kernel een andere naam te
      geven als deze apart moet worden gehouden van de gebruikelijke
      kernel (als er bijvoorbeeld een experimentele kernel gebouwd
      wordt).</para>

    <indexterm>
      <primary>kernelopties</primary>

      <secondary>maxusers</secondary>
    </indexterm>

    <programlisting>maxusers	<replaceable>n</replaceable></programlisting>

    <para>De optie <literal>maxusers</literal> stelt de grootte van een
      aantal belangrijke systeemtabellen in.  Dit aantal moet ruwweg
      gelijk zijn aan het aantal gebruikers dat verwacht wordt
      gelijktijdig van de machine gebruik te maken.</para>

    <para>Met ingang van &os;&nbsp;4.5 stelt het systeem deze waarde
      zelf in als deze uitdrukkelijk op <literal>0</literal> is gezet.

      <footnote>
	<para>Het auto-tuning-algoritme stelt
	  <literal>maxusers</literal> in afhankelijk van de hoeveelheid
	  geheugen in het systeem, met een minimum van 32 en een
	  maximum van 384.</para>
      </footnote>

      In &os;&nbsp;5.X en hoger heeft <literal>maxusers</literal> een
      standaardwaarde van 0 als deze niet gespecificeerd is.  Als er
      een versie van &os; lager dan 4.5 wordt gebruikt of het gewenst
      is om de waarde zelf te beheren, wordt aangeraden om
      <literal>maxusers</literal> minstens op 4 te zetten, met name als
      het X Window systeem in gebruik is of als er software
      gecompileerd wordt.  De reden hiervoor is dat de belangrijkste
      tabel die door <literal>maxusers</literal> ingesteld wordt, het
      maximum aantal processen is, dat ingesteld wordt op <literal>20 +
      16 * maxusers</literal>, dus als <literal>maxusers</literal> op 1
      ingesteld wordt, zijn er maar 36 gelijktijdige processen
      mogelijk, inclusief de ongeveer achttien processen die door het
      systeem tijdens het opstarten start en de ongeveer vijftien
      processen die waarschijnlijk aangemaakt worden door het opstarten
      van het X Window systeem.  Zelfs een eenvoudige taak als het
      afbeelden van een hulppagina start negen processen op om de
      pagina te filteren, te decomprimeren en af te beelden.  Als
      <literal>maxusers</literal> op 64 ingesteld wordt, zijn er 1044
      gelijktijdige processen mogelijk, wat genoeg moet zijn voor bijna
      alle soorten gebruik.  Als echter de gevreesde fout
      <errortype>proc table full</errortype> verschijnt als er
      geprobeerd wordt om een programma op te starten of als er een
      server gedraaid wordt met een groot aantal gelijktijdige
      gebruikers, zoals <hostid role="fqdn">ftp.FreeBSD.org</hostid>,
      kan het getal altijd verhoogd worden en kan de kernel opnieuw
      gebouwd worden.</para>

    <note>
      <para><literal>maxusers</literal> stelt <emphasis>geen</emphasis>
	grens aan het aantal gebruikers dat op de machine kan
	aanmelden.  Het stelt gewoon verschillende tabelgroottes in op
	redelijke waardes, uitgaande van het maximum aantal gebruikers
	dat waarschijnlijk de machine gebruikt en van het aantal
	processen dat elk van deze gebruikers zal draaien.  Een
	sleutelwoord dat <emphasis>wel</emphasis> het aantal
	gelijktijdige aanmeldingen op afstand en X-terminalvensters
	begrenst is <link
	  linkend="kernelconfig-ptys"><literal>pseudo-device pty
	    16</literal></link>.  In &os;&nbsp;5.X kan dit getal
	genegeerd worden omdat daar het stuurprogramma &man.pty.4;
	<quote>auto-cloning</quote> is.  Er kan eenvoudig gebruik
	worden gemaakt van de regel <literal>device pty</literal> in
	het instellingenbestand.</para>
    </note>

    <programlisting># Floating point ondersteuning - niet uitschakelen.
device    npx</programlisting>

    <para><literal>npx</literal> is de interface naar de wiskundige
      floating point-eenheid in &os;, die ofwel de hardware coprocessor
      is ofwel de softwarematige wiskundige emulator.  Dit is
      <emphasis>niet</emphasis> optioneel.</para>

    <programlisting># Pseudo devices
device    loop      # Netwerk loopback</programlisting>

    <para>Dit is het generieke loopbackapparaat voor TCP/IP.  Als
      telnet of FTP op <hostid>localhost</hostid> (ook bekend als
      <hostid role="ipaddr">127.0.0.1</hostid>) gebruikt wordt, loopt
      dat via dit apparaat.  Dit is <emphasis>verplicht</emphasis>.  Op
      &os;&nbsp;4.X moet de volgende regel gebruikt worden:</para>

    <programlisting># Gebruiken in &os;&nbsp;4.X
pseudo-device    loop</programlisting>

    <para>Alles wat nu volgt is min of meer optioneel.  Meer informatie
      over elke optie staat in de notities eronder of ernaast.</para>

    <programlisting>#Om statisch te compileren in device wiring in plaats van /boot/device.hints.
#hints    "GENERIC.hints"     # Standaardlocatie voor devices.</programlisting>

    <para>In &os;&nbsp;5.X en nieuwer wordt &man.device.hints.5;
      gebruikt om opties van de programma's die de apparaten aansturen
      in te stellen.  De standaardplaats die &man.loader.8; controleert
      tijdens het opstarten is <filename>/boot/device.hints</filename>.
      Met de optie <literal>hints</literal> is het mogelijk om deze
      aanwijzingen statisch in de kernel te compileren, waardoor er
      geen noodzaak is om een bestand <filename>device.hints</filename>
      in <filename>/boot</filename> aan te maken.</para>

    <!-- XXX: -->

    <programlisting>#makeoptions        DEBUG=-g  # Bouw kernel met gdb(1) debug symbolen.</programlisting>

    <para>Om ruimte te sparen in de installatieplaats voegt het normale
      bouwproces van &os; geen debug-informatie toe tijdens het bouwen
      van de kernel en stript de meeste symbolen nadat de resulterende
      kernel is gelinkt.  Voor het testen van kernels van de tak
      -CURRENT of van zelfgemaakte veranderingen in de &os;-kernel kan
      het gewenst zijn om deze regel uit te commentari&euml;ren.  Dit
      zet het gebruik van de optie <option>-g</option> aan die
      debug-informatie aanzet als de broncode wordt doorgegeven aan
      &man.gcc.1;.  Hetzelfde kan bereikt worden met de optie
      <option>-g</option> van &man.config.8; als de
      <quote>traditionele</quote> manier wordt gebruikt om een kernel
      te bouwen.  Meer informatie staat in <xref
	linkend="kernelconfig-building">.</para>

    <programlisting>options   SCHED_4BSD    # 4BSD taakplanner</programlisting>

    <!-- (rcl) ULE uitgeschakeld op RELENG_5 (en _4 ?), PR -->
    <para>De traditionele taakplanner voor &os;.  Afhankelijk van de
      systeembelasting kan de prestatie worden verhoogd door de nieuwe
      scheduler ULE voor &os; te gebruiken, die speciaal voor SMP
      ontworpen is, maar ook goed werkt op UP-systemen.  Vervang
      desgewenst, om deze uit te proberen,
      <literal>SCHED_4BSD</literal> door <literal>SCHED_ULE</literal>
      in het instellingenbestand.</para>

    <programlisting>options   INET      # internetwerken</programlisting>

    <para>Netwerkondersteuning.  Laat dit aanstaan, zelfs als een
      verbinding met een netwerk niet gepland is.  De meeste
      programma's hebben tenminste een loopbacknetwerk nodig (dat wil
      zeggen het maken van netwerkverbindingen binnen de PC), dus dit
      is eigenlijk verplicht.</para>

    <programlisting>options   INET6     # IPv6 communicatieprotocollen</programlisting>

    <para>Dit zet de IPv6-communicatieprotocollen aan.</para>

    <programlisting>options   FFS       # Berkeley Fast Bestandssysteem</programlisting>

    <para>Dit is het basisbestandssysteem voor de harde schijf.  Laat
      dit erin staan als er vanaf de harde schijf wordt
      opgestart.</para>

    <programlisting>options   SOFTUPDATES   # Schakel FFS Softupdates ondersteuning in</programlisting>

    <para>Deze optie zet softupdates in de kernel aan en helpt om de
      schijftoegang voor schrijven te verhogen.  Zelfs als deze
      functionaliteit door de kernel geleverd wordt, moet die voor
      specifieke schijven worden aangezet.  Bekijk de uitvoer van
      &man.mount.8; om te zien of softupdates aanstaat voor de
      systeemschijven.  Als de optie <literal>soft-updates</literal>
      niet zichtbaar is, dient deze geactiveerd te worden met behulp
      van &man.tunefs.8; voor bestaande bestandssystemen of
      &man.newfs.8; voor nieuwe bestandssystemen.</para>

    <programlisting>options   UFS_ACL   # Ondersteuning voor toeganscontrolelijsten</programlisting>

    <para>Met deze optie, die alleen in &os;&nbsp;5.X aanwezig is,
      wordt de ondersteuning voor toegangscontrolelijsten aangezet.
      Hiervoor zijn uitgebreide attributen en <acronym>UFS2</acronym>
      nodig.  Een en ander wordt in detail beschreven in <xref
	linkend="fs-acl">.  <acronym>ACL</acronym>'s staan standaard
      aan en moeten niet uitgezet worden in de kernel als ze al eerder
      op een bestandssysteem zijn gebruikt, omdat dit de
      toegangscontrolelijsten verwijdert en hierdoor de manier waarop
      bestanden beschermd worden op onvoorspelbare wijze
      verandert.</para>

    <programlisting>options   UFS_DIRHASH   # Verbeter prestaties in grote mappen</programlisting>

    <para>Deze optie bevat functionaliteit om schijfoperaties op grote
      mappen te versnellen, ten koste van extra geheugen.  Deze staat
      normaalgesproken, zoals voor een grote server of interactief
      werkstation, aan en wordt uitgezet als &os; op een kleiner
      systeem wordt gebruikt waar geheugen het belangrijkste en
      schijfsnelheid minder belangrijk is, zoals voor een
      firewall.</para>

    <programlisting>options   MD_ROOT   # MD is een potentieel rootapparaat</programlisting>

    <para>Deze optie zet ondersteuning aan voor een virtu&euml;le
      schijf die in het geheugen wordt ge&iuml;mplementeerd en als
      rootapparaat wordt gebruikt.</para>

    <indexterm>
      <primary>kernelopties</primary>

      <secondary>NFS</secondary>
    </indexterm>

    <indexterm>
      <primary>kernelopties</primary>

      <secondary>NFS_ROOT</secondary>
    </indexterm>

    <programlisting>options   NFSCLIENT    # Netwerk Bestandssysteem Client
options   NFSSERVER    # Netwerk Bestandssysteem Server
options   NFS_ROOT     # NFS bruikbaar als /, NFSCLIENT nodig</programlisting>

    <para>Het netwerkbestandssysteem.  Dit kan weggelaten worden tenzij
      er gepland is om partities te mounten van een &unix;
      bestandsserver over TCP/IP.</para>

    <indexterm>
      <primary>kernelopties</primary>

      <secondary>MSDOSFS</secondary>
    </indexterm>

    <programlisting>options   MSDOSFS   # MSDOS Bestandssysteem</programlisting>

    <para>Het &ms-dos; bestandssysteem.  Dit kan veilig weggelaten
      worden, tenzij er gepland is om een DOS-geformatteerde partitie
      van de harde schijf tijdens het opstarten te mounten.  Het wordt
      automatisch geladen als er voor de eerste keer een DOS-partitie
      wordt gemount, zoals boven beschreven.  Bovendien geeft de
      uitstekende software <filename
	role="package">emulators/mtools</filename> toegang tot
      DOS-floppies zonder dat ze gemount en gedismount moeten worden en
      heeft het <literal>MSDOSFS</literal> helemaal niet nodig.</para>

    <programlisting>options   CD9660    # ISO 9660 Bestandssysteem</programlisting>

    <para>Het ISO 9960-bestandssysteem voor cd-roms.  Commentarieer dit
      uit als er geen cd-rom drive aanwezig is of als er slechts af en
      toe data-cd-roms gemount worden (aangezien het dynamisch geladen
      wordt als er voor de eerste keer een data-cd-rom gemount wordt).
      Audio-CD's hebben dit bestandssysteem niet nodig.</para>

    <programlisting>options   PROCFS    # Procesbestandssysteem</programlisting>

    <para>Het procesbestandssysteem.  Dit is een <quote>als-of</quote>
      bestandssysteem, gemount in <filename>/proc</filename>, dat
      programma's als &man.ps.1; in staat stelt om meer informatie over
      de draaiende processen te geven.  In &os;&nbsp;5.X en hoger is
      het onder de meeste omstandigheden niet nodig om
      <literal>PROCFS</literal> te gebruiken, omdat de meeste debug- en
      monitorgereedschappen zijn aangepast om zonder
      <literal>PROCFS</literal> te draaien.  In tegenstelling tot
      &os;&nbsp;4.X mounten nieuwe installaties op &os;&nbsp;5.X
      standaard het procesbestandssysteem niet.  Bovendien moeten
      6.X-CURRENT kernels die gebruik maken van
      <literal>PROCFS</literal>, nu ook ondersteuning bevatten voor
      <literal>PSEUDOFS</literal>:</para>

    <programlisting>options   PSEUDOFS  # Pseudo-bestandssysteem framework</programlisting>

    <para><literal>PSEUDOFS</literal> is niet beschikbaar in
      &os;&nbsp;4.X.</para>

    <programlisting>options   GEOM_GPT  # GUID Partitietabellen.</programlisting>

    <para>Met deze optie kan een groot aantal partities op een enkele
      schijf aanwezig zijn.</para>

    <programlisting>options   COMPAT_43 # Compatibel met BSD 4.3 [ERIN HOUDEN!]</programlisting>

    <para>Compatibiliteit met 4.3BSD.  Laat dit aanstaan.  Sommige
      programma's gedragen zich vreemd als dit uitgecommentarieerd
      wordt.</para>

    <programlisting>options   COMPAT_FREEBSD4     # Compatibel met &os; 4</programlisting>

    <para>Deze optie is nodig op &os;&nbsp;5.X &i386; en Alpha systemen
      om ondersteuning te bieden aan applicaties die gecompileerd zijn
      op oudere versies van &os; en gebruik maken van oudere
      systeemaanroep-interfaces.  Het is aanbevolen dat deze optie
      gebruikt wordt op alle &i386; en Alpha systemen die mogelijk
      oudere applicaties draaien.  Voor platformen die pas in 5.X
      ondersteuning verwierven, zoals ia64 en &sparc64;, is deze optie
      niet nodig.</para>

    <programlisting>options   SCSI_DELAY=15000    # Vertraging (in ms) voordat SCSI wordt afgezocht.</programlisting>

    <para>Dit zorgt ervoor dat de kernel vijftien seconden wacht
      voordat die elk SCSI-apparaat in het systeem afzoekt.  Als er
      alleen IDE harde schijven zijn, kan deze optie genegeerd worden,
      anders is het misschien wenselijk om deze waarde te verlagen tot
      vijf seconden, om het opstarten te versnellen.  Uiteraard moet
      deze waarde weer verhoogd worden als &os; problemen heeft om de
      SCSI-apparaten te herkennen.</para>

    <programlisting>options   KTRACE    # ktrace(1) ondersteuning</programlisting>

    <para>Dit schakelt kernelondersteuning voor het volgen processen
      in, wat handig is tijdens debuggen.</para>

    <programlisting>options   SYSVSHM   # SYSV-stijl gedeeld geheugen</programlisting>

    <para>Deze optie biedt System&nbsp;V gedeeld geheugen.  Meestal
      wordt dit wegens de XSHM-uitbreiding in X gebruikt, waar door
      vele grafische programma's automatisch gebruik van wordt gemaakt
      voor extra snelheid.  Als X gebruik wordt, is het raadzaam om dit
      op te nemen.</para>

    <programlisting>options   SYSVMSG   # SYSV-stijl berichtwachtrijen</programlisting>

    <para>Dit biedt ondersteuning voor System&nbsp;V berichten.  Ook
      deze optie voegt slechts een paar honderd bytes aan de kernel
      toe.</para>

    <programlisting>options   SYSVSEM   # SYSV-stijl semaforen</programlisting>

    <para>Dit biedt ondersteuning voor System&nbsp;V semaforen.  Het
      wordt minder vaak gebruikt, maar voegt slechts een paar honderd
      bytes aan de kernel toe.</para>

    <note>
      <para>De optie <option>-p</option> van het commando &man.ipcs.1;
	geeft een lijst van alle processen die een van deze
	System&nbsp;V faciliteiten gebruikt.</para>
    </note>

    <programlisting>options   _KPOSIX_PRIORITY_SCHEDULING   # POSIX P1003_1B real-time extensies</programlisting>

    <para>Dit biedt real-time-uitbreidingen die in de 1993 &posix; zijn
      toegevoegd.  Bepaalde applicaties in de Portscollectie gebruiken
      deze (zoals <application>&staroffice;</application>).</para>

    <programlisting>options   KBD_INSTALL_CDEV    # installeer een CDEV-ingang in /dev</programlisting>

    <para>Deze optie is gerelateerd aan het toetsenbord.  Het
      installeert een CDEV-ingang in <filename>/dev</filename>.</para>

    <programlisting>options   AHC_REG_PRETTY_PRINT     # Toon register bitveld in debuguitvoer.
                                   # Voegt ~128k toe aan driver.
options   AHD_REG_PRETTY_PRINT     # Toon register bitveld in debuguitvoer.
                                   # Voegt ~215k toe aan driver.</programlisting>

    <para>Dit helpt bij het debuggen door makkelijker te lezen
      registerdefinities af te beelden.</para>

    <programlisting>options   ADAPTIVE_GIANT      # Giant mutex is adaptief.</programlisting>

    <para>Giant is de naam van een wederzijds uitsluitingsmechanisme
      (een sleep mutex) dat een grote verzameling kernelbronnen
      beschermt.  Vandaag de dag is dit een onaccaptabele
      prestatie-bottleneck die actief door sloten wordt vervangen die
      individuele bronnen beschermen.  De optie
      <literal>ADAPTIVE_GIANT</literal> zorgt ervoor dat Giant in de
      verzamelingen van mutexen wordt opgenomen waar actief wordt
      opgespind.  Dit betekent dat wanneer een thread de Giant-mutex
      wil nemen, maar die reeds door een thread op een andere CPU
      genomen is, de eerste thread blijft draaien en wacht tot er een
      slot vrijkomt.  Normaalgesproken zou de thread weer gaan slapen
      en wachten op de volgende kans om te draaien.  Laat dit er in
      geval van twijfel instaan.</para>

    <indexterm>
      <primary>kernelopties</primary>

      <secondary>SMP</secondary>
    </indexterm>

    <programlisting>device    apic      # I/O APIC</programlisting>

    <para>Het apic-apparaat zet de ondersteuning voor I/O-APIC voor het
      afleveren van interrupts aan.  Het apic-apparaat kan zowel in UP-
      als in SMP-kernels gebruikt worden, maar is noodzakelijk voor
      SMP-kernels.  Voeg <literal>options SMP</literal> toe om
      ondersteuning voor meerdere processoren op te nemen.<para>

    <programlisting>device    isa</programlisting>

    <para>Alle computers die door &os; ondersteund worden hebben
      &eacute;&eacute;n van deze apparaten.  Verwijder dit niet, zelfs
      niet als er geen ISA-sloten aanwezig zijn.  &os; biedt momenteel
      slechts gedeeltelijke ondersteuning aan IBM PS/2 (Micro Channel
      Architecture)-systemen.  Meer informatie over de ondersteuning
      voor MCA staat in
      <filename>/usr/src/sys/i386/conf/notes</filename>.</para>

    <programlisting>device    eisa</programlisting>

    <para>Neem dit op voor een EISA-moederbord.  Dit zet ondersteuning
      voor zelfdetectie en -instelling aan voor alle apparaten op de
      EISA-bus.</para>

    <programlisting>device    pci</programlisting>

    <para>Neem dit op voor een PCI-moederbord.  Dit zet ondersteuning
      voor zelfdetectie van PCI-kaarten en gatewaying van
      PCI-naar-ISA-bus aan.</para>

    <programlisting># Floppy drives
device	  fdc</programlisting>

    <para>Dit is de controller voor de floppydrive.</para>

    <programlisting># ATA- en ATAPI-apparaten
device	  ata</programlisting>

    <para>Dit stuurprogramma biedt ondersteuning aan alle ATA- en
      ATAPI-apparaten.  Er is slechts &eacute;&eacute;n <literal>device
	ata</literal>-regel nodig om de kernel alle PCI
      ATA/ATAPI-apparaten te laten ontdekken op moderne
      machines.</para>

    <programlisting>device    atadisk   # ATA schijven</programlisting>

    <para>Dit is samen met <literal>device ata</literal> nodig voor ATA
      schijven.</para>

    <programlisting>device    ataraid   # ATA RAID schijven</programlisting>

    <para>Dit is samen met <literal>device ata</literal> nodig voor ATA
      RAID-schijven.</para>

    <programlisting><anchor id="kernelconfig-atapi">
device	  atapicd   # ATAPI cd-rom drives</programlisting>

    <para>Dit is samen met <literal>device ata</literal> nodig voor
      ATAPI cd-rom drives.</para>

    <programlisting>device   atapifd    # ATAPI floppy drives</programlisting>

    <para>Dit is samen met <literal>device ata</literal> nodig voor
      ATAPI floppydrives.</para>

    <programlisting>device    atapist   # ATAPI tape drives</programlisting>

    <para>Dit is samen met <literal>device ata</literal> nodig voor
      ATAPI tapedrives.</para>

    <programlisting>options   ATA_STATIC_ID   # Statische apparaatnummering</programlisting>

    <para>Dit zorgt ervoor dat de controller statisch nummert.  Zonder
      deze optie worden nummers dynamisch toegewezen.</para>

    <programlisting># SCSI Controllers
device          ahb        # EISA AHA1742 familie
device          ahc        # AHA2940 en onboard AIC7xxx apparaten
device          ahd        # AHA39320/29320 en onboard AIC79xx apparaten
device          amd        # AMD 53C974 (Teckram DC-390(T))
device          isp        # Qlogic familie
device          mpt        # LSI-Logic MPT-Fusion
#device         ncr        # NCR/Symbios Logic
device          sym        # NCR/Symbios Logic (nieuwere chipsets)
device          trm        # Tekram DC395U/UW/F DC315U adapters

device          adv        # Advansys SCSI adapters
device          adw        # Advansys wide SCSI adapters
device          aha        # Adaptec 154x SCSI adapters
device          aic        # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
device          bt         # Buslogic/Mylex MultiMaster SCSI adapters

device          ncv        # NCR 53C500
device          nsp        # Workbit Ninja SCSI-3
device          stg        # TMC 18C30/18C50</programlisting>

    <para>SCSI controllers.  Commentarieer de regels uit voor apparaten
      die niet in het systeem aanwezig zijn.  Als het een systeem met
      alleen IDE apparaten betreft, kunnen ze allemaal weggelaten
      worden.</para>

    <programlisting># SCSI randapparaten
device          scbus      # SCSI bus (nodig voor SCSI)
device          ch         # SCSI media changers
device          da         # Direct Access (schijven)
device          sa         # Sequential Access (tape, enzovoort)
device          cd         # CD
device          pass       # Passthrough apparaat (directe SCSI-toegang)
device          ses        # SCSI Omgevingsdiensten (en SAF-TE)</programlisting>

    <para>SCSI-aanhangels.  Ook hier geldt dat apparaten die niet
      aanwezig zijn uitgecommentarieerd kunnen worden, of als alleen
      IDE-hardware aanwezig aanwezig is, ze allemaal weggelaten kunnen
      worden.</para>

    <note>
      <para>Het USB-stuurprogramma &man.umass.4; en enkele andere
	stuurprogramma's gebruiken het SCSI-subsysteem, alhoewel ze
	geen echte SCSI-apparaten zijn.  Daarom mag SCSI-ondersteuning
	niet verwijderd worden als dit soort stuurprogramma's in de
	kernelinstellingen worden opgenomen.</para>
    </note>

    <programlisting># RAID controllers met interfaces naar het SCSI subsysteem
device          amr        # AMI MegaRAID
device          arcmsr     # Areca SATA II RAID
device          asr        # DPT SmartRAID V, VI en Adaptec SCSI RAID
device          ciss       # Compaq Smart RAID 5*
device          dpt        # DPT Smartcache III, IV - Zie NOTES voor opties
device          hptmv      # Highpoint RocketRAID 182x
device          iir        # Intel Integrated RAID
device          ips        # IBM (Adaptec) ServeRAID
device          mly        # Mylex AcceleRAID/eXtremeRAID
device          twa        # 3ware 9000 series PATA/SATA RAID

# RAID controllers
device          aac        # Adaptec FSA RAID
device          aacp       # SCSI passthrough voor aac (CAM nodig)
device          ida        # Compaq Smart RAID
device          mlx        # Mylex DAC960 famile
device          pst        # Promise Supertrak SX6000
device          twe        # 3ware ATA RAID</programlisting>

    <para>Ondersteunde RAID-controllers.  Als een van deze niet
      aanwezig is, kan deze uitgecommentarieerd of verwijderd
      worden.</para>

    <programlisting># atkbdc0 bestuurt het toetsenbord en de PS/2 muis
device    atkbdc    # AT toetsenbordcontroller</programlisting>

    <para>De toetsenbordcontroller (<literal>atkbdc</literal>) biedt
      I/O-diensten aan voor het AT-toetsenbord en het PS/2-type van
      aanwijsapparaten.  Deze controller is noodzakelijk voor het
      toetsenbordstuurprogramma (<literal>atkbd</literal>) en het
      PS/2-aanwijsapparaatstuurprogramma
      (<literal>psm</literal>).</para>

    <programlisting>device    atkbd     # AT toetsenbord</programlisting>

    <para>Het stuurprogramma <literal>atkbd</literal> biedt samen met
      de controller <literal>atkbdc</literal> toegang tot het
      AT84-toetsenbord of het uitgebreide AT-toetsenbord dat verbonden
      is met de controller voor het AT-toetsenbord.</para>

    <programlisting>device    psm       # PS/2 muis</programlisting>

    <para>Dit apparaat kan gebruikt worden als de muis in de
      PS/2-muispoort wordt geplugd.</para>

    <programlisting>device    vga       # VGA videokaart stuurprogramma</programlisting>

    <para>Het stuurprogramma voor de videokaart.</para>

    <programlisting># splash screen/screensaver
device    splash    # Splash screen en screensaver ondersteuning</programlisting>

    <para>Een splash-scherm tijdens het opstarten!  Screensavers hebben
      deze optie ook nodig (voor &os;&nbsp;4.X dient
      <literal>pseudo-device splash</literal> gebruikt te
      worden.</para>

    <programlisting># syscons is het standaard consolestuurprogramma, lijkt op een SCO console
device	  sc</programlisting>

    <para><literal>sc</literal> is het standaard consolestuurprogramma
      en lijkt op een SCO-console.  Aangezien de meeste programma's die
      met een volledig scherm werken de console via een
      terminaldatabase zoals <filename>termcap</filename> benaderen,
      moet het niet uitmaken of dit of <literal>vt</literal>, het
      <literal>VT220</literal>-compatibele consolestuurprogramma,
      gebruikt wordt.  Wanneer er aangemeld wordt, dient de variabele
      <envar>TERM</envar> op <literal>scoansi</literal> gezet worden
      indien programma's die met een volledig scherm werken problemen
      hebben om met dit console te draaien.</para>

    <programlisting># Schakel dit in voor het pcvt (VT220 compatibele) consolestuurprogramma
#device     vt
#options    XSERVER     # ondersteuning voor X server op een vt console
#options    FAT_CURSOR  # begin met een blokcursor</programlisting>

    <para>Dit is een VT220-compatibel consolestuurprogramma,
      achterwaarts compatibel met de VT100/102.  Het werkt goed op
      enkele laptops die hardware-incompatibiliteiten hebben met
      <literal>sc</literal>.  Ook dient de variabele
      <envar>TERM</envar> op <literal>vt100</literal> of
      <literal>vt220</literal> gezet te worden bij het aanmelden.  Dit
      stuurprogramma kan ook nuttig zijn wanneer er verbinding wordt
      gemaakt met een groot aantal verschillende machines in een
      netwerk, waarbij de ingangen <filename>termcap</filename> of
      <filename>terminfo</filename> voor het apparaat
      <literal>sc</literal> vaak niet beschikbaar zijn.
      <literal>vt100</literal> is op bijna elk platform
      beschikbaar.</para>

    <programlisting>device    agp</programlisting>

    <para>Neem dit op als er een AGP-kaart in het systeem aanwezig is.
      Dit zet ondersteuning voor AGP aan, en ondersteuning voor AGP
      GART voor borden die deze mogelijkheden hebben.</para>

      <indexterm><primary>APM</primary></indexterm>

    <programlisting># Ondersteuning voor energiebeheer (zie NOTES voor meer opties)
#device	  apm</programlisting>

    <para>Ondersteuning voor geavanceerd energiebeheer (Advanced Power
      Management).  Dit is nuttig voor laptops, alhoewel dit in
      &os;&nbsp;5.X en hoger standaard uitgeschakeld is in
      <filename>GENERIC</filename>.</para>

    <programlisting># Schakel suspend/resume ondersteuning voor de i8254 in.
device	  pmtimer</programlisting>

    <para>Het stuurprogramma voor het timerapparaat voor
      energiebeheergebeurtenissen, zoals APM en ACPI.</para>

    <programlisting># PCCARD (PCMCIA) ondersteuning.
# PCMCIA en cardbus bridge ondersteuning.
device    cbb       # cardbus (yenta) bridge
device    pccard    # PC Card (16-bit) bus
device    cardbus   # CardBus (32-bit) bus</programlisting>

    <para>Ondersteuning voor PCMCIA.  Dit is wenselijk voor
      laptopgebruikers.</para>

    <programlisting># Serial (COM) poorten
device    sio       # 8250, 16[45]50-gebaseerde seri&euml;le poorten</programlisting>

    <para>Dit zijn de seri&euml;le poorten waarnaar in de wereld van
      &ms-dos;/&windows; verwezen wordt als
      <devicename>COM</devicename>-poorten.</para>

    <note>
      <para>Als er een intern modem op <devicename>COM4</devicename> en
	een seri&euml;le poort op <devicename>COM2</devicename>
	aanwezig is, moet het IRQ van het modem in 2 worden veranderd
	(om duistere technische redenen geldt dat IRQ2 = IRQ9) om er
	vanuit &os; toegang toe te krijgen.  Als er een multipoort
	seri&euml;le kaart aanwezig is, staat in &man.sio.4; meer
	informatie over de juiste waarden die aan
	<filename>/boot/device.hints</filename> toegevoegd moeten
	worden.  Sommige videokaarten (vaak gebaseerd op S3 chips)
	gebruiken IO-adressen van de vorm <literal>0x*2e8</literal>, en
	omdat vele goedkope serie&euml;le kaarten de 16-bits
	IO-adresruimte niet volledig decoderen, botsen ze met deze
	kaarten waardoor de <devicename>COM4</devicename>-poort
	praktisch onbruikbaar is.</para>

      <para>Elke serie&euml;le poort moet een uniek IRQ hebben (tenzij
	er gebruik wordt gemaakt van een van de multipoortkaarten
	waarbij gedeelde interrupts ondersteund worden), dus kunnen de
	standaard IRQ's voor <devicename>COM3</devicename> en
	<devicename>COM4</devicename> niet gebruikt worden.</para>
    </note>

    <programlisting># Parallelle poort
device    ppc</programlisting>

    <para>Dit is de interface voor de parallelle poort op de
      ISA-bus.</para>

    <programlisting>device    ppbus     # Parallelle poortbus (verplicht)</programlisting>

    <para>Biedt ondersteuning voor de parallelle poortbus.</para>

    <programlisting>device    lpt       # Printer</programlisting>

    <para>Ondersteuning voor parallelle poort-printers.</para>

    <note>
      <para>Alle van de bovenstaande drie zijn noodzakelijk om
	ondersteuning voor parallelle printers aan te zetten.</para>
    </note>

    <programlisting>device    plip      # TCP/IP over parallel</programlisting>

    <para>Dit is het stuurprogramma voor de parallelle
      netwerkinterface.</para>

    <programlisting>device    ppi       # Parallelle poort interface apparaat</programlisting>

    <para>De algemene I/O (<quote>geek-poort</quote>) + IEEE1284 I/O.</para>

    <programlisting>#device   vpo       # scbus en da verplicht</programlisting>

    <indexterm><primary>zipdrive</primary></indexterm>

    <para>Dit is voor een Iomega Zipdrive.  Hiervoor is ondersteuning
      voor <literal>scbus</literal> en <literal>da</literal> nodig.  De
      beste prestaties worden gehaald met poorten in EPP
      1.9-modus.</para>

    <programlisting>#device   puc</programlisting>

    <para>Dit dient uitgecommentarieerd te worden indien er een
      <quote>domme</quote> seri&euml;le of parallelle PCI-kaart
      aanwezig is die ondersteund wordt door het &man.puc.4;
      verbindingsstuurprogramma.</para>

    <programlisting># PCI Ethernet NIC's.
device    de        # DEC/Intel DC21x4x (<quote>Tulip</quote>)
device    em        # Intel PRO/1000 adapter Gigabit Ethernet Card
device    ixgb      # Intel PRO/10GbE Ethernet Card
device    txp       # 3Com 3cR990 (<quote>Typhoon</quote>)
device    vx        # 3Com 3c590, 3c595 (<quote>Vortex</quote>)</programlisting>

    <para>Verscheidene PCI-netwerkkaartstuurprogramma's.  Degenen die
      niet in het systeem aanwezig zijn kunnen uitgecommentarieerd of
      verwijderd worden.</para>

    <programlisting># PCI Ethernet NIC's die de MII bus controller code gebruiken.
# NB: 'device miibus' moet behouden blijven om deze NIC's te kunnen gebruiken!
device    miibus    # MII bus ondersteuning</programlisting>

    <para>Ondersteuning voor MII-bus is noodzakelijk voor sommige PCI
      10/100 Ethernet-NICs, namelijk voor diegenen die MII-geldige
      transceivers gebruiken of interfaces voor transceiverbesturing
      implementeren die als een MII werken.  Door <literal>device
	miibus</literal> aan de kernelinstellingen toe te voegen wordt
      de ondersteuning voor de generieke miibus-API en voor alle
      PHY-stuurprogramma's opgenomen, waaronder een generieke voor
      PHYs die niet specifiek door een individueel stuurprogramma
      worden behandeld.</para>

    <programlisting>device    bfe       # Broadcom BCM440x 10/100 Ethernet
device    bge       # Broadcom BCM570xx Gigabit Ethernet
device    dc        # DEC/Intel 21143 en verschillende gelijkwerkenden
device    fxp       # Intel EtherExpress PRO/100B (82557, 82558)
device    lge       # Level 1 LXT1001 gigabit ethernet
device    nge       # NatSemi DP83820 gigabit ethernet
device    pcn       # AMD Am79C97x PCI 10/100 (voorrang boven 'lnc')
device    re        # RealTek 8139C+/8169/8169S/8110S
device    rl        # RealTek 8129/8139
device    sf        # Adaptec AIC-6915 (<quote>Starfire</quote>)
device    sis       # Silicon Integrated Systems SiS 900/SiS 7016
device    sk        # SysKonnect SK-984x & SK-982x gigabit Ethernet
device    ste       # Sundance ST201 (D-Link DFE-550TX)
device    ti        # Alteon Networks Tigon I/II gigabit Ethernet
device    tl        # Texas Instruments ThunderLAN
device    tx        # SMC EtherPower II (83c170 <quote>EPIC</quote>)
device    ge        # VIA VT612x gigabit ethernet
device    vr        # VIA Rhine, Rhine II
device    wb        # Winbond W89C840F
device    xl        # 3Com 3c90x (<quote>Boomerang</quote>, <quote>Cyclone</quote>)</programlisting>

    <para>Stuurprogramma's die gebruik maken van de MII
      bus-controllercode.</para>

    <programlisting># ISA Ethernet NIC's.  Inclusief pccard NIC's.
device    cs        # Crystal Semiconductor CS89x0 NIC
# 'device ed' heeft 'device miibus' nodig
device    ed        # NE[12]000, SMC Ultra, 3c503, DS8390 kaarten
device    ex        # Intel EtherExpress Pro/10 en Pro/10+
device    ep        # Etherlink III-gebaseerde kaarten
device    fe        # Fujitsu MB8696x-gebaseerde kaarten
device    ie        # EtherExpress 8/16, 3C507, StarLAN 10, etc.
device    lnc       # NE2100, NE32-VL Lance Ethernet kaarten
device    sn        # SMC's 9000 serie Ethernet chips
device    xe        # Xircom pccard Ethernet

# ISA apparaten die de oude ISA shims gebruiken
#device   le</programlisting>

    <para>ISA Ethernetstuurprogramma's.  In
      <filename>/usr/src/sys/<replaceable>i386</replaceable>/conf/NOTES</filename>
      staan details over welke kaarten door welk stuurprogramma
      ondersteund worden.</para>

    <programlisting># Draadloze NIC kaarten
device    wlan      # 802.11 ondersteuning
device    an        # Aironet 4500/4800 802.11 draadloze NIC's.
device    awi       # BayStack 660 en anderen
device    wi        # WaveLAN/Intersil/Symbol 802.11 draadloze NIC's.
#device   wl        # Oudere niet-802.11 Wavelan draadloze NIC.</programlisting>

    <para>Ondersteuning voor verscheidene draadloze kaarten.</para>

    <programlisting>device    mem       # Geheugen- en kernelgeheugenapparaten</programlisting>

    <para>De geheugenapparaten van het systeem.</para>

    <programlisting>device    io        # I/O apparaat</programlisting>

    <para>Deze optie stelt een proces in staat om I/O-privileges te
      verkrijgen.  Dit is nuttig als er gebruikerprogramma's worden
      geschreven die direct met hardware werken.  Dit is nodig om het
      X Window systeem te draaien.</para>

    <programlisting>device    random    # Entropy apparaat</programlisting>

    <para>Cryptografisch veilige willekeurige getallengenerator.</para>

    <programlisting>device    ether     # Ethernet ondersteuning</programlisting>

    <para><literal>ether</literal> is allen noodzakelijk als er een
      Ethernetkaart aanwezig is.  Het bevat code voor het generieke
      Ethernet protocol.  Op &os;&nbsp;4.X dient
      <literal>pseudo-device ether</literal> gebruikt te worden.</para>

    <programlisting>device    sl        # Kernel SLIP</programlisting>

    <para><literal>sl</literal> dient voor SLIP-ondersteuning.  Dit is
      bijna geheel overgenomen door PPP, wat eenvoudiger is op te
      zetten, beter geschikt is voor modem-naar-modem-verbindingen en
      krachtiger is.  Met &os;&nbsp;4.X dient
      <literal>pseudo-device sl</literal> gebruikt te worden.</para>

    <programlisting>device    ppp       # Kernel PPP</programlisting>

    <para>Dit dient voor PPP-ondersteuning van inbelverbindingen door
      de kernel.  Er is ook een versie van PPP als gebruikersapplicatie
      ge&iuml;mplementeerd die <literal>tun</literal> gebruikt en meer
      flexibiliteit en mogelijkheden biedt zoals demand-bellen.
      Met &os;&nbsp;4.X dient <literal>pseudo-device ppp</literal>
      gebruikt te worden.</para>

    <programlisting>device    tun       # Packet tunnel.</programlisting>

    <para>Dit wordt gebruikt door de gebruikers-PPP-software.  In
      <link linkend="userppp">PPP</link> staat meer informatie.  Met
      &os;&nbsp;4.X dient <literal>pseudo-device tun</literal> gebruikt
      te worden.</para>

    <programlisting><anchor id="kernelconfig-ptys">
device    pty       # Pseudo-ttys (telnet, etc.)</programlisting>

    <para>Dit is een <quote>pseudo-terminal</quote> of gesimuleerde
      aanmeldpoort.  Die wordt gebruikt door binnenkomende sessies van
      <command>telnet</command> en <command>rlogin</command>, door
      <application>xterm</application> en voor sommige andere
      applicaties zoals <application>Emacs</application>.</para>

    <note>
      <para>Met &os;&nbsp;4.X dient
	<literal>pseudo-device pty<replaceable>nummer</replaceable></literal>
	gebruikt te worden.  Het <replaceable>nummer</replaceable> na
	<literal>pty</literal> geeft het aantal
	<literal>pty</literal>'s aan dat aangemaakt dient te worden.
	Als er meer dan het standaard aantal van zestien gelijktijdige
	<application>xterm</application> schermen en/of remote
	aanmeldingen nodig zijn, dient dit nummer overeenkomstig
	verhoogd te worden, tot maximaal 256.</para>
    </note>

    <programlisting>device    md        # <quote>Geheugenschijven</quote></programlisting>

    <para>Pseudo-apparaten die een schijf in het geheugen implementeren.
      Met &os;&nbsp;4.X dient <literal>pseudo-device md</literal>
      gebruikt te worden.</para>

    <programlisting>device    gif       # IPv6 en IPv4 tunnelen</programlisting>

    <para>Dit implementeert IPv6-over-IPv4-tunneling,
      IPv4-over-IPv6-tunneling, IPv4-over-IPv4-tunneling en
      IPv6-over-IPv6-tunneling.  Met ingang van &os;&nbsp;4.4 is het
      apparaat <literal>gif</literal> <quote>zelfklonend</quote> en
      dient de regel <literal>pseudo-device gif</literal> gebruikt te
      worden.  Eerdere versies van &os;&nbsp;4.X vereisen een getal,
      bijvoorbeeld <literal>pseudo-device gif 4</literal>.</para>

    <programlisting>device    faith     # IPv6-naar-IPv4-relay (vertaling)</programlisting>

    <para>Dit pseudo-apparaat onderschept pakketten die ernaar
      verzonden worden en leidt ze om naar het IPv4/IPv6-vertaaldaemon.
      Met &os;&nbsp;4.X dient <literal>pseudo-device faith 1</literal>
      gebruikt te worden.</para>

    <programlisting># Het `bpf' apparaat schakelt de Berkeley Pakketfilter in.
# Wees bewust van de administratieve consequenties die dit heeft!
# 'bpf' is nodig bij gebruik van DHCP.
device    bpf       # Berkeley pakketfilter</programlisting>

    <para>Dit is het Berkeley Pakketfilter.  Dit pseudo-apparaat staat
      netwerkinterfaces toe om in luistermodus gezet te worden, zodat
      elk pakket op een uitzendnetwerk (bijvoorbeeld een Ethernet)
      onderschept wordt.  Deze pakketten kunnen naar schijf onderschept
      en/of onderzocht worden met het programma &man.tcpdump.1;.  Met
      &os;&nbsp;4.X dient <literal>pseudo-device bpf</literal> gebruikt
      te worden.</para>

    <note>
      <para>Het apparaat &man.bpf.4; wordt ook gebruikt door
	&man.dhclient.8; om het IP-adres van de standaardrouter
	(gateway) te verkrijgen, enzovoorts.  Als DHCP gebruikt wordt,
	dient dit ingeschakeld te blijven.</para>
    </note>

    <programlisting># USB support
device    uhci      # UHCI PCI-&gt;USB interface
device    ohci      # OHCI PCI-&gt;USB interface
#device   ehci      # EHCI PCI-&gt;USB interface (USB 2.0)
device    usb       # USB Bus (verplicht)
#device   udbp      # USB Double Bulk Pipe apparaten
device    ugen      # Generic
device    uhid      # <quote>Human Interface Devices</quote>
device    ukbd      # Toetsenbord
device    ulpt      # Printer
device    umass     # Schijnven/Massaopslag - scbus en da nodig
device    ums       # Muis
device    urio      # Diamond Rio 500 MP3 speler
device    uscanner  # Scanners
# USB Ethernet, requires mii
device    aue       # ADMtek USB Ethernet
device    axe       # ASIX Electronics USB Ethernet
device    cdce      # Generic USB over Ethernet
device    cue       # CATC USB Ethernet
device    kue       # Kawasaki LSI USB Ethernet
device    rue       # RealTek RTL8150 USB Ethernet</programlisting>

    <para>Ondersteuning voor verscheidene USB-apparaten.</para>

    <programlisting># FireWire ondersteuning
device    firewire  # FireWire bus code
device    sbp       # SCSI over FireWire (scbus en da nodig)
device    fwe       # Ethernet over FireWire (niet-standaard!)</programlisting>

    <para>Ondersteuning voor verscheidene Firewire-apparaten.</para>

    <para>Meer informatie en aanvullende apparaten die door &os;
      ondersteund worden staan in
      <filename>/usr/src/sys/<replaceable>i386</replaceable>/conf/NOTES</filename>.</para>

    <sect2>
      <title>Instellingen bij veel geheugen
	(<acronym>PAE</acronym>)</title>

      <indexterm>
	<primary>Physical Address Extensions
	  (<acronym>PAE</acronym>)</primary>

	<secondary>veel geheugen</secondary>
      </indexterm>

      <para>Sommige machines (<acronym>PAE</acronym>) hebben meer
	geheugen nodig dan limiet van 4 gigabyte op User+Kernel Virtual
	Adress (<acronym>KVA</acronym>) ruimte.  Vanwege deze limiet
	voegde Intel ondersteuning toe voor toegang tot 36-bits fysieke
	adresruimte in de &pentium; Pro en nieuwere lijn van
	CPU's.</para>

      <para>De Physical Address Extension (<acronym>PAE</acronym>)
	mogelijkheden van de &intel; &pentium; Pro en nieuwere CPU's
	staan geheugenhoeveelheden toe tot 64 gigabyte.  &os; biedt
	ondersteuning voor deze mogelijkheid via de kernelinsteloptie
	<option>PAE</option>, die beschikbaar is in de 4.X-serie van
	&os; met ingang van 4.9-RELEASE en in de 5.X-serie van &os;
	met ingang van 5.1-RELEASE.  Vanwege de beperkingen van de
	geheugenarchitectuur van Intel wordt er geen onderscheid
	gemaakt tussen geheugen boven of beneden 4 gigabytes.  Geheugen
	dat boven de 4 gigabytes is toegewezen wordt gewoon bij het
	beschikbare gevoegd.</para>

      <para>Om ondersteuning voor <acronym>PAE</acronym> in de kernel
	aan te zetten, dient de volgende regel aan het
	kernelinstellingenbestand te worden toegevoegd:</para>

      <programlisting>options   PAE</programlisting>

      <note>
	<para>De ondersteuning voor <acronym>PAE</acronym> in &os; is
	  alleen beschikbaar voor &intel; IA-32-processoren.  Ook dient
	  opgemerkt te worden dat ondersteuning voor
	  <acronym>PAE</acronym> nog niet wijdverbreid getest is en
	  als betakwaliteit beschouwd dient te worden vergeleken met
	  andere stabiele kenmerken van &os;.</para>
      </note>

      <para>Ondersteuning voor <acronym>PAE</acronym> in &os; heeft
	enige beperkingen:</para>

      <itemizedlist>
	<listitem>
	  <para>Een proces kan niet meer dan 4 gigabyte VM-ruimte
	    krijgen;</para>
	</listitem>

	<listitem>
	  <para><acronym>KLD</acronym>-modules kunnen niet in een
	    kernel worden geladen die <acronym>PAE</acronym> aan heeft
	    staan, vanwege de verschillen in het bouwraamwerk van een
	    module en de kernel;</para>
	</listitem>

	<listitem>
	  <para>Apparaatstuurprogramma's die geen gebruik maken van de
	    &man.bus.dma.9;-interface zullen gegevenscorruptie
	    veroorzaken in een kernel die <acronym>PAE</acronym> aan
	    heeft staan en hun gebruik wordt afgeraden.  Om deze reden
	    wordt er een kernelinstellingenbestand voor
	    <acronym>PAE</acronym> geleverd met &os;&nbsp;5.X, die alle
	    stuurprogramma's uitsluit waarvan bekend is dat ze niet
	    werken in een kernel die <acronym>PAE</acronym> aan heeft
	    staan;</para>
	</listitem>

	<listitem>
	  <para>Sommige systeeminstellingen bepalen het
	    geheugenbronverbruik aan de hand van de hoeveelheid
	    beschikbaar fysiek geheugen.  Zulke instellingen kunnen
	    onnodig veel toewijzen vanwege de grote hoeveelheid
	    geheugen in een <acronym>PAE</acronym> systeem.  Een
	    voorbeeld hiervan is de sysctl
	    <option>kern.maxvnodes</option>, die het maximum aantal
	    vnodes dat in de kernel aanwezig mag zijn beheert.  Het is
	    aan te raden om deze en andere van dit soort instellingen
	    aan te passen aan een redelijke waarde;</para>
	</listitem>

	<listitem>
	  <para>Het kan nodig zijn om de virtuele kerneladresruimte
	    (<acronym>KVA</acronym>) te vergroten of om het aantal
	    kernelbronnen dat veel gebruikt wordt (zie boven) te
	    verminderen om zo uitputting van <acronym>KVA</acronym> te
	    voorkomen.  De kerneloptie <option>KVA_PAGES</option> kan
	    gebruikt worden om de <acronym>KVA</acronym>-ruimte te
	    vergroten.</para>
	</listitem>
      </itemizedlist>

      <para>Om prestatie- en stabiliteitsredenen is het aan te raden om
	&man.tuning.7; te raadplegen.  &man.pae.4; bevat bijgewerkte
	informatie over de ondersteuning voor <acronym>PAE</acronym> in
	&os;.</para>
    </sect2>
  </sect1>

  <sect1 id="kernelconfig-nodes">
    <title>Apparaatnodes maken</title>

    <indexterm><primary>apparaatnodes</primary></indexterm>

    <indexterm><primary><command>MAKEDEV</command></primary></indexterm>

    <para><emphasis>Als &os;&nbsp;5.0 of hoger gedraaid wordt, kan deze
      sectie veilig worden overgeslagen.  Deze versies gebruiken
      &man.devfs.5; om transparant apparaatnodes voor de gebruiker toe
      te wijzen.</emphasis></para>

    <para>Bijna elk apparaat in de kernel heeft een overeenkomstige
      <quote>node</quote>-ingang in de map <filename>/dev</filename>.
      Deze nodes zien eruit als reguliere bestanden, maar zijn
      eigenlijk speciale ingangen in de kernel die door programma's
      gebruikt worden om toegang tot het apparaat te verkrijgen.  Het
      shellscript <filename>/dev/MAKEDEV</filename>, dat wordt
      uitgevoerd als het besturingssysteem voor het eerst wordt
      ge&iuml;nstalleerd, maakt bijna alle ondersteunde apparaatnodes
      aan.  Het maakt echter niet <emphasis>alle</emphasis> nodes aan,
      dus als ondersteuning voor een apparaat wordt toegevoegd, loont
      het om te controleren of de geschikte ingangen in de map aanwezig
      zijn en deze toe te voegen als ze ontbreken.  Hier volgt een
      eenvoudig voorbeeld:</para>

    <para>Stel dat ondersteuning voor de IDE cd-rom aan de kernel wordt
      toegevoegd:</para>

    <programlisting>device    ad0</programlisting>

    <para>Dit betekent dat de map <filename>/dev</filename> moet worden
      onderzocht op ingangen die met <filename>acd0</filename>
      beginnen, mogelijk gevolgd door een letter zoals
      <literal>c</literal> of voorafgegaan door de letter
      <literal>r</literal>, wat duidt op een <quote>raw</quote>
      apparaat.  Die bestanden zijn daar niet, dus moet in de map
      <filename>/dev</filename> het volgende ingegeven worden:</para>

    <indexterm><primary><command>MAKEDEV</command></primary></indexterm>

    <screen>&prompt.root; <userinput>sh MAKEDEV acd0</userinput></screen>

    <para>Als dit script ge&euml;indigd is, zijn de ingangen
      <filename>acd0c</filename> en <filename>racd0c</filename> in de
      map <filename>/dev</filename> aanwezig, wat duidt op een juiste
      uitvoer.</para>

    <para>Voor geluidskaarten maakt het volgende commando de juiste
      ingangen aan:</para>

    <screen>&prompt.root; <userinput>sh MAKEDEV snd0</userinput></screen>

    <note>
      <para>Als apparaatnodes voor apparaten als geluidskaarten worden
	aangemaakt en andere mensen toegang tot de machine hebben, kan
	het wenselijk zijn om de apparaten tegen toegang van buitenaf
	te beschermen door deze aan <filename>/etc/fbtab</filename> toe
	te voegen.  In &man.fbtab.5; staat meer informatie.</para>
    </note>

    <para>Deze eenvoudige procedure dient gevolgd te worden voor elk
      ander apparaat dat niet in <filename>GENERIC</filename> staat en
      geen ingangen heeft in <filename>/dev</filename>.</para>

    <note>
      <para>Alle SCSI-controllers gebruiken dezelfde verzameling
	ingangen in <filename>/dev</filename>, dus is het niet nodig om
	deze aan te maken.  Ook hebben netwerkkaarten en SLIP/PPP
	pseudo-apparaten geen ingang in <filename>/dev</filename>, dus
	is het niet nodig om hierover bezorgd te zijn.</para>
    </note>
  </sect1>

  <sect1 id="kernelconfig-trouble">
    <title>Problemen oplossen</title>

    <para>Er zijn vijf categori&euml;n problemen die op kunnen treden
      tijdens het bouwen van een eigen kernel:</para>

    <variablelist>
      <varlistentry>
	<term><command>config</command> faalt</term>

	<listitem>
	  <para>Als het commando &man.config.8; faalt bij het verwerken
	    van de kernelbeschrijving, is er waarschijnlijk ergens een
	    eenvoudige fout gemaakt.  Gelukkig geeft &man.config.8; het
	    nummer van de regel weer waarmee het problemen had, dus kan
	    snel de regel gevonden worden waarin de fout zit.
	    In het onderstaande voorbeeld dient gecontroleerd te worden
	    of het sleutelwoord juist is ingevoerd door het met de
	    kernel <filename>GENERIC</filename> of een andere
	    referentie te vergelijken:</para>

	  <screen>config: line 17: syntax error</screen>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term><command>make</command> faalt</term>

	<listitem>
	  <para>Als <command>make</command> faalt, duidt dit meestal op
	    een fout in de kernelbeschrijving die niet erg genoeg is om
	    door &man.config.8; opgemerkt te worden.  De instellingen
	    dienen nogmaals nagekeken te worden.  Als het probleem nog
	    steeds niet is op te lossen, stuur dan een mail naar de
	    &a.questions; met de kernelinstellingen.  Dat leidt meestal
	    snel tot een diagnose.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Het installeren van de nieuwe kernel mislukt</term>

	<listitem>
	  <para>Als het compileren van de kernel goed ging, maar het
	    installeren mislukte (<command>make install</command> of
	    <command>make installkernel</command> faalde), dient als
	    eerste gecontroleerd te worden of het systeem op
	    beveiligingsniveau (securelevel) 1 of hoger draait (zie
	    &man.init.8;).  De kernelinstallatie probeert namelijk om
	    de vlag immutable van de oude kernel te verwijderen en de
	    vlag immutable op de nieuwe kernel te zetten.  Aangezien
	    beveiligingsniveau 1 of hoger verhindert om de vlag
	    immutable te verwijderen van enig bestand op het systeem,
	    dient de kernelinstallatie op beveiligingsniveau 0 of lager
	    uitgevoerd te worden.</para>

	  <para>Bovenstaande geldt alleen voor &os;&nbsp;4.X en eerdere
	    versies.  &os;&nbsp;5.X en hogere versies zetten de vlag
	    immutable niet op de kernel en een mislukte poging om de
	    kernel de kernel te installeren duidt meestal op een
	    fundamenteler probleem.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>De kernel start niet op<anchor
	    id="kernelconfig-noboot"></term>

	<listitem>
	  <para>Als de nieuwe kernel niet opstart of de apparaten
	    niet herkent is kalmte geboden.  &os; heeft een uitstekend
	    mechanisme om van niet-compatibele kernels te herstellen.
	    De gewenste kernel om mee op te starten kan vanuit de &os;
	    boot loader gekozen worden.  Als het systeem terugtelt
	    vanaf 10, kan deze vanuit het opstartmenu gekozen worden.
	    Sla een willekeurige toets, behalve de
	    <keycap>Enter</keycap> toets, aan, voer
	    <command>unload</command> in en daarna
	    <command>boot
	      /boot/<replaceable>kernel.old</replaceable>/kernel</command>
	    of de bestandsnaam van enige andere kernel die correct
	    opstart.  Als de kernelinstellingen gewijzigd worden, is
	    het altijd aan te raden om een kernel bij de hand te houden
	    waarvan bekend is dat die juist werkt.</para>

	  <para>Nadat er met een goede kernel is opgestart, kan het
	    instellingenbestand gecontroleerd worden en geprobeerd
	    worden om de kernel nogmaals te bouwen.  Een behulpzame
	    bron is het bestand <filename>/var/log/messages</filename>,
	    dat onder andere alle kernelberichten van alle keren dat er
	    succesvol is opgestart vastlegt.  Ook geeft &man.dmesg.8;
	    alle kernelberichten weer van de huidige
	    opstartprocedure.</para>

	  <note>
	    <para>Als er problemen zijn met het bouwen van een kernel,
	      dient een <filename>GENERIC</filename>, of een andere
	      kernel waarvan bekend is dat die werkt, bewaard te worden
	      onder een andere naam die niet verwijderd wordt als de
	      volgende kernel gebouwd wordt.  Er kan niet op
	      <filename>kernel.old</filename> vertrouwd worden omdat
	      bij de installatie van een nieuwe kernel
	      <filename>kernel.old</filename> overschreven wordt met de
	      laatst ge&iuml;nstaleerde kernel, die niet hoeft te
	      werken.  Ook dient de werkende kernel zo snel mogelijk
	      naar de juiste plaats <filename
		class="directory">/boot/kernel</filename> verplaatst te
	      worden, omdat anders commando's als &man.ps.1; eventueel
	      onjuist werken.  Hiervoor dient simpelweg de map met de
	      goede kernel hernoemd te worden:</para>

	    <screen>&prompt.root; <userinput>mv /boot/kernel /boot/kernel.slecht</userinput>
&prompt.root; <userinput>mv /boot/<replaceable>kernel.goed</replaceable> /boot/kernel</userinput></screen>

	    <para>Voor versies van &os; eerder dan 5.X luidt het juiste
	      commando om het kernelbestand dat <command>make</command>
	      installeert te <quote>ontgrendelen</quote> (om een andere
	      kernel definitief terug te zetten):</para>

	    <screen>&prompt.root; <userinput>chflags noschg /kernel</userinput></screen>

	    <para>Als dit niet mogelijk is, wordt er waarschijnlijk op
	      een beveiligingsniveau groter dan nul gedraaid.  Wijzig
	      <literal>kern_securelevel</literal> in
	      <filename>/etc/rc.conf</filename> naar
	      <literal>&ndash;1</literal> en start het systeem opnieuw.
	      Deze instelling kan op het vorige niveau worden
	      teruggezet als de nieuwe kernel naar behoren
	      werkt.</para>

	    <para>Als het wenselijk is om de nieuwe kernel
	      <quote>vast te zetten</quote> op zijn plaats, of enig
	      ander bestand, zodat het niet verplaatst of verknoeid kan
	      worden:</para>

	    <screen>&prompt.root; <userinput>chflags schg /kernel</userinput></screen>
	  </note>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>De kernel werkt, maar &man.ps.1; werkt niet meer</term>

	<listitem>
	  <para>Als er een andere versie van de kernel is
	    ge&iuml;nstalleerd dan degene waarmee de
	    systeemgereedschappen gebouwd zijn, bijvoorbeeld een kernel
	    voor 5.X op een 4.X-systeem, werken vele
	    systeemstatuscommando's als &man.ps.1; en &man.vmstat.8;
	    niet langer.  De wereld moet opnieuw gecompileerd en
	    ge&iuml;nstalleerd worden en met dezelfde broncodestructuur
	    als de kernel zijn gebouwd.  Dit is een van de redenen
	    waarom het normaliter geen goed idee is om een afwijkende
	    versie van de kernel ten opzichte van de rest van de wereld
	    te gebruiken.</para>
	</listitem>
      </varlistentry>
    </variablelist>
  </sect1>
</chapter>

<!--
    Local Variables:
    mode: sgml
    sgml-declaration: "../chapter.decl"
    sgml-indent-data: t
    sgml-omittag: nil
    sgml-always-quote-attributes: t
    sgml-parent-document: ("../book.sgml" "part" "chapter")
    End:
-->
