Démon BSD

Documentation NetBSD :

Le noyau

Foire Aux Questions sur le noyau

Foire Aux Questions sur le matériel

Documentation spécifique à NetBSD

Autre documentation en ligne


Foire Aux Questions sur le noyau


Où télécharger les sources du noyau ? (haut)

Source de la version officielle

Pour compiler un noyau pour la même version que celle que vous avez installée, vous n'avez besoin que du fichier syssrc.tgz. Pour une version donnée, vous trouverez le fichier «source/sets/syssrc.tgz» à partir du répertoire principal de NetBSD, dans le dossier de la version voulue. Par exemple, pour NetBSD 1.5.2 les sources sont dans le fichier :
   /pub/NetBSD/NetBSD-1.5.2/source/sets/syssrc.tgz
Si vous avez un cédérom NetBSD, ce fichier se trouve dedans. Vous pouvez extraire les sources où vous voulez mais elles se placent traditionnellement dans /usr/src. Tapez : «cd / ; tar xvzpf <FICHIER>».

Sources -current «A la Pointe», uniquement pour les aventuriers !

Les toutes dernières sources se trouvent sur ftp.NetBSD.org et ses miroirs dans /pub/NetBSD/NetBSD-current/src/sys/.
Pour compiler un noyau, à partir de /pub/NetBSD/NetBSD-current/tar_files/src, téléchargez : Commencez par compiler et installer le programme «config», au cas où il ait changé depuis la version que vous utilisez. Comme -current est en développement constant, vous pouvez rencontrer des problèmes de compilation de noyau -current. Nous vous recommandons d'utiliser les sources issues d'une Version Officielle tant que vous ne serez pas familiarisé avec le processus de configuration.

Télécharger les sources noyau d'une certaine date

Cela peut arriver si vous avez installé un instantané et que vous voulez recompiler votre noyau (et que -current est trop récent). Suivez les directives pour savoir comment Traquer NetBSD-current avec anoncvs.

Compiler votre propre noyau (haut)

  1. Vérifiez que vous possédez les compilateurs (comp.tgz) sur votre système.

  2. Téléchargez et extrayez les sources du noyau (voir Où télécharger les sources du noyau ?).

  3. Si vous suivez la -current, vous devrez éventuellement compiler une nouvelle version de config. Considérons que vous en avez les sources -current complètes :
    «cd /usr/src/usr.sbin/config ; make && make install»

  4. «cd /sys/arch/<ARCH>/conf»
    où <ARCH> est l'architecture de votre machine, par exemple «i386», «sparc», «mac68k».

  5. "cp GENERIC <MON_NOYAU>"
    où <MON_NOYAU> est le nom de cette configuration. Cantonnez-vous aux lettres, chiffres et caractère _.

  6. Éditez <MON_NOYAU>
    La première fois, vous pouvez sauter cette étape. Vous pouvez ici enlever les pilotes des processeurs, du matériel et des périphériques que vous n'avez pas ou que vous n'utilisez pas. Vous pouvez aussi activer des options, comme sur i386, en décommentant la ligne «pc0» et activant «vt0» pour accéder aux consoles virtuelles. Pour déterminer les pilotes dont vous avez absolument besoin, utilisez la commande «dmesg» ou «dmesg | grep ' at '». Pour toutes les lignes contenant «<XXX> at <YYY>» vous devrez conserver les entrées à la fois de <XXX> et de <YYY>. Lisez aussi la page de manuel «options(4)» pour connaître les différentes options de configuration du noyau.

  7. «config <MON_NOYAU>»
    Permet de générer un répertoire de compilation pour <MON_NOYAU>.

  8. «cd ../compile/<MON_NOYAU>»
    Pour aller dans le répertoire de compilation du noyau.

  9. "make depend»
    Pour générer un fichier «.depend» permettant au programme make de savoir ce qu'il y a à recompiler (pour nous, ce sera le tout !).

  10. «make»
    Pour compiler le noyau. Si tout se passe bien, vous obtiendrez un noyau «netbsd». Cette opération peut prendre énormément de temps si vous êtes sur VAX, très peu de temps sur Alpha et entre les deux pour la plupart d'entre nous.

  11. «mv /netbsd /netbsd.old ; mv netbsd /»
    Pour sauvegarder le noyau actuel (_très_ important) et placer le nouveau au bon endroit.

  12. «reboot»
    Pour redémarrer avec le nouveau noyau. Dans les messages de démarrage, vous devrez trouver une ligne de la forme : «NetBSD <VERSION> (<MON_NOYAU>) #0: <DATE_COMPILE>»

  13. En cas de problème :
    Redémarrez sur votre noyau «netbsd.old» en mode mono-utilisateur. La procédure diffère d'un portage à l'autre suivant la façon de démarrer. Sur i386, il s'agit de :
    1. Appuyez sur ESPACE au premier message de NetBSD
    2. "boot netbsd.old -s"

    Replacez votre ancien noyau :

    1. "fsck /"
    2. "mount /"
    3. "mv netbsd.old netbsd"
    4. "exit"

