<!DOCTYPE ARTICLE PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[
]>
<article class="journalarticle" 
         status="DRAFT" 
         id="kerneld" lang="EN"
         xreflabel="kerneld mini-HOWTO" 
         os="linux" 
         revision="$Id: Kerneld-NL.sgml,v 1.1 2003/02/08 20:41:48 bokkie Exp $"
         vendor="Linux Documentation Project">
  <artheader>
    <title>Linux kerneld mini-HOWTO</title>

    <authorgroup>
    <author>
      <firstname>Henrik</firstname>
      <surname>Storner</surname>
      <affiliation>
        <address><email>kerneld-howto@linuxdoc.org</email></address>
      </affiliation>
    </author>
    <author>
    <firstname>Vertaald door: Ellen</firstname>
    <surname>Bokhorst</surname>
    <affiliation>
    <address><email>bokkie@nl.linux.org</email></address>
    </affiliation>
    </author>
    </authorgroup>

    <revhistory>
      <revision>
         <revnumber>v2.0</revnumber>
         <date>22 mei 2000</date>
          <revremark>
            conversie van HTML naar DocBook SGML.
         </revremark>
      </revision>
    </revhistory>

    <copyright>
      <year>2000</year>
      <holder role="mailto:kerneld-howto@linuxdoc.org">Linux Documentation
      Project</holder> 
    </copyright>
    <legalnotice>
      <title>Copyright</title>
      <para>Dit document is Copyright door Henrik Storner, 1996, 1997.</para>

      <para>Tenzij andere uiteengezet, zijn Linux HOWTO documenten
      auteursrechtelijk beschermd door hun respectieve auteurs. Linux
      HOWTO documenten mogen in hun geheel of gedeeltelijk worden
      gereproduceerd en gedistribueerd, via elk fysiek of elektronisch
      medium, zoals deze copyrightmelding op alle kopie&euml;n behouden
      blijft. Commerci&euml;le redistributie is toegestaan en wordt
      aangemoedigd; de auteur zou echter graag op de hoogte worden
      gesteld van dergelijke distributies.
      </para>

      <para>Alle vertalingen, afgeleide werken of samengestelde werken
      waarin enige Linux HOWTO documenten zijn verenigd moeten 
      onder deze copyrightmelding vallen. Dat wil zeggen dat je geen
      afgeleide werk van een HOWTO mag produceren en extra
      beperkingen op de distributie ervan mag opleggen. Uitzonderingen
      op deze regels kunnen onder bepaalde voorwaarden worden toegestaan;
      neem alsjeblieft contact op met de Linux HOWTO co&ouml;rdinator
      op het onderstaande adres.</para>

      <para>Samengevat willen we verspreiding van deze informatie via
      zoveel mogelijk kanalen bevorderen. We willen echter copyright
      op de HOWTO documenten blijven behouden en zouden graag op de
      hoogte worden gebracht van enige plannen om de HOWTO's te
      redistribueren.
      </para>

      <para>Neem via het e-mailadres linux-howto@sunsite.unc.edu alsjeblieft 
      contact op met de Linux HOWTO co&ouml;rdinator als je vragen hebt.
      </para>
    </legalnotice>

  </artheader>
  <sect1><title>Over de kerneld mini-HOWTO</title>

      <para>In dit document wordt uitgelegd hoe de automatische kernel
      module loader <quote>kerneld</quote> te
      installeren en gebruiken. De laatst uitgegeven versie van
      dit document is te vinden bij <ulink
      url="http://www.linuxdoc.org">het Linux Documentatie Project</ulink>
      </para>

    <sect2 id="credits"><title>Krediet</title>

      <para>Dit document is gebaseerd op een oorspronkelijke
      HTML versie 1.7 gedateerd 19 juli 1997 door Henrik Storner
      <email>storner@osiris.ping.dk</email> en het werd gereviseerd
      en omgezet volgens de DocBook DTD door Gary Lawrence Murphy
      <email>garym@teledyn.com</email> 20 mei 2000.</para>

      <para>De volgende mensen hebben op een of andere wijze een
      bijdrage aan deze mini-HOWTO geleverd:
      </para>

      <itemizedlist>
        <listitem><para>Bjorn Ekwall bj0rn@blox.se</para></LISTITEM>
        <listitem><para>Ben Galliart bgallia@luc.edu</para></LISTITEM>
        <listitem><para>Cedric Tefft cedric@earthling.net</para></LISTITEM>
        <listitem><para>Brian Miller bmiller@netspace.net.au</para></LISTITEM>
        <listitem><para>James C. Tsiao
        jtsiao@madoka.jpl.nasa.gov</para></listitem>
      </itemizedlist>

      <para>Stuur alsjeblieft een e-mail naar
      <email>kerneld-howto@linuxdoc.org</email> als je fouten aantreft
      in dit document. Je opmerkingen, aanmoedigingen, en suggesties
      zijn welkom en worden gewaardeerd, en zijn van hulp bij het
      garanderen dat deze handleiding actueel en accuraat blijft.
      </para>

    </sect2>
  </sect1>
  <sect1 id="introduction"><title>Wat is kerneld?</title>

      <para>De kerneld feature werd ge&iuml;ntroduceerd tijdens
      de 1.3 ontwikkelaarskernels door Bjorn Ekwall. Je kunt er
      kernelmodules, zoals devicedrivers, netwerkdrivers en
      bestandssystemen automatisch mee laden wanneer ze nodig zijn,
      in plaats van dat je dit handmatig moet doen met
      <command>modprobe</command> of <command>insmod</command>. </para>

      <para>En voor de wat amusantere aspecten, alhoewel deze (nog?)
      niet zijn ge&iuml;ntegreerd in de standaardkernel:</para>

      <itemizedlist>
        <listitem><para>Het kan zo worden ingesteld dat het een
	gebruikersprogramma uitvoert in plaats van de standaard
	schermbeveiliging, dus dat het je elk programma als 
	screen-saver laat gebruiken.
        </para></listitem>

        <listitem><para>Vergelijkbaar met de screen-blanker ondersteuning,
	kun je ook de standaard console beep in iets totaal anders
	wijzigen.
        </para></listitem>
      </itemizedlist>

      <para>kerneld bestaat uit twee componenten: </para>

      <itemizedlist>
        <listitem><para>Ondersteuning in de Linux kernel voor het
	versturen van verzoeken naar een daemon vragend om een
	een module voor een bepaalde taak.
        </para></listitem> 

        <listitem><para>Een user-space daemon die uit kan zoeken
	welke modules moeten worden geladen om aan het verzoek van
	de kernel te voldoen.
         </para></listitem>
      </itemizedlist>

      <para>Beide componenten moeten werken wil de kerneld ondersteuning
      functioneren; het is niet genoeg dat slechts de een of de ander
      is ingesteld.
        </para> 

    <sect2 ID="Why"><title>Waarom zou ik het willen gebruiken?</title>

      <para>Er zijn een aantal goede redenen waarom je kerneld
      zou willen gebruiken. De redenen die ik hier benoem, zijn mijn
      redenen, anderen hebben weer andere redenen.</para>

      <itemizedlist>
        <listitem><para>Als je kernels hebt gebouwd voor verscheidene
	systemen met slechts kleine verschillen, zoals een ander
	soort netwerkkaart, bijvoorbeeld, dan kun je een enkele
	kernel bouwen met een aantal modules in plaats van
	individuele kernels voor elk systeem.
        </para></listitem>

        <listitem><para>Modules zijn voor ontwikkelaars eenvoudiger
	te testen. Je hoeft het systeem niet opnieuw op te starten
	om de driver te laden of uit het geheugen te laten verwijderen;
        dit geldt voor alle modules, niet alleen voor via kerneld
	geladen modules.
        </para></listitem>

        <listitem><para>Het scheelt je in geheugen voor de kernel,
	waardoor er meer geheugen overblijft voor applicaties.
        Geheugen dat door de kernel wordt gebruikt, wordt
        <emphasis>nooit</emphasis> naar disk geswapt, dus als je
	voor 100Kb aan ongebruikte drivers in je kernel hebt
	gecompileerd, dan is dat simpelweg een verspilling van RAM.
        </para></listitem>

        <listitem><para>Een aantal dingen die ik gebruik zoals 
	bijvoorbeeld de ftape floppy-tape driver of iBCS, zijn
	alleen beschikbaar als modules, maar ik wil me niet
	druk hoeven maken om het laden of weer uit het geheugen
	verwijderen van deze modules wanneer ik ze nodig heb.
        </para></listitem>

        <listitem><para>Mensen die Linux distributies samenstellen
	hoeven geen 284 verschillende bootimages te bouwen: Elke
	gebruiker laadt de modules die hij nodig heeft voor zijn
	hardware. De meeste moderne Linux distributies zullen je
	hardware detecteren en zullen alleen die modules laden die
	werkelijk nodig zijn.
        </para></listitem>
      </itemizedlist>

      <para>Natuurlijk zijn er ook redenen waarom je ze niet wilt
      gebruiken. Als je het gebruik van slechts &eacute;&eacute;n
      kernel image bestand waar alle drivers zijn ingebouwd prefereert,
      dan lees je het verkeerde document.</para>

    </sect2>
    <sect2 ID="Where"><title>Waar haal ik de benodigde onderdelen vandaan?
    ?</title>

      <para>De ondersteuning in de Linux kernel werd bij Linux 1.3.57
      ge&iuml;ntroduceerd. Als je een eerdere kernelversie hebt, dan
      zul je moeten upgraden als je de kerneld ondersteuning wilt. De
      huidige Linux kernelsources zijn te vinden op de meeste Linux
      FTP archiefsites waaronder:</para>

      <itemizedlist>
        <listitem>
          <para><ulink
          url="ftp://ftp.kernel.org/pub/linux/kernel/">Kernel.Org
          archief</ulink></para>
        </listitem>
        <listitem>
          <para><ulink
          url="ftp://metalab.unc.edu/pub/Linux/kernel/">Metalab Linux
          archief</ulink></para>
        </listitem>
        <listitem>
          <para><ulink
          url="ftp://tsx-11.mit.edu/pub/linux/sources/system/">TSX-11
          op MIT</ulink></para> 
        </listitem>
      </itemizedlist>

      <para>De user-space daemon is opgenomen in het
      <productname>modules</productname> package. Deze zijn normaal
      gesproken vanaf dezelfde plaats beschikbaar als de kernelsources.
      </para>

      <note>
      <para>Als je het module laden wilt proberen met de laatste
      <emphasis>ontwikkelaars</emphasis> kernels, dan moet je het
      nieuwere <productname>modutils</productname> package gebruiken
      en niet de <productname>modules</productname>. Bekijk altijd
      het <filename>Documentation/Changes</filename> bestand in de kernel
      sources voor het minimum vereiste versienummer voor je kernelimage.
      Zie ook <xref linkend="kernel2-1-problems"> over de problemen
      die zich voordeden met modules en 2.1 kernels.
      </para></note>

    </sect2>
    </sect1>

    <sect1 id="setup"><title>Hoe stel ik het in?</title>

      <para>Zorg eerst dat je aan de benodigde onderdelen komt:
      een geschikte kernel en het laatste
      <productname>modules</productname> package.  Dan moet je
      de module utility's volgens de instructies in het package
      installeren. Tamelijk simpel: Pak gewoon de broncode uit en
      start <command>make install</command>. Hiermee worden de
      volgende programma's in <filename>/sbin</filename> ge&iuml;nstalleerd:
      <command>genksysm</command>, <command>insmod</command>,
      <command>lsmod</command>, <command>modprobe</command>,
      <command>depmod</command> en <command>kerneld</command>. Ik raad
      je aan wat regels toe te voegen aan je opstartscripts om de 
      benodigde setup uit te voeren op het moment dat je Linux boot.
      Voeg de volgende regels toe aan het bestand
      <filename>/etc/rc.d/rc.S</filename> (als je Slackware draait) of
      aan <filename>/etc/rc.d/rc.sysinit</filename> als je
      SysVinit, d.w.z. Debian, Corel, RedHat, Mandrake of Caldera
      draait:
      </para>

