
                              Kerneld mini-HOWTO

par Henrik Storner storner@osiris.ping.dk

   Version 1.7 19 juillet 1997
     _________________________________________________________________

   _(Adaptation franaise par Alexandre Devaure adevaure@mail.dotcom.fr,
   14 janvier 1999). _
     _________________________________________________________________

1. Introduction

   Ce document explique comment utiliser la fonction kerneld avec les
   noyaux Linux. Il dcrit :
     * ce qu'est kerneld ;
     * pourquoi l'utiliser ;
     * comment avoir les outils ncessaires ;
     * comment les configurer ;
     * comment faire fonctionner kerneld avec des modules qu'il ne
       connat pas ;
     * comment espionner kerneld (peut s'avrer trs utile lors de la
       mise au point) ;
     * les utilisations spciales de kerneld ;
     * les problmes courants et les dysfonctionnements.

   La dernire version de ce document peut tre trouve  l'adresse
   http://eolicom.olicom.dk/~storner/kerneld-mini-HOWTO.html. Entre les
   versions du mini-HOWTO, vous pouvez trouver des mises  jour sur ma
   liste non trie des modifications 
   http://eolicom.olicom.dk/~storner/kern.html

   La dernire version franaise se trouve  l'adresse
   http://www.freenix.fr/linux/HOWTO/mini/.

2. Contributeurs

   Si vous dcouvrez dans ce document des choses fausses, envoyez-moi un
   mot  ce sujet. Les personnes suivantes ont contribu  ce mini-HOWTO
   sur certains points :

     * Bjorn Ekwall bjorn@blox.se
     * Ben Gaillart bgalliac@luc.edu
     * Cedric Tefft cedric@earthling.net
     * Brian Miller bmiller@netspace.net.au
     * James C. Tsiao jtsiao@madoka.jpl.nasa.gov

   J'apprcierai les encouragements et les suggestions des lecteurs de ce
   mini-HOWTO.

3. Qu'est-ce que kerneld ?

   kerneld est li  une fonctionnalit introduite lors du dveloppement
   des noyaux de la srie 1.3 par Bjorn Ekwall. Il perdure avec les
   noyaux 2.0 et 2.1. Il permet aux modules du noyau (c'est--dire les
   pilotes de priphriques, de rseaux, les systmes de fichiers...)
   d'tre chargs automatiquement en fonction des besoins, sans
   utilisation manuelle des commandes modprobe ou insmod.

   Des aspects plus amusants, bien que ceux-ci ne soient pas (encore ?)
   intgrs dans le noyau standard :
     * on peut configurer kerneld pour qu'il excute un programme
       utilisateur  la place de l'conomiseur d'cran, ce qui vous
       permet d'utiliser n'importe quel programme.
     * dans le mme genre que l'conomiseur d'cran, vous pouvez aussi
       changer le traditionel ``beep'' en quelque chose de compltement
       diffrent...

   kerneld est compos de deux entits spares :
     * gestion dans le noyau de Linux afin d'envoyer des requtes au
       dmon afin de savoir si un module doit tre utilis pour certaines
       tches ;
     * un dmon au niveau utilisateur qui peut montrer quels modules
       doivent tre chargs pour accomplir la requte du noyau.

   Ces deux parties doivent fonctionner pour que kerneld soit
   oprationnel. Le fait qu'une des deux soit initialise ne suffit pas.

4. Pourquoi est-ce que je veux l'utiliser ?

   Il y a de bonnes raisons pour utiliser kerneld. Voici les miennes.
   D'autres peuvent l'utiliser pour d'autres raisons.
     * Si vous devez construire des noyaux pour de nombreux systmes qui
       diffrent peu (par exemple, une marque diffrente de carte
       rseau), alors vous pouvez construire un seul noyau et des
       modules,  la place d'avoir  construire un noyau par systme.
     * Les modules sont plus faciles  tester pour les dveloppeurs : il
       ne faut pas relancer le systme pour charger et enlever le pilote.
       Ceci s'applique pour tous les modules et non juste pour ceux qui
       sont monts par kerneld.
     * Il rduit l'usage de la mmoire du noyau, ce qui donne plus de
       mmoire pour les applications. La mmoire utilise par le noyau
       n'est jamais ``swappe'' sur disque, donc si vous avez 100Ko de
       pilotes non utiliss compils dans le noyau, ils occasionnent
       simplement une perte de RAM.
     * Certaines choses que j'utilise, le pilote ftape, par exemple ou
       iBCS, ne sont valables que sous forme de modules. Mais je ne veux
       pas m'embter avec leur chargement et leur dchargement  chaque
       fois que j'en ai besoin.
     * Les personnes qui font des distributions Linux ne veulent pas
       construire 284 images de boot diffrentes, chaque utilisateur
       charge les pilotes dont il a besoin pour sa configuration. C'est
       la mthode retenue par la RedHat 4.0 dans son installation.

   Bien sr, il y a aussi des raisons pour que vous ne vouliez pas
   l'utiliser : vous prfreriez avoir juste un fichier image de votre
   noyau avec tous vos pilotes  l'intrieur. Dans ce cas, vous lisez le
   mauvais document.