Qu'est-ce qu'un noyau GENERIC ? (haut)

Le terme GENERIC fait référence à un noyau configuré pour tourner sur toutes les machines de l'architecture. Autrefois, ce terme était employé dans le fichier de configuration pour indiquer que le périphérique racine était «générique» de même qu'une option de configuration. Cette option et cette forme de ligne ne sont plus utilisées mais gageons que le nom restera encore longtemps.

Comme ces noyaux gèrent comprennent tous les pilotes de tous les périphériques gérés et que vous ne les utilisez certainement pas tous, nous vous encourageons à compiler votre propre noyau.

Que veut dire mclpool limit reached: increase NMBCLUSTERS ? (haut)

Cela signifie que le noyau n'a pas assez de mémoire pour les clusters mbuf. Les clusters mbuf sont utilisés, par le code réseau, pour stocker des paquets et d'autres données. Pour corriger le problème vous pouvez, soit ajouter :
options NMBCLUSTERS=1024
à votre configuration noyau, soit corriger le binaire :
# gdb --write /netbsd
(gdb) set nmbclusters=1024
(gdb) quit
Notez que si vous intervenez sur le binaire uniquement, vous devrez redémarrer pour que les modifications soient prises en compte. Si votre plate-forme le supporte, vous pouvez fixer la valeur avec :
# sysctl -w kern.mbuf.nmbclusters=1024
Cette intervention sera cependant perdue après le prochain redémarrage. Si vous combinez cette manipulation avec la correction du binaire, vous n'aurez pas besoin de compiler un nouveau noyau ni de redémarrer.

La valeur par défaut de NMBCLUSTERS est 256. Si vous rencontrez ce problème, essayez par exemple 1024. Les serveur très sollicités peuvent nécessiter encore plus. Pour afficher la valeur actuelle de NMBCLUSTERS :

# echo 'print nmbclusters' | gdb -q /netbsd
Voir aussi options(4) pour plus de détails sur la configuration du noyau.

Que veut dire «Stray interrupt on IRQ 7» ? (haut)

Le message noyau «interruption perdue sur IRQ 7» signale que le contrôleur d'interruptions en a démasqué une sur IRQ 7 alors qu'aucun pilote n'en est chargé.

Il peut y avoir deux raisons pour cela :

  1. Sur une autre machine qu'un PC, cela veut presque tout le temps dire qu'un pilote est attaché à l'IRQ (sinon il serait masqué) mais que ce n'est pas le bon.

  2. Sur PC, le problème IR7 par défaut est plus obscur. L'orsqu'un périphérique s'affecte un IRQ mais que ce dernier est désafecté après que le PIC l'ait vérouillé mais avant que le processeur l'ait accepté, le PIC ment sur l'origine de l'IRQ.

    Il existe une méthode pour reconnaitre les «default IR7» mais elle ne fonctionne pas toujours sur les systèmes les plus anciens. Il est généralement préférable de corriger les pilotes afin qu'ils ne génèrent pas l'erreur. Dans certains cas, il est difficile de les éviter lors d'utilisation d'un type d'interruptions.