<programlisting>
        # Start kerneld - dit moet zeer vroeg gebeuren in het bootproces,
	# zeker VOORDAT je fsck op bestandssystemen uitvoert
        # waarvoor wellicht automatisch diskdrivers moeten worden geladen
        if [ -x /sbin/kerneld ]
        then
                /sbin/kerneld
        fi

        # Hier komen de standaard fsck opdrachten
        # En de mount opdracht om het root fs read-write te mounten

        # Update kernel-module dependencies file
        # Je root-fs MOET nu read-write zijn gemount
        if [ -x /sbin/depmod ]
        then
                /sbin/depmod -a
        fi
</programlisting>

      <para>Deze opdrachten kunnen reeds voorkomen in het SysV init
      script. Het eerste deel start kerneld zelf. Het tweede deel
      roept <command>depmod -a</command> tijdens de systeemstart
      aan om een lijst met alle beschikbare modules samen te stellen
      en het analyseert de onderlinge afhankelijkheden. De
      depmod map vertelt kerneld dan of voor een module een andere
      module moet zijn geladen voordat het zichzelf laadt.
      </para>

      <note>
      <para>Recente versies van kerneld hebben een optie om te worden
      gelinkt met de GNU gdbm library, <productname>libgdbm</productname>. 
      Als je dit activeert bij het bouwen van de module utility's, dan
      <emphasis>zal kerneld niet starten als libgdm niet beschikbaar is
      </emphasis> wat het geval kan zijn als 
      <filename>/usr</filename> zich op een aparte partitie bevindt
      en het starten van kerneld plaatsvindt voordat <filename>/usr</filename> 
      is gemount. De aanbevolen oplossing is om 
      <filename>/usr/lib/libgdbm</filename> te verplaatsen naar
      <filename>/lib</filename>, of om kerneld statisch te linken.
      </para></note>

      <para>Pak vervolgens de kernelsources uit, configureer en bouw
      naar wens een kernel. Als je dit nog nooit eerder hebt gedaan,
      dan moet je beslist het README bestand lezen in de hoofdirectory
      van de Linux sources. Wanneer je <emphasis>make xconfig</emphasis>
      uitvoert om de kernel te configureren, let dan op de volgende
      vragen:</para>