5. O puis-je trouver les outils ncessaires ?

   Le support dans le noyau de Linux a t introduit avec Linux 1.3.57.
   Si vous avez une version plus ancienne, vous devrez la mettre  jour
   si vous voulez qu'il supporte kerneld. Tous les sites ftp majeurs de
   Linux offrent les sources du noyau. Je recommande que vous le mettiez
    jour avec la dernire version 2.0 (actuellement la 2.0.36) :
     * ftp://sunsite.unc.edu/pub/Linux/kernel/v2.0/linux-2.0.36.tar.gz
     * ftp://tsx-11.mit.edu/pub/linux/sources/system/v2.0/linux-2.0.36.ta
       r.gz
     * ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/v2.0/linux-2.0.36.tar.gz

   Pour les utilisateurs franais, il vaut mieux utiliser le miroir
   francais
   ftp://ftp.lip6.fr/pub2/linux/kernel/sources/v2.0/linux-2.0.36.tar.gz

   Le dmon en mode utilisateur a t introduit avec le paquetage
   modules-1.2.8 et avec le nouveau paquetage modules-2.0. Ils sont
   normalement trouvables  la mme place que les sources des noyaux mais
   les sites officiels sont :
     * ftp://sunsite.unc.edu/pub/Linux/kernel/v2.0/modules-2.0.0.tar.gz
     * ftp://tsx-11.mit.edu/pub/linux/sources/sbin/modules-2.0.0.tar.gz
     * ftp://ftp.funet.fi/pub/Linux/tools/modules-2.0.0.tar.gz

   Pour les utilisateurs franais :
   ftp://ftp.lip6.fr/pub2/linux/kernel/sources/v2.0/modules-2.0.0.tar.gz

   AVERTISSEMENT : si vous voulez essayer de charger des modules avec les
   derniers noyaux 2.1 (dveloppement), vous devrez utiliser le dernier
   paquetage modutils- (PAS modules-). Mais regardez plus bas au sujet
   des problmes avec les modules et les noyaux 2.1.

6. Comment le configure-t-on ?

   D'abord, ayez les parties ncessaires : un noyau et les derniers
   modules-utilities. Ensuite, vous devez installer les
   modules-utilities. C'est trs simple : il faut juste dsempaqueter les
   sources et lancer make install. Ceci compile et installe les
   programmes suivants dans /sbin : genkym, insmod, lsmod, modprobe,
   depmod, kerneld. Je recommande que vous ajoutiez quelques lignes dans
   les scripts de dmarrage pour faire les initialisations ncessaires
   lors du dmarrage de Linux. Ajoutez les lignes suivantes  votre
   fichier /etc/rc/rc.d/rc.sysinit (si vous utilisez la Slackware) ou 
   /etc/rc.d/rc.sysinit (si vous utilisez SysVinit, c'est--dire les
   distributions Debian, RedHat, Caldera) :
      # Demarrer kerneld - ceci doit arriver tres tot dans le
      # processus de demarrage, certainement AVANT que vous lanciez
      # fsck sur les systmes de fichiers qui ont besoins que les
      # pilotes de disque soient chargs automatiquement
      if [ -x /sbin/kerneld ]
      then
          /sbin/kerneld
      fi

      # Vos commandes fsck fonctionnent ici
      # et votre command mount monte le systme de fichiers racine
      # en lecture seule.

      # Mettez  jour le fichier de dpendance des modules du noyau
      # Votre systme de fichier racine doit tre mont en
      # lecture-criture  partir de maintenant
      if [ -x /sbin/depmod ]
      then
          /sbin/depmod -a
      fi

   La premire partie lance kerneld lui-mme.

   La second appelle depmod -a au dmarrage. Le programme depmod
   construit une liste de tous les modules disponibles et analyse leurs
   inter dpendances. Donc il sait si un module a besoin qu'un autre soit
   charg avant lui.

   NOTE : Les versions rcentes de kerneld ont une option pour utiliser
   la librairie GNU dbm : libgdbm. Si vous l'activez quand vous
   construisez les modules-utilities, kerneld ne se lancera pas si
   lidgdbm n'est pas disponible, ce qui pourrait tre le cas si vous avez
   /usr sur une partition spare et que vous lanciez kerneldavant que
   /usr ne soit monte. La solution recommande est de dplacer libgdm de
   /usr/lib vers /lib ou de faire un lien statique de kerneld.

   Ensuite, dfates les sources du noyau, configurez et construisez un
   noyau  votre convenance. Si vous ne l'avez jamais fait avant, vous
   devriez lire le fichire README  la racine des sources du noyau. Quand
   vous lancez make config pour configurer le noyau, vous devrez faire
   attention  des questions qui apparaissent au dbut :
      Enable loadable module support (CONFIG_MODULES) [Y/n/?] Y

   Vous devez slectioner la gestion des modules chargeables, sinon, il
   n'y aura pas de modules  charger pour kerneld. Rpondez seulement oui
   (Y).
      Kernel daemon support (CONFIG_KERNELD) [Y/n/?] Y

   Ceci est aussi ncessaire. Ensuite, de nombreuses choses peuvent tre
   mises sous forme de modules. Vous verrez des questions du genre :
      Normal floppy disk support (CONFIG_BLK_DEV_FD) [M/n/y/?]

   o vous pouvez rpondre M pour Module. Gnralement, seuls les pilotes
   ncessaires lors du dmarrage de votre systme (le pilote du disque
   dur, le pilote du systme de fichiers racine) doivent tre mis dans le
   noyau ; le reste pouvant tre construit sous forme de modules.

   Quand vous avez fini avec make config, lancez make dep, make clean,
   make zImage ou make modules, make modules et make modules_install.

   Ouf !

   La commande make zImage cre la nouvelle image du noyau dans le
   fichier arch/i386/boot/zImage. Vous devrez le copier o vous mettez
   votre image de boot. N'oubliez pas de relancer LILO.

   Pour plus d'informations sur la configuration, la construction et
   l'installation de votre propre noyau, regardez le Kerneld-HOWTO post
   rgulirement au comp.os.linux.answers et disponible sur le site
   sunsite.unc.edu  /pub/Linux/docs/HOWTO. La version franaise est
   disponible  www.freenix.fr/linux