Vous ne pouvez avoir ce message que si votre noyau est compilé avec l'option DEBUG.

Que veut dire WARNING: SPL NOT LOWERED ON SYSCALL EXIT ? (haut)

Ce message envoyé par le noyau signifie qu'il a un bug. Un appel système a fait int x = splfoo(); sans avoir appelé splx(x); avant de retourner. La fonction splx(x); de cet exemple restaure le niveau de priorité du noyau avec la valeur x, qui a été retournée par l'une des autres fonctions spl (ici splfoo();).

Si vous obtenez ce message, vous vous retrouverez dans ddb(4), le débuggeur du noyau. Les valeurs de la pile, obtenues avec «t», devraient vous montrer l'appel incriminé. Il sera alors certainement un bonne idée d'envoyer à send-pr(1) le résultat de cette commande ainsi que toute autre information pertinente car en aucun cas vous n'auriez dû avoir ce message.

Voir aussi spl(9) pour plus d'informations sur les fonctions spl.

Pourquoi les noyaux sont-ils compilés avec -msoft-float ? (haut)

Lorsqu'un processus lance un appel au système, le noyau doit sauvegarder l'état du processeur afin de pouvoir ensuite revenir au processus. Les registres de virgules flottantes ont tendance à être assez gros et relativement pleins, ce qui rend l'opération très coûteuse. Si le coprocesseur (FPU) est au milieu d'un calcul, le processeur (CPU) devra, en plus, s'asseoir en attendant qu'il ait fini pour pouvoir copier le registre.

Éviter les registres de virgules flottantes dans le noyau accroît donc les performances des appels système. Certains processeurs, comme le sparc, peuvent aussi exploiter les périodes de sous charge, évitant la sauvegarde et restauration des registres, même en basculant d'un processus à l'autre.

Sur certaines architectures, le compilateur peut utiliser les registres du coprocesseur pour accélérer certaines opération (comme les copies de blocs mémoire), déroutant la méthode ci-dessus. D'où l'utilisation de «-msoft-float».

La compilation du noyau avec peu de mémoire semble très lente (haut)

Par défaut, NetBSD installe un noyau GENERIC comprenant les pilotes de tous le matériel géré, tous les protocoles et systèmes de fichiers. Il peut ainsi tourner sur tous les ordinateurs du portage mais, en contre partie, prend plus de place que nécessaire, en particulier sur les ordinateurs ayant peu de mémoire vive. Par ailleurs, les compilations utilisant l'optimisation -2 demandent plus de mémoire et plus de temps pour rendre le noyau aussi rapide que possible.

Lorsque vous compilez votre propre noyau, vous pouvez utiliser «make COPTS=-O» qui demande au compilateur de ne faire que les optimisations les plus efficaces. Vous aurez alors un noyau parfois plus lent mais plus rapide à compiler.

Si vous partez pour plusieurs «compilations et redémarrage sur le nouveau noyau» sur votre machine à faible mémoire vive, faites les premières passes avec «make COPTS=-O» puis passez à «make» pour la passe finale.

Bien entendu, la manière la plus rapide de compiler un noyau pour une machine munie de peu de mémoire vive est de lui en rajouter temporairemnent ou de faire cette compilation sur un autre ordinateur !

Problèmes en compilant un noyau -current (haut)

En premier lieu, abonnez-vous à la liste de diffusion current-users. Traquer la -current sans lire current-users est comme conduire la nuit tous feux éteints. Vous êtes prévenus. :)

Il vaut toujours la peine de télécharger le dernier config.tar.gz, le compiler, l'installer et de refaire vos fichiers de configuration suffisamment souvent entre deux versions.

Débugger un «crash dump» du noyau (haut)

  1. Assurez-vous d'avoir compilé un noyau à partir des mêmes sources avec DEBUG et makeoptions DEBUG="-g" activés dans le fichier de configuration.
  2. «gdb netbsd.gdb» (dans le répertoire de compilation du noyau).
  3. «target kcore /var/crash/netbsd.0.core» à l'invite de gdb.