<screen>
  Enable loadable module support (CONFIG_MODULES) [Y/n/?] Y
</screen

      <para>Je moet de laadbare module ondersteuning selecteren, anders
      zullen er geen te laden modules zijn voor kerneld! Geef gewoon
      Y als antwoord.
      </para>

<screen>
  Kernel daemon support (CONFIG_KERNELD) [Y/n/?] Y
</screen>

      <para>Dit is natuurlijk ook nodig. Dan is er heel veel wat als module
      kan worden gebouwd, je zult vragen te zien krijgen als:
      </para>

<screen>
  Normal floppy disk support (CONFIG_BLK_DEV_FD) [M/n/y/?] 
</screen>

      <para>waar je kunt antwoorden met een <keysym>M</keysym> voor
      <quote>Module</quote>. Gewoonlijk hoeven alleen de drivers die
      nodig zijn op je systeem om op te starten in de kernel te worden gebouwd;
      de rest kan worden gebouwd als modules.
      </para>

      <caution>
        <title>Essenti&euml;le drivers</title> <para>Essenti&euml;le drivers
        die noodzakelijk zijn om je systeem te booten moeten in de core
	kernel worden gecompileerd en kunnen niet als modules worden geladen.
        Kenmerkend zijn hier de harddisk-driver en de driver voor het root
	filesysteem. Als je een dual-boot machine hebt en het rekent op
	bestanden die te vinden zijn op de andere partitie, dan moet je
	in de core kernel ook ondersteuning compileren voor dat bestandssysteem.
        </para>
      </caution>

      <para>Wanneer je <command>make config</command> hebt doorlopen, 
      compileer en installeer je de nieuwe kernel en de modules met
      <command>make dep clean bzlilo modules modules_install</command>.</para>

      <para>Oef. </para>

      <tip>
        <title>Compileren van een kernel-image</title> <para>De opdracht
        <command>make zImage</command> zal stoppen zonder een kernel
	te installeren en de nieuwe kernel-image achterlaten in het
	bestand <filename>arch/i386/boot/zImage</filename>. Om dit image
	te gaan gebruiken, zul je het naar waar je je boot-image hebt,
	moeten kopi&euml;ren en het handmatig met LILO moeten installeren.
        </para>

        <para>Zie voor meer informatie over het configureren, bouwen
	en installeren van je eigen kernel de Kernel-HOWTO, welke
        regelmatig wordt gepost naar 
	<filename>comp.os.linux.answers</filename>, en beschikbaar is
        vanaf <ulink url="http://www.linuxdoc.org">het Linux
        Documentatie Project</ulink> en mirrors.</para ></tip>

    <sect2 ID="Testing"><title>Kerneld uitproberen</title>

      <para>Start je systeem nu opnieuw op met de nieuwe kernel. Wanneer het
      systeem weer opkomt, kun je <command>ps ax</command> uitvoeren, 
      en als het goed is, zie je dan een regel voor kerneld: </para>

<screen>
    PID TTY STAT  TIME COMMAND
     59  ?  S     0:01 /sbin/kerneld
</screen>

      <para>Een van de fraaie dingen met kerneld is dat zodra je
      de kernel en de daemon hebt ge&iuml;nstalleerd, er weinig
      instellingen nodig zijn. Probeer om te beginnen &eacute;&eacute;n
      van de drivers die je als een module compileerde; het is eerder
      waarschijnlijk dan niet dat het zonder verdere configuratie zal
      werken. Als ik de floppy driver als een module compileerde, dan
      zou ik een DOS diskette in het diskettestation kunnen doen en
      typen:
      </para>

<screen>
  osiris:~ $ mdir a:
   Volume in drive A has no label
   Volume Serial Number is 2E2B-1102
   Directory for A:/

  binuti~1 gz       1942 02-14-1996  11:35a binutils-2.6.0.6-2.6.0.7.diff.gz
  libc-5~1 gz      24747 02-14-1996  11:35a libc-5.3.4-5.3.5.diff.gz
          2 file(s)        26689 bytes
</screen>

      <para>De floppy driver werkt! Het wordt automatisch door kerneld
      geladen wanneer ik de floppy disk probeer te gebruiken.
      </para>

      <para>Om te bekijken of de floppy module inderdaad is geladen, kun
      je <command>/sbin/lsmod</command> uitvoeren om een opsomming van
      alle thans geladen modules te zien te krijgen:
      </para>

<screen>
  osiris:~ $ /sbin/lsmod 
  Module:        #pages:  Used by:
  floppy            11    0 (autoclean)
</screen>

      <para>De <quote>(autoclean)</quote> betekent dat de module
      automatisch door kerneld zal worden verwijderd als het meer
      dan een minuut niet wordt gebruikt. Dus de 11 pagina's geheugen
      (= 44kB, &eacute;&eacute;n pagina is 4 kB) zullen alleen worden
      gebruikt wanneer ik het diskettestation benader. Gebruik ik de
      diskette meer dan een minuut niet, dan wordt het geheugen
      vrijgegeven. Heel fraai, als je weinig geheugen hebt voor je
      applicaties!
      </para>

    </sect2>
    </sect1>


    <sect1 id="configuration"><title>Hoe weet kerneld welke module te laden?
     </title> 

      <para>Alhoewel kerneld met ingebouwde kennis wordt geleverd over
      de meest gebruikelijke typen modules, zijn er situaties waar
      kerneld niet weet hoe een verzoek van de kernel af te handelen.
      Dit is het geval bij bv CD-ROM drivers of netwerkdrivers, waarbij
      er meer dan &eacute;&eacute;n mogelijke module kan worden geladen.
      </para>

      <para>Het verzoek dat de daemon kerneld krijgt van de kernel is
      voor &eacute;&eacute;n van de volgende items:</para>

      <itemizedlist>
        <listitem><para>een block-device driver </para></LISTITEM>

        <listitem><para>een character-device driver </para></LISTITEM>

        <listitem><para>een binair formaat </para></LISTITEM>

        <listitem><para>een lijndiscipline </para></LISTITEM>

        <listitem><para>een bestandssysteem </para></LISTITEM>

        <listitem><para>een netwerkdevice </para></LISTITEM>

        <listitem><para>een netwerkservice (b.v. rarp) </para></LISTITEM>

        <listitem><para>een protocol (b.v. IPX)
        </para></listitem>
      </itemizedlist>

      <para>Kerneld stelt vast welke module moet worden geladen door
      het configuratiebestand <filename>/etc/conf.modules</filename>
      <footnote> <para>Een aantal distributies noemen dit bestand
      <filename>modules.conf</filename></para> </footnote> te scannen. 
      In dit bestand bevinden zich twee soorten regels: Directorypaden
      waar de module bestanden zijn te vinden, en aan de module toegekende
      aliassen die moet worden geladen voor een gegeven service.
      Als dit bestand nog niet bestaat, dan kun je het aanmaken door het
      uitvoeren van:
      </para>

<screen>
  /sbin/modprobe -c | grep -v '^path' /etc/conf.modules