7. Tester kerneld

   Maintenant, relancez le systme avec le nouveau noyau. Quand le
   systme est prt, vous pouvez excuter un ps ax et vous devriez voir
   une ligne pour kerneld :
      PID TTY STAT  TIME COMMAND
      59  ?  S     0:01 /sbin/kerneld

   Une des choses intressantes de kerneld est qu'une fois le noyau et le
   dmon installs, seule une trs petite initialisation est ncessaire.
   Pour commencer, essayez d'utiliser un des pilotes que vous avez
   construit comme module. J'ai construit le pilote de disquette comme
   module, donc je peux mettre une disquette DOS dans le lecteur et :
      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

   le pilote de disquette fonctionne : il a t charg automatiquement
   par kerneld quand j'ai voulu utiliser la disquette.

   Pour voir que le module floppy est en effet charg, vous pouvez lancer
   /sbin/lsmod qui listera tous les modules chargs  l'instant :
      osiris:~ $ /sbin/lsmod
      Module:        #pages:  Used by:
      floppy            11    0 (autoclean)

   Le mot ``autoclean'' signifie que le module sera automatiquement
   enlev par kerneld quand il n'aura pas t utilis pendant plus d'une
   minute. Les 11 pages de mmoire (soit 44ko, une page faisant 4ko)
   seront donc seulement utilises quand j'accderai au lecteur de
   disquette ; si je n'utilise pas la disquette pendant plus d'une
   minute, elles seront libres. Trs intressant si vous tes  court
   de mmoire pour vos applications !

8. Comment kerneld sait-il quel module charger ?

   Bien que kerneld connaisse dj les types les plus communs de modules,
   il y a des situations dans lesquelles kerneld ne sera pas comment
   satisfaire une requte venant du noyau. C'est le cas avec les pilotes
   de CD-ROM ou de cartes rseau, o il existe plus d'un module possible
   susceptible d'tre charg.

   Les requtes que le dmon de kerneld reoit du noyau viennent d'un des
   lments suivants :
     * un pilote de priphrique bloc ;
     * un pilote de priphrique caractre ;
     * un format binaire ;
     * une discipline de ligne tty ;
     * un systme de fichier ;
     * un priphrique rseau ;
     * un service rseau (par exemple rarp) ;
     * un protocole rseau (par exemple IPX).

   kerneld dtermine quel module doit tre charg regardant le fichier de
   configuration /etc/conf.modules. Il y a deux types d'entre dans ce
   fichier : les chemins (o les fichiers des modules sont stocks) et
   les alias (quel module doit tre charg). Si vous n'avez pas dj ce
   fichier, vous devrez le crer en lanant /sbin/modprobe -c | grep -v
   '^path' > /etc/conf.modules

   Si vous voulez ajouter encore une autre directive ``path'' aux chemins
   par dfaut, vous devez inclure aussi tous les chemins par dfaut tant
   donn qu'une directive path dans /etc/conf.modules remplacera toutes
   celles que modprobe connat par dfaut.

   Normalement, vous ne voudrez pas ajouter de path par vous-mme tant
   donn que l'ensemble des chemins par dfaut prend en compte toutes les
   configurations normales, je vous le promets !

   D'un autre ct, si vous voulez juste ajouter un alias ou une
   directive d'option, vos nouvelles entres dans /etc/conf.modules
   seront ajoutes  celles que modprobe connat dj. Si vous deviez
   redfinir un alias ou une option, vos nouvelles entres dans
   /etc/conf.modules remplaceront celles dj prsentes.

8.1 Les priphriques bloc

   Si vous lancez /sbin/modprobe -c, vous aurez la liste des modules
   connus par kerneld et  quelles requtes ils correspondent. Par
   exemple, la requte qui termine le chargement du gestionnaire de
   disquettes correspond au priphrique bloc dont le numro majeur est 2
   :
      osiris:~ $ /sbin/modprobe -c | grep floppy
      alias block-major-2 floppy

   Pourquoi block-major-2 ? Parce que les lecteurs de disquettes /dev/fd*
   utilisent un numro majeur gal  2 et sont de type bloc :
      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