Vous pouvez utiliser les commandes gdb(1) habituelles comme «bt» pour suivre à la trace (backtrace).

Traquer un processus pendant le débuggage du noyau (haut)

Lorsque vous débuggez le noyau, vous pouvez obtenir les traces du processus que voulez, à partir de gdb, en deux étapes simples :

  1. Récupérez l'adresse du processus «ps -ax -O paddr -M netbsd.x.core»
  2. Demandez à gdb d'utiliser cet identifiant «proc 0x<addr>»

Qu'est-ce que DDB et que faire avec ? (haut)

DDB est le débuggeur optionnel inclus au noyau. On y entre généralement par une des trois méthodes suivantes : Parmi les commandes les plus utiles :

Générer un crashdump du noyau (haut)

Normalement, lorsqu'il panique, le noyau génère automatiquement un crashdump (rapport de plantage) récupéré au redémarrage par savecore(8). Vous pouvez cependant le forcer à en faire un, dans ddb(4), en utilisant «reboot 0x100» (sync dans NetBSD 1.5 et suivants). Si le noyau panique ou se fige alors qu'il essaie de synchroniser le cache buffer, vous pouvez utiliser «reboot 0x104» pour sauter cette étape.

Ajouter un noyau à une disquette de démarrage (haut)

Certains portages sont déjà mis en place afin d'établir une disquette de démarrage avec «cd /usr/src/distrib/<ARCH>/floppies ; make». Vous aurez éventuellement besoin de compiler le noyau INSTALL avant d'exécuter ces commandes. Si vous avez une image boot.fs, vous pouvez remplacer le noyau avec :
  1. vnconfig -c vnd0 boot.fs
  2. mount /dev/vnd0a /mnt
  3. gzip -c -9 < netbsd > /mnt/netbsd.gz
  4. umount /mnt
  5. vnconfig -u vnd0
Cette manipulation considère que vous avez pseudo-device vnd dans votre fichier de configuration et que votre noyau est prêt à l'emploi.

Je n'arrive pas à monter le périphérique SCSI de ma nouvelle partition. Que se passe-t-il avec le numérotage ? (haut)

Par défaut sous NetBSD, les périphériques SCSI sont numérotés à partir de 0, dans leur ordre SCSI. En d'autres mots, le plus petit nombre est /dev/sd0, suivi de /dev/sd1, etc. Notez qu'il s'agit de l'assignation effectuée au démarrage.

Si vous compilez votre propre noyau, vous pouvez paramètrer vos périphériques SCSI de manière à ce qu'ils pointent les numéros que vous voulez. Par exemple :

sd0             at scsibus0 target 4 lun 0
sd*             at scsibus? target ? lun ?
Ce paramètrage fait correspondre sd0 au disque SCSI numéro 4 et traite le reste des périphériques comme décrit ci-dessus. Cela s'appelle «écrire en dur». Cette opération est recommandée si vous utilisez RAID ou ccd pour éviter que les identifiants ne soient changés si un disque est éteint ou en panne.

Foire Aux Questions sur le matériel


Que veut dire device not configured ? (haut)

Débugger des périphériques ATAPI ou ATA (IDE) (haut)

Si un noyau a été compilé avec WDCDEBUG défini, alors gdb peut être utilisé pour corriger wdcdebug_atapi_mask et wdcdebug_mask. En plaçant les bits appropriés de ces variables, le noyau affichera des informations sur les opérations ATAPI et ATA.
(Actuellement, NetBSD active WDCDEBUG par défaut).

Pour le maximum de messages, utilisez :

	# gdb --write /netbsd
	(gdb) set wdcdebug_atapi_mask=0xff
	(gdb) set wdcdebug_mask=0xff
	(gdb) quit
Note : vous obtiendrez une extrèmement grande quantité de messages. Pour choisir des options particulières, voyez la liste ci-dessous :

Débugger des périphériques USB (haut)

Si vous avez des problèmes avec des périphériques USB, activez les messages du pilote USB :

Reconnaître un nouveau périphérique PnP (haut)