</screen>

      <para>Als je nog een andere path directive toe wilt voegen aan
      de standaard directorypaden, dan moet je tevens alle standaard
      directorypaden opnemen, aangezien een path directive in
      <filename>/etc/conf.modules</filename> alle paden die modprobe
      standaard kent zullen worden <emphasis>vervangen</emphasis> door het
      toegevoegde pad.
      </para>

      <para>Normaal gesproken zul je zelf geen directorypaden willen
      toevoegen, aangezien de ingebouwde set zou moeten voorzien in
      alle normale setups.
      </para>

      <para>Als je aan de andere kant een alias of option directive
      toe wilt voegen, dan zullen je nieuwe regels in
      <filename>/etc/conf.modules</filename> worden toegevoegd
      aan die modprobe reeds kent. Als je een alias of
      optie <emphasis>herdefinieert</emphasis> dan zullen je
      nieuwe regels in <filename>/etc/conf.modules</filename>
      de ingebouwde regels overschrijven.</para>

      <sect2 id="blockdev"><title>Block devices</title>

      <para>Als je <command>/sbin/modprobe -c</command> uitvoert, dan
      zul je een overzicht krijgen met de modules die kerneld kent,
      en met welke verzoeken zij corresponderen. Het verzoek bijvoorbeeld
      dat er op neerkomt dat de floppy driver wordt geladen is voor het
      block-device met major nummer 2:</para>

<screen>
  osiris:~ $ /sbin/modprobe -c | grep floppy
  alias block-major-2 floppy
</screen>

        <para>Waarom <filename>block-major-2</filename>? Omdat de
     floppy devices <filename>/dev/fd*</filename> gebruik maken
     van major device 2 en het block devices zijn:
     </para>

<screen>
  osiris:~ $ ls -l /dev/fd0 /dev/fd1
  brw-rw-rw-   1 root     root       2,   0 Mar  3  1995 /dev/fd0
  brw-r--r--   1 root     root       2,   1 Mar  3  1995 /dev/fd1
</screen>

      </sect2>

      <sect2 id="chardev"><title>Character devices</title>
        <para>Met Character devices wordt op vergelijkbare wijze
	omgegaan. B.v. de ftape floppy tape driver neemt de plaats in van
        major-device 27: </para >

<screen>
  osiris:~ $ ls -lL /dev/ftape 
  crw-rw----   1 root     disk      27,   0 Jul 18  1994 /dev/ftape
</screen>

        <para>Kerneld is standaard echter niet op de hoogte van de
	ftape driver, het wordt niet weergegeven in de uitvoer van
        <command>/sbin/modprobe -c</command>. Voor het instellen van
	kerneld dat het de ftape driver laadt, moet ik een regel
	toevoegen aan het configuratiebestand 
	<filename>/etc/conf.modules</filename>:
        </para>

<screen>
  alias char-major-27 ftape
</screen>

      </sect2>

      <sect2 id="eth0"><title>Netwerkdevices</title>

        <para>Je kunt ook de naam van het device gebruiken in plaats
	van de <literal>char-major-xxx</literal> of
        <literal>block-major-yyy</literal> setup. Dit is vooral handig
	bij netwerkdrivers. Een driver voor een ne2000 netwerkkaart
	bijvoorbeeld, fungerend als <filename>eth0</filename> zou
	worden geladen met</para>

<screen>
  alias eth0 ne
</screen>

        <para>Als je een aantal opties aan de driver door moet geven,
	bijvoorbeeld om de module te laten weten welk IRQ de netwerkkaart
	gebruikt, dan moet je een <quote>options</quote> regel 
	toevoegen: </para>

<screen>
  options ne irq=5
</screen>

        <para>Dit zorgt ervoor dat kerneld de NE2000 driver laadt met de
	opdracht
        </para>

<screen>
  /sbin/modprobe ne irq=5
</screen>

        <para>Natuurlijk zijn de werkelijke beschikbare opties specifiek
	voor de module die je laadt.
        </para>

      </sect2>

      <sect2 id="binfmt"><title>Binaire formaten</title>

        <para>Binaire formaten worden op vergelijkbare wijze afgehandeld.
	Wanneer je een programma probeert uit te voeren waarvan de kernel
	niet weet hoe het te laden, dan krijgt kerneld een verzoek voor
        <literal>binfmt-</literal><varname>xxx</varname>, waar
        <varname>xxx</varname> een nummer is dat is bepaald uit de eerste
	paar bytes van het uitvoerbare bestand.
        Dus de configuratie van kerneld
	om de binfmt_aout module voor ZMAGIC (a.out) uitvoerbare
	bestanden te laden is:
        </para>

<screen>
  alias binfmt-267 binfmt_aout
</screen>

        <para>Het magic nummer voor ZMAGIC bestanden is 267 en als je in
        <filename>/etc/magic</filename> kijkt, dan zie je het nummer
        0413; houdt in gedachten dat <filename>/etc/magic</filename> 
	gebruik maakt van octale getallen terwijl kerneld gebruik maakt
	van decimale getallen en 413 in het octale stelsel gelijk is aan
	267 in het decimale stelsel. Er zijn feitelijk drie iets andere
	varianten op a.out uitvoerbare bestanden
        (NMAGIC, QMAGIC en ZMAGIC), dus voor volledige support van de
        binfmt_aout module hebben we nodig
        </para>

<screen>
  alias binfmt-264 binfmt_aout  # pure executable (NMAGIC)
  alias binfmt-267 binfmt_aout  # demand-paged executable (ZMAGIC)
  alias binfmt-204 binfmt_aout  # demand-paged executable (QMAGIC)
</screen>

        <para>a.out, Java en iBCS binaire formaten worden automatisch
	zonder enige configuratie door kerneld herkend.
        </para>

      </sect2>

      <sect2 id="ldisc"><title>Lijndisciplines (slip, cslip en ppp)</title>

        <para>Om lijndisciplines wordt verzocht met
        <literal>tty-ldisc-</literal><varname>x</varname>, waarbij
        <varname>x</varname> gewoonlijk 1 is (voor SLIP) of 3
	(voor PPP). Beiden worden automatisch herkend door kerneld.
        </para>

        <para>Nu we het toch over ppp hebben, als je wilt dat kerneld de
	bsd_comp data compressie module voor ppp laadt, dan moet je de
	volgende twee regels aan
        <filename>/etc/conf.modules</filename> toevoegen:</para>

<screen>
  alias tty-ldisc-3 bsd_comp
  alias ppp0 bsd_comp
</screen>

      </sect2>

      <sect2 id="net-pf"><title>Netwerk protocol family's (IPX,
      AppleTalk, AX.25)</title> 

        <para>Tevens kunnen een aantal netwerkprotocollen worden geladen.
        De kernel vraagt kerneld om een protocol familie (b.v. IPX)
        met een verzoek om
        <literal>net-pf-</literal><varname>X</varname> waarbij
        <varname>X</varname> een nummer is die de gewenste familie
	aangeeft. B.v. <literal>net-pf-3</literal> is AX.25,
        <literal>net-pf-4</literal> is IPX en
        <literal>net-pf-5</literal> is AppleTalk; Deze nummers worden
	vastgesteld door de AF_AX25, AF_IPX enz. definities in het
	linux bronbestand <filename>include/linux/socket.h</filename>.
        Dus voor het automatisch laden van de IPX module, heb je
	in <filename>/etc/conf.modules</filename> een regel nodig als:
        </para>