8.2 Les priphriques caractres

   Les priphriques de type caractre sont utiliss de la mme manire.
   Par exemple, le lecteur de bande correspond au numro majeur 27 :
      osiris:~ $ ls -lL /dev/ftape
      crw-rw----   1 root     disk      27,   0 Jul 18  1994 /dev/ftape

   Toutefois, kerneld ne le connat pas par dfaut : il n'est pas list
   dans le rsultat de /sbin/modprobe -c.

   Donc, pour configurer kerneld de manire  charger le gestionnaire
   ftape, je dois ajouter une ligne au fichier de configuration
   /etc/conf.modules :
      alias char-major-27 ftape

8.3 Les priphriques rseau

   Vous pouvez aussi utiliser le nom du priphrique  la place de
   char-major-xxx ou block-major-yyy. Ceci est particulirement utilis
   pour les gestionnaires rseaux. Par exemple, un pilote pour une carte
   rseau ne2000 utilise comme eth0 pourrait tre charg avec :
      alias eth0 ne

   Si vous devez passer des options au gestionnaire (comme de dire au
   module quelle IRQ la carte rseau utilise), vous ajoutez une ligne
   options :
      options ne irq=5

   Ainsi kerneld lancera le gestionnaire NE2000 avec la commande :
      /sbin/modprobe ne irq=5

   Bien sr, les options disponibles sont spcifiques aux modules que
   vous chargez.

8.4 Les formats binaires

   Les formats binaires sont grs de la mme faon. A chaque fois que
   vous essayez de lancer un programme que le noyau ne sait pas comment
   excuter, kerneld lance une requte pour binfmt-xxx, ou xxx est le
   nombre dtermin  partir des tous premiers octets de l'excutable.
   Donc la configuration de kerneld pour la gestion du chargement du
   module binfmt_aout pour les excutable ZMAGIC (a.out) est :
      alias binfmt-267 binfmt_aout

   vu que le nombre magique pour les fichiers ZMAGIC est 267 (voir
   /etc/magic). Si vous regardez /etc/magic, vous verrez le nombre 0413,
   ceci parce que ce fichier utilise des nombres octaux alors que kerneld
   utilise des dcimaux ( 413 en octal correspond  267 en dcimal ). Il
   y a en ralit trois variantes des excutables a.out peu diffrentes
   (NMAGIC, QMAGIC et ZMAGIC). Pour un support total du format a.out,
   vous devez avoir :
      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)

   Les formats binaires a.out, Jave et iBCS sont reconnus automatiquement
   par kerneld sans la moindre configuration.

8.5 Les disciplines de ligne (slip, cslip et ppp)

   Les disciplines de lignes sont demandes avec _tyy-ldisc-x_ o _x_ est
   gnralement 1 (pour SLIP) ou 3 (pour PPP). Ces deux sont reconnus
   automatiquement par kerneld.

   Concernant PPP, si vous voulez que kerneld charge le module de
   compression de donnes pour PPP bsd_comp, vous devez ajouter les deux
   lignes suivantes au fichier /etc/conf.modules :
      alias tty-ldisc-3 bsd_comp
      alias ppp0 bsd_comp