Considérons que le périphérique en question est d'un type générique déjà géré mais que l'identifiant n'est pas reconnu. L'ajout d'un périphérique dont le comportement n'est pas encore connu demande l'écriture de code.
  1. Compilez un noyau avec l'option(4) PCMCIAVERBOSE.
  2. Au démarrage, il doit être décrit comme «not configured». Notez l'identifiant (dans notre cas USR3031) :
    	isapnp0: <U.S. Robotics 56K FAX INT, USR3031, , > port 0x3e8/8 irq 5 not configured
  3. Ajoutez l'entrée appropriée à /sys/dev/isapnp/isapnpdevs :
    	devlogic       com     USR3031         USR 56k Faxmodem
  4. Regénérez isapnpdevs.{c,h} avec : 'make -f Makefile.isapnpdevs'.
  5. Recompilez le noyau
  6. Envoyez un rapport avec send-pr(1) ou avec le formulaire en ligne.

Reconnaître un nouveau périphérique PCMCIA (haut)

Considérons que le périphérique en question est d'un type générique déjà géré mais que l'identifiant n'est pas reconnu. L'ajout d'un périphérique dont le comportement n'est pas encore connu demande l'écriture de code.
  1. Compilez un noyau avec l'option(4) PCMCIA_VERBOSE.
  2. Dans les messages de démarrage, la carte doit apparaître accompagnée de «not configured». Notez les codes constructeur et produit (dans notre cas, ce sera 0x143 et 0x201) :
    pcmcia0: CIS version PCMCIA 2.0 or 2.1
    pcmcia0: CIS info: Grey Cell, GCS2000, Gold II, 1
    pcmcia0: Manufacturer code 0x143, product 0x201
    pcmcia0: function 0: network adapter, ccr addr 3f8 mask 1
    
  3. Ajoutez les entrées vendor et product à /sys/dev/pcmcia/pcmciadevs.
  4. Regénérez pcmciadevs.h et pcmciadevs_data.h avec : «make -f Makefile.pcmciadevs».
  5. Ajoutez une entrée à la table des périphériques en haut du fichier concernant le bus, dans /sys/dev/pcmcia/. Par exemple, une carte compatible ne2000 utilisera /sys/dev/pcmcia/if_ne_pcmcia.c.
  6. Recompilez le noyau.
  7. Envoyez un rapport avec send-pr(1) ou avec le formulaire en ligne.

PLIP (Parallel Line IP) est-il supporté ? (haut)

Martin Husemann propose des correctifs qui ajoutent la gestion de PLIP à NetBSD/i386, dans le rapport numéro PR 1278. Les correctifs, à la fin du rapport, s'appliquent à l'arborescence NetBSD 1.3.3.

Qu'est-ce que UBC ? (haut)

UBC veut dire Unified Buffer Cache. Il a été écrit par Chuck Silvers et inclus dans NetBSD à partir de 1.5 (nov 2000). Lors d'une mise à jour à partir d'un état non-UBC, vous devrez relancer config, mais avant, vous devez enlever toute référence à «BUFCACHE», «NBUF» et «BUFPAGES» et laisser la taille du cache tampon à sa taille par défaut. Avec UBC, le cache traditionnel n'est plus utilisé pour enregistrer de vrais fichiers mais des méta-données. Vous devrez donc autoriser la mémoire virtuelle à gérer la mémoire physique. La taille par défaut sera correcte pour la plupart des utilisateurs, indépendamment de la mémoire vive de leur ordinateur. Le message «using X buffers containing Y memory» au démarrage n'indique plus la quantité de mémoire donc ne vous inquiétez pas si les nombres de changent pas.

La différence la plus importante est qu'il y a plus de mémoire disponible pour garder des vrais fichiers. Les entrées-sorties seront donc plus rapides puisqu'il y aura plus de chances que vos données y soient. La rapidité dépends de ce que vous faites mais vous noterez certainement la différence.


Accueil
Accueil Documentation

(Nous contacter) $NetBSD: index.html,v 1.17 2006/06/22 15:49:07 jschauma Exp $
Copyright © 1994-2003 par la Fondation NetBSD, Inc. TOUS DROITS RÉSERVÉS.