<screen>
  alias net-pf-4 ipx
</screen>

        <para>Zie <xref linkend="commonproblems"> voor informatie
        over hoe je een aantal ergerlijke meldingen tijdens het booten
	kunt voorkomen die zijn
        gerelateerd aan ongedefini&euml;erde protocol family's.</para>
      </sect2>

      <sect2 id="fs"><title>Bestandssystemen</title>

        <para>kerneld verzoeken om bestandssystemen bestaan simpelweg
	uit de naam van het type bestandssysteem. Een veelvoorkomend
	gebruik hiervan is het laden van de module isofs voor CD-ROM
	bestandssystemen, d.w.z. bestandssystemen van het type
        iso9660: </para>

<screen>
  alias iso9660 isofs
</screen>

      </sect2>
    </sect1>

    <sect1 id="special-devs">
    <title>Devices waarvoor speciale configuratie nodig is</title>

     <para>Voor een aantal devices is extra configuratie nodig naast de
     normale aliasing van een device naar een module.
     </para>

      <itemizedlist>
        <listitem><para>Character devices op major nummer 10: <link
        linkend="miscdevs">De diverse devices</link></para></listitem>  

        <listitem><para><link linkend="scsidevs">SCSI devices</link>
        </para></listitem> 

        <listitem><para><link linkend="pre-post">Devices waarvoor
	speciale initialisatie nodig is </link></para></listitem>
      </itemizedlist>

      <sect2 id="miscdevs">
        <title>char-major-10 : Muizen, watchdogs en randomness</title>

        <para>Hardware devices worden gewoonlijk ge&iuml;dentificeerd
	via hun major device nummers, b.v. ftape is
        <literal>char-major-27</literal>. Als je echter de bestanden
	in <filename>/dev</filename> bekijkt met char major 10,
        dan zul je zien dat dit een boel verschillende devices zijn,
        waaronder </para>

        <itemizedlist>
          <listitem><para>Diverse soorten muizen (busmuizen, PS/2
          muizen)</para></listitem> 

          <listitem><para>Watchdog devices </para></LISTITEM>

          <listitem><para>De kernel <filename>random</filename>
          device </para></listitem>

          <listitem><para>APM (Advanced Power Management) interface
          </para></listitem>

        </itemizedlist>

        <para>Deze devices worden door verschillende modules bestuurd,
	niet slechts door &eacute;&eacute;n, en daarom wordt voor deze
	<emphasis>misc. devices</emphasis> in de kerneld configuratie
	gebruik gemaakt van het major nummer <emphasis>en</emphasis>
	het minor nummer:</para>

<screen>
        alias char-major-10-1 psaux     # Voor PS/2 mouse
        alias char-major-10-130 wdt     # Voor WDT watchdog
</screen>

        <para>Je hebt kernelversie 1.3.82 of nieuwer nodig om hiervan
	gebruik te kunnen maken; eerdere versies geven het minor nummer
	niet door aan kerneld, waardoor het voor kerneld onmogelijk is
	om uit te zoeken welk misc. device het moet laden.
        </para>

      </sect2>

      <sect2 id="scsidevs">
      <title>Het laden van SCSI drivers: De
      <literal>scsi_hostadapter</literal> entry</title>

        <para>Drivers voor SCSI devices bestaan uit een driver voor de
        SCSI host adapter (b.v. een Adaptec 1542), en een driver voor het
        type SCSI device dat je gebruikt, b.v. een harddisk, een CD-ROM of een
        tape-drive. Deze kunnen allen worden geladen als modules. Als je
	echter bijvoorbeeld de CD-ROM drive wilt benaderen die is 
	gekoppeld aan de Adaptec kaart, dan weten de kernel en kerneld
	alleen dat ze de <filename>sr_mod</filename> module moeten
	laden om SCSI CD-ROM's te ondersteunen; niet bekend is op welke
	SCSI-controller de CD-ROM is aangesloten en daarom niet
	welke module moet worden geladen voor ondersteuning van de
	SCSI-controller.
        </para>

        <para>Om hier iets aan te doen, kun je een regel toevoegen aan
        <filename>/etc/conf.modules</filename>
	voor de SCSI drivermodule waarbij aan kerneld wordt opgegeven
	welke van de vele mogelijke SCSI controllermodules het moet laden:
        </para>

<screen>
        alias scd0 sr_mod               # sr_mod voor SCSI CD-ROM's ...
        alias scsi_hostadapter aha1542  # ... Adaptec driver nodig
</screen>

        <para>Dit werkt alleen bij kernelversie 1.3.82 of later. </para>

        <para>Dit werkt als je slechts &eacute;&eacute;n SCSI-controller
	hebt. Als je er meer dan &eacute;&eacute;n hebt, dan wordt het
	iets moeilijker.
        </para>

        <para>Over het algemeen kun je kerneld geen driver laten laden
	voor een SCSI-hostadapter, als er reeds een driver voor een andere
	hostadapter is ge&iuml;nstalleerd. Je moet of beide drivers in je
	kernel inbouwen (niet als modules) of de modules handmatig laden.
        </para>

        <tip> <para>Er <emphasis>is</emphasis> een manier om
	kerneld meerdere SCSI-drivers te laten laden.
        James Tsiao kwam met het volgende idee:</para>

          <blockquote>
            <para> Je kunt kerneld makkelijk de tweede scsi driver laten
	    laden door met de hand de afhankelijkheid in te stellen in 
	    modules.dep. Hiervoor is de volgende regel nodig:
            </para>
        
            <screen>
      /lib/modules/2.0.30/scsi/st.o: /lib/modules/2.0.30/scsi/aha1542.o
</screen>
            <para>Om kerneld <filename>aha1542.o</filename> te laten laden 
	    voordat het <filename>st.o</filename> laadt.  
	    Op mijn machine thuis is het vrijwel exact zo ingesteld als
	    de setup hierboven, en het werkt prima bij al mijn
            tweede scsi devices, waaronder tape, cd-rom, en
            generic scsi devices.  De keerzijde is dat
            <command>depmod -a</command> deze afhankelijkheden niet
	    automatisch kan detecteren, dus de gebruiker moet ze met
	    de hand toevoegen en geen
            <command>depmod -a</command> tijdens de systeemstart uitvoeren.
	    Maar als het eenmaal is ingesteld, zal kerneld 
            <filename>aha1542.o</filename> prima automatisch laden.
            </para></blockquote></tip>

        <para>Wees je ervan bewust dat deze techniek alleen werkt als je
	verschillende soorten SCSI-devices op de twee controllers hebt,
        zoals bijvoorbeeld harddisks op de ene controller en
	cd-rom drives, tapes of generic SCSI-devices op een ander.
        </para>

      </sect2>

      <sect2 id="pre-post" xreflabel="Pre/Post Install">
        <title>Wanneer het laden van een module niet genoeg is: De
        <literal>post-install</literal> entry</title>

        <para>Soms is het slechts laden van de module niet genoeg om
	iets werkend te krijgen. Als je bijvoorbeeld je geluidskaart
	als een module hebt gecompileerd, is het vaak handig om een bepaald
	volumeniveau in te stellen. Het probleem is echter dat de instelling
	de volgende keer dat de module wordt geladen verdwijnt.
        Hier is een aardige truuk van Ben
        Galliart (<email>bgallia@luc.edu</email>): </para>

        <blockquote>
          <para>De uiteindelijke oplossing vereiste de installatie van het
	  <ulink url="ftp://sunsite.unc.edu/pub/Linux/apps/sound/mixers/">
          <productname>setmix</productname> package</ulink> om daarna
	  de volgende regel toe te voegen aan 
          <filename>/etc/conf.modules</filename>: </para>
          <programlisting>