8.6 Les familles de protocoles rseau (IPX, AppleTalk, AX.25)

   Certains protocoles rseau peuvent tre aussi chargs sous la forme de
   modules. Le noyau demande  kerneld une famille de protocole (par
   exemple IPX) avec une requte pour _net-pf-X_ o _X_ est un nombre
   indiquant la famille voulue. Par exemple, _netpf-3_ correspond 
   AX.25, _net-pf-4_  IPX et _net-pf-5_  AppleTalk. (Ces nombres sont
   dtermins par les macros AF_AX25, AF_IPX etc., que l'on trouve dans
   le fichier source include/linux/socket.h. Donc, pour charger
   automatiquement le module IPX, vous devrez ajouter une entre dans
   /etc/conf.modules :
      alias net-pf-4 ipx

   Consultez galement la section traitant des problmes courants pour
   viter des messages d'avertissment lors de l'amorage relatifs  des
   familles de protocoles indfinies.

8.7 Les systmes de fichiers

   Les requtes soumises  kerneld pour les systmes de fichiers sont
   simplement constitues par le type du systme de fichiers. Un usage
   courant est de charger le module _isofs_ pour les systmes de fichiers
   des CD-ROM, c'est--dire les systmes de fichiers de type _iso9660_ :
      alias iso9660 isofs

9. Priphriques demandant une configuration spciale

   Certains priphriques demandent un peu plus de configuration que le
   simple alias d'un priphrique et d'un module.
     * les priphriques de type caractre de numro majeur 10 : divers
       priphriques ;
     * les priphriques SCSI :
     * les priphriques qui demandent une initialisation spciale.

9.1 char-major-10 : souris, watchdogs, et random

   Les priphriques sont habituellement identifis par leur nombre
   majeur, par exemple 27 pour ftape. Toutefois, si vous regardez les
   entres de /dev pour le nombre majeur 10, vous verrez un certain
   nombre de priphriques trs diffrents. Parmi ceux-ci :
     * des souris de toutes sortes (souris bus, PS/2,...) ;
     * les chiens de garde (watchdog) ;
     * le priphrique noyau _random_ ;
     * l'interface APM (Advanced Power Management).

   De faon vidente, ces priphriques sont contrls par diffrents
   modules et non un seul. Pour cela, kerneld utilise le nombre majeur et
   le nombre mineur :
      alias char-major-10-1 psaux     # For PS/2 mouse
      alias char-major-10-130 wdt     # For WDT watchdog

   Vous avez besoin d'un version du noyau 1.3.82 ou suprieure pour
   l'utiliser. Les versions plus anciennes ne passaient pas le nombre
   mineur  kerneld, ce qui ne permettait pas  kerneld de savoir quel
   module il fallait charger.

9.2 Charger les gestionnaires SCSI : l'entre _scsi_hostadapter_

   Les gestionnaires de priphriques SCSI sont constitus d'un
   adaptateur pour la carte SCSI (par exemple pour une Adaptec 1542) et
   d'un gestionnaire pour le type de priphrique SCSI que vous utilisez,
   comme un disque dur, un lecteur de CD-ROM ou un lecteur de cartouche.
   Tous peuvent tre chargs sous forme de modules. Cependant, lorsque
   vous voulez accder  un lecteur de CD-ROM connect  une carte
   Adaptec, le noyau et kerneld savent seulement qu'il faut charger le
   module _sr_mod_ pour grer le CD-ROM SCSI, mais ils ignorent  quel
   contrleur SCSI il est connect, donc quel module charger pour grer
   le contrleur SCSI.

   Pour rsoudre cela, vous pouvez ajouter une entre pour le module du
   contrleur SCSI au fichier /etc/conf.modules qui indiquera  kerneld
   quel module charger parmi toutes les possibilits :
      alias scd0 sr_mod               # sr_mod pour SCSI CD-ROM's ...
      alias scsi_hostadapter aha1542  # ... doit utiliser le pilote
                                      # Adaptec 1542

   Cela ne fonctionne que pour un noyau de version 1.3.82 ou suprieure.

   Cela marche si vous n'avez qu'une carte SCSI, sinon, c'est un peu plus
   difficile. En gnral, vous ne pouvez pas avoir kerneld qui charge le
   pilote d'une carte SCSI si le gestionnaire d'un autre contrleur est
   dj install. Vous devez soit construire un noyau avec les deux
   gestionnaires (ils ne sont plus sous forme de modules) soit les
   charger manuellement.

   Il y a une possibilit pour que kerneldcharge plusieurs gestionnaires
   SCSI. James Tsiao a eu cette ide : vous pouvez avoir kerneld qui
   charge le second controleur SCSI en mettant la dpendance dans le
   fichier modules.dep  la main. Vous avez juste besoin d'une entre
   comme :
      /lib/modules/2.0.30/scsi/st.o: /lib/modules/2.0.30/scsi/aha1542.o

   Pour que kerneldcharge le module _aha1542.o_ avant qu'il charge
   _st.o_. Ma machine  la maison est configure exactement comme au-dessus
   et fonctionne trs bien pour tous les priphrique de mon second
   contrleur SCSI, incluant lecteurs de cartouche, CD-ROM et des
   priphriques SCSI gnriques. L'inconvniant est que depmod -a ne
   peut pas dtecter ces dpendances. Donc, l'utilisateur doit les
   ajouter  la main et ne pas lancer depmod -a au dmarrage. Une fois
   configur, kerneld chargera automatiquement _aha1542.o_ comme il faut.

   Vous devez tre conscient que cette technique ne marche que si vous
   avez diffrents types de priphriques sur deux contrleurs. Par
   exemple les disques durs sur un contrleur et les lecteurs de CD-ROM,
   de cartouches et les priphriques gnriques sur l'autres.

9.3 Quand charger un module n'est pas suffisant : l'entre post-install

   Parfois, charger un module n'est pas suffisant pour qu'il fonctionne
   correctement. Par exemple, si vous avez compil le pilote de votre
   carte son en tant que module, il est souvent pratique de le rgler
   pour un certain volume sonore. Le seul problme, c'est que cette
   initialisation disparat lors du chargement suivant du module. Voici
   un truc de Ben Galliart bgailla@luc.edu :

   Il faut installer le paquetage setmix-0.1 (
   ftp://sunsite.unc.edu/pub/Linux/apps/sound/mixers/setmix-0.1.tar.gz)

   et ensuite ajouter les lignes suivantes au fichier /etc/conf.modules :
      post-install sound /usr/local/bin/setmix -f /etc/volume.conf

   Ainsi kerneld excute la commande indique par l'entre post-install
   sound aprs que le module son ait t charg. Donc, le module son est
   configur par la commande /usr/local/bin/setmix -f /etc/volume.conf.

   Cela peut s'avrer trs utile pour d'autres modules, par exemple le
   module _lp_ peut tre configur par le programme tunelp en ajoutant :
      post-install lp tunelp <options>

   Pour que kerneldreconnaisse ces options, vous devez avoir une version
   1.3.69 de kerneld ou suprieure.

   Note : une version prcdente de ce mini-HOWTO mentionne une option
   pre-remove qui peut tre utilise pour exccuter une commande juste
   avant que kerneld ne dcharge un module. Toutefois, cela n'a jamais
   march et son utilisation est dconseille. Heureusement, cette
   options disparaitra dans une future version de kerneld. L'ensemble des
   oprations d'initialisation des modules est en cours de modification
   en ce moment, et peut diffrer sur votre systme au moment o vous
   lirez ceci.

10. Espionner kerneld

   Si vous avez tout essay et que vous ne comprenez pas ce que le noyau
   demande  kerneld, il y a une solution pour voir les requtes que
   reoit kerneld et par consquent comprendre ce qu'il faut mettre dans
   /etc/conf.modules. Pour cela, il faut utiliser l'utilitaire kdstat.

   Ce petit programme est livr avec le paquetage modules, mais il n'est
   ni compil, ni install par dfaut. Pour le compiler :
      cd /usr/src/modules-2.0.0/kerneld
      make kdstat

   Ensuite, pour que kerneld affiche les informations sur ce qu'il est en
   train de faire, il faut lancer :
      kdstat debug

   et kerneld commencera  envoyer des messages  la console sur son
   activit. Si vous essayez de lancer la commande que vous voulez
   utiliser, vous verrez les requtes adresses  kerneld. Elles peuvent
   tre copies dans le fichier /etc/conf.modules et mises en alias du
   module demand pour raliser la tche.

   Pour arrter le debuggage, lancez :
      /sbin/kdstat nodebug

11. Utilisations spciales de kerneld

   Je savais bien que vous me demanderiez comment configurer le module
   d'conomiseur d'cran...

   Le rpertoire kerneld/GOODIES dans le paquetage modules a un certain
   nombre de patches noyau pour la gestion de l'conomiseur d'cran ainsi
   que le beep de la console par kerneld. Ils ne font pas partie du noyau
   officiel. Vous devrez donc installer les patches noyau et le
   recompiler.

   Pour installer un patch, utilisez la commande ``patch'' :
      cd /usr/src/linux
      patch -s -p1 </usr/src/modules-2.0.0/kerneld/GOODIES/blanker_patch

   Ensuite recompilez et installez le nouveau noyau.

   Quand il sera temps de lancer l'conomiseur d'cran, kerneld excutera
   la commande /sbin/screenblanker (il peut s'agir d'un script shell qui
   lance votre conomiseur d'cran favorixt.

   Quand le noyau veut l'arrter, il envoie un signal SIGQUIT au
   processus excutant /sbin/screenblanker. Votre script shell ou
   conomiseur d'cran doit le capter et se terminer. Pensez  restaurer
   l'cran dans le mode texte initial !

12. Problmes courants

12.1 Pourquoi est-ce que j'ai des messages ``Cannot locate module for
net-pf-X'' quand j'exccute ifconfig ?

   Le code du noyau a t modifi pour permettre le chargement des
   familles de protocoles rseau (comme IPX, AX25 et AppelTalk) comme
   modules vers la version 1.3.80. Cela a eu pour effet d'ajouter une
   nouvelle requte pour kerneld, _net-pf-X_, o _X_ est un nombre
   identifiant le protocole (voir le fichier
   /usr/src/linux/include/linux/socket.h pour la signification de ces
   nombres).

   Malheureusement, ifconfig envoie ces messages, donc un bon nombre de
   personnes recoivent ces messages lors le systme se lance et qu'il
   excute ifconfig pour initialiser le priphrique loopback. Ces
   messages sont sans danger et vous pouvez les retirer en ajoutant les
   lignes suivantes :
      alias net-pf-3 off  # oubliez AX.25
      alias net-pf-4 off  # oubliez IPX
      aliad net-pf-5 off  # oubliez AppleTalk

   au fichier /etc/conf.modules. Biensr, si vous utilisez IPX comme
   module, n'ajoutez pas la ligne qui retire IPX.

12.2 Aprs voir lancer kerneld, mon systme ralentit quand j'active ma
connexion PPP

   Il y a bon nombre de messages  ce sujet. Il semble qu'il y ait une
   malheureuse interaction entre kerneld et le script tkPPP qui est
   utilis sur certains systmes pour configurer et surveiller la
   connexion PPP. Le script excute apparemment des boucles quand il
   lance ifconfig. Celui-ci dclenche kerneld pour rechercher les modules
   _net-pf-X_ (voir ci-dessous), ce qui provoque une surcharge du systme
   et l'envoi possible de messages ``Cannot locate module for net-pf-X''.
   Il n'y a pas d'autres solutions que de ne pas utiliser tkPPP ou de
   changer sa faon de surveiller la connexion.

12.3 kerneldne charge pas mon gestionnaire SCSI

   Ajoutez une entre pour la carte SCSI au fichier /etc/conf.modules.
   Regardez la description de l'entre scsi_hostadapter plus haut.

12.4 modprobe se plaint que gcc2_compiled n'est pas dfini

   Ceci est une erreur dans module-utilities qui ne se voit qu'avec
   binutils 2.6.0.9 ou suprieur et elle est aussi documente dans les
   notes de mises  jour du paquetage binutils. Lisez-le donc ou mettez 
   jour le paquetage des modules par un qui corrige ce problme, par
   exemple le modules-2.0.0.

12.5 Le volume de ma carte son n'est pas initialis etc.

   Les options de configuration d'un modules sont stockes dans le module
   lui-mme quand il est charg. Donc, quand kerneld dcharge un module,
   la configuration que vous aviez faite est perdue et la prochaine fois
   que le module sera charg, il hritera de la configuration par dfaut.

   Vous pouvez indiquer  kerneld de configurer un module en excutant un
   programme aprs son chargement automatique. Voir la section sur
   l'entre post-install.

12.6 DOSEMU a besoin de modules, comment kerneld peut-il les charger ?

   Vous ne pouvez pas. Aucune des versions de dosemu (officielles ou de
   dveloppement) ne grent le chargement des modules  travers kerneld.
   Cependant, if vous avez un noyau 2.0.26 ou suprieur, vous n'avez pas
   besoin de modules dosemu particuliers. Installez juste dosemu 0.66.1.

12.7 Pourquoi ai-je des messages ``Ouch, kerneld time out, message failed'' ?

   Quand le noyau envoit une requte  kerneld, il s'attend  recevoir un
   acquittement dans un dlai d'une seconde. Si kerneld n'envoie pas cet
   acquittement, ce message est diffus. La requte est retransmise et
   peut ventuellement russir

   Cela arrive couramment sur des systmes lourdement chargs. kerneld
   tant un processus en mode utilisateur, il est ordonnanc comme tout
   processus du systme. Sous de fortes charges, il peut ne pas
   s'excuter pour envoyer l'acquittement avant l'expiration du dlai.

   Si cela se produit quand la charge est faible, essayez de redmarrer
   kerneld. Tuez le processus kerneld et redmarrez-le avec la commande
   /usr/sbin/kerneld. Si le problme persiste, vous devrez envoyer un
   message d'erreur  linux-kernel@vger.rutgers.edu mais, _s'il vous
   plat_ soyez sr que votre version du noyau et de kerneld soient 
   jour avant d'envoyer un message sur ce problme.

12.8 mount n'attend pas que kerneld charge le module du systme de fichier

   Il existe un certain nombre de messages sur le fait que la commande
   mount(8) n'attende pas que kerneld ait charg le module du systme de
   fichiers. lsmod montre que kerneld a charg le module et si vous
   rptez la commande mount immdiatement, le montage sera russi. Cela
   semble tre une erreur dans le paquetage modules version 1.3.69f qui
   affecte des utilisateurs de Debian (elle peut tre corrige en
   installant la dernire version de ce paquetage).

12.9 kerneld n'arrive pas  charger le module _ncpfs_

   Vous devez compiler les utilitaires ncpfs avec l'option
   -DHAVE_KERNELD. Voir le fichier Makefile de ncpfs.

12.10 kerneld n'arrive pas  charger le module _smbfs_

   Vous utilisez une vieille version des utilitaires smbmount. Prenez la
   dernire version (0.10 ou suprieure) 
   ftp://tsx-11.mit.edu/pub/linux/filesystems/smbfs/.

12.11 J'ai tout recompil sous forme de modules et maintenant, mon systme ne
peut plus dmarrer : kerneld n'arrive pas  charger le module du systme de
fichier racine.

   Vous ne pouvez pas _tout_ mettre sous forme de modules : le noyau doit
   avoir assez de gestionnaires pour monter votre systme de fichiers
   racine et excuter les programmes ncessaires au dmarrage de kerneld.
   Donc vous ne pouvez pas mettre sous forme de modules :
     * le gestionnaire de votre disque dur o rside votre systme de
       fichiers racine ;
     * le gestionnaire du systme de fichiers racine ;
     * le chargeur du format de binaire pour init, kerneld et d'autres
       prgrammes.

   En fait ce n'est pas vrai. Les dernires version 1.3.x et toutes les
   2.x du noyau, supportent l'utilisation d'un disque ram qui est charg
   par lilo ou loadlin et il est possible de charger des modules de ce
   ``disque'' trs tt dans le processus de dmarrage. La marche  suivre
   est dcrite dans le fichier Documentation/initrd.txt dans
   l'arborescence des sources du noyau.

12.12 kerneldne se lance pas lors de l'amorage de la machine : il veut
_libgdbm_

   Les nouvelles versions de kerneld ont besoin de la librairie GNU dbm,
   _libgdbm.so_ pour fonctionner. La plupart des installations ont ce
   fichier dans /usr/lib mais vous avez probablement lanc kerneld avant
   que le systme de fichiers de /usr ne soit mont. Un des symptomes de
   ceci est que kerneld ne marche pas lors du dmarrage du systme et de
   l'excution des script rc, mais fonctionne parfaitement si vous le
   lancez  la main aprs. La solution est soit de dplacer le lancement
   de kerneld aprs que /usr ne soit mont, soit de mettre la librairie
   _gdbm_ dans le systme de fichiers racine (par exemple dans /lib).

12.13 J'ai ``Cannot load module xxx'' mais j'ai reconfigur mon noyau sans la
gestion de xxx !

   L'installation de la Slackware (et peut-tre d'autres) cre un fichier
   /etc/rc.d/rc.modules par dfaut qui fait un modprobe explicite sur une
   grande varit de modules. Quels modules exactement sont ``modprobs''
   ?, cela dpend de la configuration initiale du noyau. Vous avez
   probablement reconfigur votre noyau pour enlever un ou plusieurs
   modules qui est modprob dans rc.modules, d'o les messages d'erreur.
   Mettez  jour votre fichier rc.modules en commentant tout module que
   vous n'utilisez plus, ou enlevez entirement ce fichier et laissez
   kerneld charger les modules quand on en a besoin.

12.14 J'ai recompil mon noyau et les modules et j'ai toujours des messages sur
des symboles non rsolus au dmarrage

   Vous avez probablement reconfigur et recompil votre noyau et exclu
   des modules. Vous avez d'anciens modules que vous n'utilisez pas dans
   le rpertoire /lib/modules. La solution la plus simple est d'effacer
   le rpertoire /lib/modules/x.y.z et de retaper make modules_install
   depuis le rpertoire des sources du noyau. Notez que ce problme
   arrive seulement quand vous reconfigurez le noyau sans changer de
   version. Si vous voyez cette erreur quand vous passer  une nouvelle
   version du noyau, vous avez un autre problme.

12.15 J'ai install Linux 2.1 et aucun module ne se charge

   Linux 2.1 est un noyau de dveloppement. Pour cette raison, il se peut
   que certaines choses ne fonctionnent pas de temps en temps. La faon
   dont les modules sont manipuls a chang de faon significative.
   Richard Henderson a la charge du dveloppement du noyau des modules.

   En bref, si vous voulez utiliser les modules avec un noyau 2.1, vous
   devez :
     * lire le fichier Documentation/Changes et voir quels paquetages
       doivent tre mis  jour sur votre systme ;
     * utiliser le dernier paquetage modutils, disponible sur
       ftp://ftp.redhat.com/pub/alphabits/ ou sur le site mirroir
       ftp://tsx-11.mit.edu/pub/linux/packages/alphabits/

   Je recommande le noyau 2.1.29, si vous voulez utiliser les modules
   avec un noyau 2.1.

12.16 Que dire d'un rseau utilisant la ligne tlphonique ?

   kerneld peut  l'origine grer l'tablissement de connexions rseau 
   travers le rseau tlphonique  la demande : essayer d'envoyer des
   paquets  un rseau sans tre connect, peut entraner kerneld 
   lancer le script /sbin/request_route pour initialiser une connexion
   PPP ou SLIP.

   Il s'est avr que c'tait une mauvaise ide. Alan Cox, bien connu
   pour ses travaux sur le rseau dans Linux a crit sur la liste de
   diffusion linux-kernel que :

   ``Le truc request-route est obsolte, cass et non requis... Il est
   aussi enlev des versions 2.1.x.''

   A la place d'utiliser le script request-route et kerneld, je vous
   encourage vivement  installer le paquetage diald d'Eric Schenk,
   disponible  l'url http://www.dna.lth.se/~erics/diald.html

13. Copyright

   Ce document est copyright (c) Henrik Storner, 1996, 1997.

   Sauf contre-ordre, les documents HowTo pour Linux sont copyrights pas
   leurs auteurs respectifs. Ces documents peuvent tre reprodruits et
   distribus dans leur ensemble ou en partie, sur n'importe quel type de
   support physique ou lectronique, du moment que cette notice lgale se
   trouve sur toutes les copies. Les redistributions commerciales sont
   autorises et encourages. Toutefois, l'auteur aimerait bien tre
   avis de toute distribution de ce genre.

   Toute traduction, travail driv ou complmentaire incluant tout ou
   partie de document HowTo Linux doit tre couvert par ce copyriht. De
   cette manire, vous ne pouvez crer un document qui s'inspire de ce
   document et imposer des restrictions supplmentaires  sa diffusion.
   Des exceptions  ces conditions peuvent tre donnes sous certaines
   conditions. Contactez le coordonnateur des HowTo Linux  l'adresse
   donne un peu plus bas.

   En rsum, nous souhaitons promouvoir la diffusion de ces informations
    travers un maximum de moyens de communication. Toutefois, nous
   souhaitions conserver un copyright sur les documents HowTo et nous
   souhaitons tre avertis de leur redistribution.

   Si vous avez des questions, vous pouvez contacter Greg Hankins, le
   coordonnateur des HowTo Linux par courrier lectronique 
   gregh@sunsite.unc.edu