post-install sound /usr/local/bin/setmix -f /etc/volume.conf
</programlisting>
        </blockquote>

        <para>Nadat de sound module is geladen, voert kerneld de
	opdracht uit die wordt aangegeven in de
        <literal>post-install sound</literal> entry. Dus de sound
	module wordt geconfigureerd met de opdracht
        <command>/usr/local/bin/setmix -f
        /etc/volume.conf</command>.</para>

        <para>Dit kan ook voor andere modules handig zijn, 
        de <filename>lp</filename> module bijvoorbeeld kan worden
	geconfigureerd met het programma
        <filename>tunelp</filename> door de toevoeging:
        </para>

<programlisting>
        post-install lp tunelp options
</programlisting>

        <para>Je hebt kerneld versie 1.3.69f of later nodig wil kerneld
	deze opties herkennen.
        </para>

        <note>

          <para>In een eerdere versie van deze mini-HOWTO werd een pre-remove
	  optie genoemd dat kon worden gebruikt om een opdracht op te
	  starten voordat kerneld een module zou verwijderen. Dit heeft
	  echter nooit gewerkt en het gebruik ervan wordt daarom ontmoedigd.
          Naar alle waarschijnlijkheid zal deze optie in een toekomstige
	  kerneld release verdwijnen. Het gehele onderwerp over
	  module instellingen ondergaat op het moment een aantal wijzigingen 
          en wellicht dat het er anders uitziet op je systeem wanneer je
	  dit leest.
          </para></note>

      </sect2>
    </sect1>

    <sect1 id="spying"><title>Kerneld bespioneren</title>

      <para>Mocht je alles al hebben geprobeerd en kun je er niet
      achter komen wat de kernel vraagt kerneld te doen, dan is er
      een manier om de verzoeken die kerneld ontvangt te bekijken,
      om er zo achter te komen wat in
      <filename>/etc/conf.modules</filename> moet komen te staan:
      Het <command>kdstat</command> utility. </para>

      <para>Dit handige kleine programmaatje wordt geleverd met het
      modules-package, maar is standaard niet gecompileerd of 
      ge&iuml;nstalleerd. Om het samen te stellen ga je naar de
      directory met kerneld bronnen en typ je
      <command>make kdstat</command>. Om dan kerneld informatie te laten 
      weergeven wat het aan het doen is, voer je 
      <command>kdstat debug</command> uit. Kerneld zal beginnen met het
      spuwen van wat meldingen op de console over wat het aan het doen is.
      Als je dan de opdracht probeert en uitvoert die je wilt gebruiken,
      dan zul je de kerneld verzoeken te zien krijgen; deze kunnen worden
      geplaatst in <filename>/etc/conf.modules</filename> en
      aliased naar de module die nodig is om de job te klaren. </para>

      <para>Start <command>/sbin/kdstat</command> om het debuggen uit te
      zetten.</para>

    </sect1>

    <sect1 id="goodies"><title>Speciale kerneld gebruiken</title>

      <para>Ik wist dat je zou vragen naar het hoe voor het instellen van de
      screen-saver module!</para>

      <para>In de <filename>kerneld/GOODIES</filename> directory in het
      modules package staan een paar kernelpatches voor screen-saver
      en console-beep ondersteuning in kerneld; deze maken nog geen
      onderdeel uit van de offici&euml;le kernel, dus je zult de
      kernel-patches moeten installeren en de kernel opnieuw moeten
      compileren.
      </para>

      <para>Voor het installeren van een patch, gebruik je de opdracht patch:
      </para>

<screen>
  cd /usr/src/linux
  patch -s -p1 /usr/src/modules-*/kerneld/GOODIES/blanker_patch
</screen>

      <para>Stel de kernel dan opnieuw samen en installeer deze. </para>

      <para>Wanneer de schermbeveiliging wordt geactiveerd, zal kerneld de
      opdracht <filename>/sbin/screenblanker</filename> uitvoeren; dit bestand
      kan alles zijn wat je maar wilt, zoals bijvoorbeeld een shellscript
      die je favoriete schermbeveiliging uitvoert.
      </para>

      <para>Wanneer de kernel het scherm weer in normale toestand terug
      wil brengen, stuurt het een
      <token>SIGQUIT</token> signaal naar het proces dat
      <filename>/sbin/screenblanker</filename> draait. Je shellscript
      of schermbeveiliger zou dit af moeten vangen.
      Denk eraan het scherm in de oorspronkelijke tekstmodus terug
      te brengen!</para>

    </sect1>

    <sect1 id="commonproblems" xreflabel="Common Problems">
      <title>Algemene problemen en dingen die je je wellicht afvraagt</title>

      <qandaset>
        <qandaentry>
          <question>
            <para>Waarom krijg ik <errorname>Cannot locate module for
            net-pf-</errorname><varname>X</varname> meldingen wanneer ik
            <command>/sbin/ifconfig</command> uitvoer?</para></question>

          <answer>
            <para>Zo om en nabij kernelversie 1.3.80 werd de netwerkcode
	    gewijzigd dat het 't laden van protocol families 
            als modules mogelijk maakte (b.v. IPX, AX.25 en AppleTalk).
	    Dit zorgde voor de aanvulling van een nieuw kerneld verzoek:
            <literal>net-pf-</literal><varname>X</varname>, waarbij
            <varname>X</varname> een nummer is die het protocol aanduidt
            (zie <filename>/usr/src/linux/include/linux/socket.h</filename>
            voor de betekenis van de diverse nummers). Helaas vangt
            <command>ifconfig</command> deze meldingen per ongeluk af,
	    zodat bij een heleboel mensen een paar meldingen worden gelogd
	    wanneer het systeem boot en het draait
            <command>ifconfig</command> om het loopback device in te stellen.
            De meldingen zijn onschuldig, en je kunt ze deactiveren door
	    het toevoegen van de regels:</para>

<screen>
        alias net-pf-3 off      # Vergeet AX.25
        alias net-pf-4 off      # Vergeet IPX
        alias net-pf-5 off      # Vergeet AppleTalk
</screen>

            <para>aan <filename>/etc/conf.modules</filename>. Je voegt
	    natuurlijk geen regel toe om IPX te deactiveren als je IPX
	    wel als een module gebruikt.
            </para>

          </answer></qandaentry>

        <qandaentry>
          <question>
            <para>Na het starten van kerneld, wordt mijn systeem zo langzaam
	    als een slak wanneer ik mijn ppp-verbinding activeer
            </para> </question>

          <answer>
            <para>Er zijn hier diverse meldingen van. Het lijkt op een
	    ongelukkige interactie tussen kerneld en het
            <productname>tkPPP</productname> script dat op een aantal
	    systemen wordt gebruikt om de PPP verbinding op te zetten
	    en te monitoren. Het script voert blijkbaar loops uit 
	    terwijl het <command>ifconfig</command> draait.
            Dit activeert kerneld, te zoeken naar de
            <literal>net-pf-</literal><varname>X</varname> modules
            (zie hiervoor), de systeembelasting hoog houdend en mogelijk
            veel Cannot locat module for
            <literal>net-pf-</literal><varname>X</varname> meldingen
	    in de systeemlog veroorzakend. Er is geen bekende oplossing voor,
	    anders dan geen gebruik te maken van
            <productname>tkPPP</productname>, of het zodanig te wijzigen
	    dat het een andere manier om de verbinding te monitoren gebruikt.
            </para>

          </answer></qandaentry>

        <qandaentry>
          <question>
            <para>kerneld laadt mijn SCSI-driver niet!</para></question>
          <answer>
            <para>Voeg een regel toe voor de SCSI-hostadapter aan het bestand
            <filename>/etc/conf.modules</filename>. Zie de beschrijving van
	    de <link linkend="scsidevs"><literal>scsi_hostadapter</literal>
	    </link> hiervoor.</para>

          </answer></qandaentry>
        <qandaentry>
          <question>
            <para>modprobe klaagt over een ongedefinieerde
             <errorname>gcc2_compiled</errorname></para></question>
          <answer>
            <para>Dit is een bug in de module utility's, die alleen
	    in binutils 2.6.0.9 en later aan het licht komt en het is
	    ook gedocumenteerd in de release note van de binutils.
            Dus lees dat of haal een upgrade op voor de module-utilities 
	    die deze bug corrigeert.
            </para>

          </answer></qandaentry>
        <qandaentry>
          <question>
            <para>Mijn geluidsdriver blijft zijn instellingen voor het volume
	    enz vergeten
            </para></question>
          <answer>
            <para>De instellingen voor een module worden opgeslagen 
	    in de module zelf wanneer het wordt geladen. Dus wanneer kerneld
	    automatisch een module uit het geheugen verwijdert, zijn alle
	    instellingen die je hebt ingesteld vergeten en de volgende
	    keer dat de module weer wordt geladen keert het terug naar de
	    standaardinstellingen.
            </para>

            <para>Je kunt kerneld aangeven een module te configureren door
	    een programma uit te voeren nadat de module automatisch is
	    geladen. Zie <xref linkend="pre-post"> on the
            <literal>post-install</literal> entry. </para>
            </answer></qandaentry>

        <qandaentry>
          <question>
            <para>DOSEMU heeft een aantal modules nodig; hoe kan ik
	    kerneld zover krijgen dat het deze laadt?
            </para></question>
          <answer>
            <para>Dat kan niet. Geen van de dosemu versies, offici&euml;le
	    of ontwikkelaarsversies ondersteunt het laden van de dosemu
	    modules via kerneld. Met kernel 2.0.26 echter, heb je de 
	    speciale dosemumodules niet meer nodig; upgrade gewoon naar
	    dosemu 0.66.1 of een nieuwere versie.
            </para>

          </answer></qandaentry>
        <qandaentry>
          <question>
            <para>Waarom krijg ik <errorname>Ouch, kerneld timed out,
            message failed</errorname> meldingen ?</para></question>
          <answer>
            <para>Wanneer de kernel een verzoek aan kerneld verstuurt,
	    verwacht het hiervan binnen een seconde een bevestiging 
	    terug te ontvangen. Als kerneld deze bevestiging niet
	    zendt, wordt deze melding gelogt. Het verzoek wordt opnieuw
	    gestuurd en zou tenslotte door moeten komen. </para>

            <para>Dit gebeurt gewoonlijk op systemen met een zeer hoge
	    belasting. Aangezien kerneld een gebruikersproces is, 
            wordt het net als elk ander proces op het systeem gepland.
            Ten tijden van hoge belasting, wordt het wellicht niet op
	    tijd uitgevoerd om de bevestiging terug te sturen voordat
	    de kernel onderbreekt.
            </para>

            <para>Probeer het opnieuw opstarten van kerneld als 
	    dit bij een lage belasting gebeurt. Kill het kerneld proces,
	    en start het weer op met de opdracht
            <command>/usr/sbin/kerneld</command>. Als het probleem blijft
	    aanhouden dan zou je een bug report moeten mailen naar
            <email>linux-kernel@vger.rutgers.edu</email>, maar
            verzeker je er <emphasis>alsjeblieft</emphasis> van dat
	    de door je in gebruik zijnde versies van de kernel, kerneld 
	    en module utility's up-to-date zijn voor je het als probleem
	    post. Controleer de benodigdheden in
            <filename>linux/Documentation/Changes</filename></para>

          </answer></qandaentry>
        <qandaentry>
          <question>
            <para>Mount wacht niet op kerneld totdat het de module
	    voor het bestandssysteem heeft geladen
            </para></question> 
          <answer>
            <para>Er zijn een aantal meldingen waardoor de opdracht mount(8)
	    niet wacht op kerneld totdat het de module voor het
	    bestandssysteem heeft geladen.
            <command>lsmod</command> toont wel dat kerneld
	    de module laadt, en als je de opdracht mount onmiddellijk
	    herhaalt, lukt het wel. Dit schijnt een bug te zijn in de
            module-utilities versie 1.3.69f waardoor een aantal
	    Debian gebruikers wordt getroffen.
            Het kan worden gecorrigeerd door een latere
	    versie van de module utility's op te halen.
            </para>

          </answer></qandaentry>
        <qandaentry>
          <question>
            <para>kerneld kan de <literal>ncpfs</literal> module
	    niet laden</para></question>
          <answer>
            <para>Je moet de ncpfs utility's compileren met
            <token>-DHAVE_KERNELD</token>. Zie de
            <productname>ncpfs</productname>
            <filename>Makefile</filename>. </para>

          </answer></qandaentry>
        <qandaentry>
          <question>
            <para>kerneld kan de <filename>smbfs</filename>
            module niet laden</para></question>
          <answer>
            <para>Je hebt een oudere versie van de
            <productname>smbmount</productname> utility's in gebruik. Haal de
	    laatste versie op (0.10 of later) vanaf
            <ulink url="ftp://tsx-11.mit.edu/pub/linux/filesystems/smbfs/">het
            SMBFS archief op TSX-11</ulink></para>
          </answer>
        </qandaentry>
        <qandaentry>
          <question>
            <para>Ik heb alles als modules gecompileerd, en nu boot
	    mijn system niet of kerneld kan de module voor het root
	    bestandssysteem niet laden!
            </para></question>

          <answer>
            <para>Je kunt niet 
            <emphasis>alles</emphasis> modularizeren: In de kernel moeten
	    zich voldoende drivers bevinden om je root bestandssysteem
	    te kunnen mounten, en de nodige programma's om
            kerneld te starten.<footnote>  
	    <para>In werkelijkheid is dit niet waar. Late
            1.3.x en alle 2.x kernels ondersteunen het gebruik van een
	    initi&euml;le ramdisk die door LILO of LOADLIN wordt geladen;
	    het is mogelijk in een zeer vroeg stadium van het bootproces
	    modules vanaf deze disk te laden. Hoe je dit doet is beschreven
	    in het bestand <filename>linux/Documentation/initrd.txt</filename>
	    dat wordt meegeleverd met de kernel bronbestanden. </para>
            </footnote>. Wat je niet kunt modularizeren: </para>

            <itemizedlist>
              <listitem><para>de driver voor de harddisk waar je root
	      bestandssysteem op voorkomt
            </para></listitem>

              <listitem><para>de driver voor het root bestandssysteem zelf
              </para></listitem> 

              <listitem><para>de binary format loader voor init,
              kerneld en andere programma's </para></listitem>
            </itemizedlist>

          </answer></qandaentry>
        <qandaentry>
          <question>
            <para>kerneld laadt niet tijdens het booten; het geeft foutmeldingen
	    over libgdbm</para></question> 
          <answer>
            <para>Nieuwere versies van kerneld hebben de GNU dmb library,
            <filename>libgdbm.so</filename> nodig om te kunnen draaien. De
	    meeste installaties hebben dit bestand in
            <filename>/usr/lib</filename>, maar waarschijnlijk start je
            kerneld voordat het <filename>/usr</filename> bestandssysteem
            is gemount. Een symptoom hiervan is dat kerneld tijdens het
	    starten van het systeem niet (vanuit je rc-scripts) zal starten,
	    maar prima draait als je het met de hand start nadat het systeem
	    is geboot. De oplossing is de kerneld opstart te verplaatsen
	    nadat <filename>/usr</filename> is gemount of door de gdbm
	    library naar je root bestandssysteem te verplaatsen, b.v. naar
            <filename>/lib</filename>.</para>
          </answer>
        </qandaentry>
        <qandaentry>
          <question>
            <para>Ik krijg Cannot load module <varname>xxx</varname> maar
	    ik heb mijn kernel net opnieuw geconfigureerd zonder
            <varname>xxx</varname> ondersteuning!</para></question>
          <answer>
            <para>De Slackware installatie (mogelijk anderen) bouwt een
             standaard <filename>/etc/rc.d/rc.modules</filename> die
	    een expliciete modprobe uitvoert op een vari&euml;teit aan
	    modules. Exact welke modules worden geladen met modprobe
            is afhankelijk van de oorspronkelijke
	    configuratie van de kernel. Je hebt je kernel waarschijnlijk
	    opnieuw geconfigureerd om er &eacute;&eacute;n of meer
	    modules uit te laten die in rc.modules met modprobe
	    worden getracht te laden, vandaar de foutmelding(en).
            Werk het rc.modules bestand bij door voor modules die je
	    niet langer gebruikt een commentaarteken te plaatsen of
	    verwijder <filename>rc.modules</filename> in zijn geheel en laat
	    kerneld de modules laden wanneer ze nodig zijn.
            </para>
          </answer>
        </qandaentry>
        <qandaentry>
          <question>
            <para>Ik heb mijn kernel en modules opnieuw gecompileerd en
	    krijg bij het booten steeds meldingen over unresolved symbols 
            </para></question>
          <answer>
            <para>Je hebt waarschijnlijk je kernel opnieuw
	    geconfigureerd en gecompileerd en daar wat modules uitgelaten.
            Je hebt een aantal modules die je niet langer gebruikt
            in de <filename>/lib/modules</filename> directory. De
	    eenvoudigste manier om dit te corrigeren is het verwijderen
	    van de <filename>/lib/modules/</filename><varname>x.y.z</varname>
            directory en de opdracht <command>make modules_install</command>
	    vanuit de kernel broncode directory nogmaals op te starten.
            Dit probleem komt alleen voor wanneer je de kernel opnieuw
	    configureert zonder van versie te wijzigen. Wanneer je deze
	    foutmelding te zien krijgt wanneer je een nieuwe kernelversie
	    hebt ge&iuml;nstalleerd, dan gaat het om een ander probleem.
            </para>
          </answer>
        </qandaentry>
        <qandaentry id="kernel2-1-problems">
          <question><para>Ik installeerde Linux 2.1/2.3 en nu kan
	  ik geen <emphasis>enkele</emphasis> module meer laden!
          </para></question>
          <answer>
            <para>Oneven genummerde Linux versies zijn ontwikkelaarskernels.
	    Als zodanig kan ervan worden verwacht dat er van tijd tot tijd
	    iets breekt. Een van de dingen die veelbetekenend is
	    gewijzigd is de wijze waarop modules worden afgehandeld,
	    en waar de kernel en modules in het geheugen worden geladen.
            </para>

            <para>Samengevat: als je modules wilt gebruiken in combinatie
	    met een ontwikkelaarskernel, dan moet je
            </para>

            <itemizedlist>
              <listitem><para>het bestand
              <filename>Documentation/Changes</filename> lezen en hierin
	      opzoeken welke packages moeten worden bijgewerkt op je systeem
              </para></listitem>

              <listitem><para>het laatste modutils package gebruiken,
	      beschikbaar vanaf <ulink
              url="ftp://ftp.redhat.com/pub/alphabits/">AlphaBits op
              Red Hat</ulink> of de mirror site op <ulink
              url="ftp://tsx-11.mit.edu/pub/linux/packages/alphabits/">TSX-11</ulink></para></listitem>
            </itemizedlist>

            <para>Ik raad op z'n minst het gebruik van kernel 2.1.29 aan,
	    als je modules wilt gebruiken met een 2.1. kernel.</para>
          </answer>
        </qandaentry>
        <qandaentry>
          <question>
            <para>Hoe zit het met dial-on-demand netwerkverbinding?</para>
          </question>
          <answer>
            <para>kerneld bood oorspronkelijk enige ondersteuning voor
	    het tot stand brengen van dialup netwerkverbindingen op
	    verzoek; pakketjes naar een netwerk proberen te versturen
	    zonder dat er een verbinding was zorgde ervoor dat
	    kerneld het <filename>/sbin/request_route</filename> script 
	    opstartte om een PPP of SLIP-verbinding op te zetten.</para>

            <para>Achteraf leek dit niet zo'n goed idee. Alan Cox
	    van Linux networking fame schreef naar de linux-kernel
	    mailinglist</para>

            <blockquote>
              <para>De request-route materie is verouderd, gebrekkig en
              onnodig [...]  Het is bovendien verwijderd uit
	      de 2.1.x structuren.
              </para></blockquote>

            <para>In plaats van het gebruik van het request-route script
	    in combinatie met kerneld, kan ik je van harte het <ulink
            url="http://www.dna.lth.se/~erics/diald.html">diald
            package</ulink> van Eric Schenk aanbevelen om je demand dialing
	    beheren.</para >
          </answer>
        </qandaentry>
      </qandaset>
    </sect1>

</article>
<!-- 
Local Variables:
mode:sgml
mode:auto-fill
sgml-doctype:("kerneld.sgml" "article" "chapter")
sgml-insert-missing-element-comment: nil
sgml-indent-step: 2
sgml-default-dtd-file:"kerneld.ced"
End:
-->
