Chapitre 8. Configurer le noyau de FreeBSD

8.1. Synopsis

Le noyau est le coeur du système d’exploitation FreeBSD. Il est responsable de la gestion de la mémoire, de la mise en application des contrôles de sécurité, du réseau, des accès disque, et bien plus. Bien que FreeBSD devienne de plus en plus configurable dynamiquement, il est toujours nécessaire occasionnellement de reconfigurer et recompiler votre noyau.

Après la lecture de ce chapitre, vous saurez:

  • Pourquoi vous pourriez avoir besoin de compiler un noyau sur mesure.

  • Comment écrire un fichier de configuration du noyau, ou modifier un fichier de configuration existant.

  • Comment utiliser le fichier de configuration du noyau pour créer et recompiler un nouveau noyau.

  • Comment installer un nouveau noyau.

  • Que faire si quelque chose se passe mal.

Toutes les commandes listées dans les exemples de ce chapitre doivent être exécutées en tant que root afin de fonctionner.

8.2. Pourquoi compiler un noyau sur mesure?

Traditionnellement, FreeBSD a eu ce qui s’appelle un noyau "monolithique". Cela signifie que le noyau était un gros programme, supportant une liste figée de périphériques, et si vous vouliez modifier le comportement du noyau alors vous deviez compiler un nouveau noyau, et ensuite redémarrer votre ordinateur avec le nouveau noyau.

Aujourd’hui, FreeBSD s’oriente rapidement vers un modèle où une grande partie des fonctions du noyau est contenue dans des modules qui peuvent être dynamiquement chargés et déchargés si nécessaire. Cela permet au noyau de s’adapter au nouveau matériel devenant soudainement disponible (comme les cartes PCMCIA dans un ordinateur portable), ou pour qu’une nouvelle fonctionnalité qui n’était pas nécessaire lors de la compilation du noyau y soit intégrée. On appelle cela un noyau modulaire.

En dépit de cela, il est encore nécessaire d’effectuer certaines configurations de noyau en statique. Dans certains cas c’est parce que la fonctionnalité est si proche du noyau qu’elle ne peut être rendue dynamiquement chargeable. Dans d’autres cas, cela peut tout simplement venir du fait que personne n’a encore pris le temps d’écrire un module dynamiquement chargeable pour cette fonctionnalité.

Compiler un noyau sur mesure est l’un des plus importants rites de passage que doit endurer tout utilisateur BSD. Cette opération, tout en prenant du temps, apportera de nombreuses améliorations à votre système FreeBSD. A la différence du noyau GENERIC, qui doit supporter une large gamme de matériels, un noyau sur mesure ne contient que le support pour votre configuration matérielle. Cela a de nombreux avantages, comme:

  • Un temps de démarrage plus court. Comme le noyau ne recherchera que le matériel présent sur votre système, le temps nécessaire au démarrage de votre système peut diminuer de façon importante.

  • Une utilisation plus faible de la mémoire. Un noyau sur mesure utilise souvent moins de mémoire que le noyau GENERIC, ce qui est important car le noyau doit toujours résider en mémoire. Pour cette raison, un noyau sur mesure est tout particulièrement utile sur un système dont les ressources mémoire sont limitées.

  • Le support de matériels supplémentaires. Un noyau sur mesure vous permet d’intégrer le support pour des périphériques, qui ne sont pas présents dans le noyau GENERIC comme les cartes son.

8.3. Compiler et installer un noyau sur mesure

Commençons par passer rapidement en revue le répertoire de configuration du noyau. Tous les chemins d’accès mentionnés seront relatifs au répertoire principal /usr/src/sys, qui est également accessible via le lien symbolique /sys. Il comporte un certain nombre de sous-répertoires correspondants à différentes parties du noyau, mais les plus importantes, en ce qui nous concerne, sont arch/conf, où vous éditerez votre fichier configuration personnalisé, et compile, qui est l’espace de travail où votre noyau sera compilé. arch représente une des architectures suivante: i386, soit alpha, amd64, ia64, powerpc, sparc64, ou encore pc98 (une branche alternative de développement de l’architecture PC, populaire au Japon). Tout ce qui se trouve dans un répertoire particulier à une architecture est propre uniquement à cette architecture; le reste du code est un code indépendant du type de machine et commun à toutes les plates-formes sur lesquelles FreeBSD pourrait être potentiellement porté. Remarquez l’organisation logique de l’arborescence des répertoires, où chaque périphérique, système de fichiers, et option supportés a son propre sous-répertoire.

Les exemples de ce chapitre supposent que vous utilisez l’architecture i386. Si ce n’est pas votre cas, effectuez les ajustements appropriés au niveau des chemins d’accès pour votre architecture.

S’il n’y a pas de répertoire /usr/src/sys sur votre système, alors c’est que les sources du noyau n’ont pas été installées. La manière la plus facile de les installer est d’exécuter sysinstall en tant que root, et sélectionner Configure, puis Distributions, src, puis base et sys. Si vous avez une aversion envers sysinstall et que vous disposez d’un CDROM "officiel" de FreeBSD, alors vous pouvez installer les sources depuis la ligne de commande:

# mount /cdrom
# mkdir -p /usr/src/sys
# ln -s /usr/src/sys /sys
# cat /cdrom/src/ssys.[a-d]* | tar -xzvf -
# cat /cdrom/src/sbase.[a-d]* | tar -xzvf -

Ensuite allez dans le répertoire arch/conf et copiez le fichier de configuration GENERIC dans un fichier qui portera le nom que vous voulez donner à votre noyau. Par exemple:

# cd /usr/src/sys/i386/conf
# cp GENERIC MONNOYAU

Par tradition, c’est un nom en majuscules, et si vous maintenez plusieurs machines FreeBSD avec des configurations matérielles différentes, c’est une bonne idée de lui donner le même nom que la machine. Nous l’appellerons MONNOYAU pour les besoins de cet exemple.

Conserver votre fichier de configuration du noyau directement sous /usr/src peut être une mauvaise idée. Si vous avez des problèmes il peut être tentant de juste effacer /usr/src et recommencer à nouveau. Après avoir fait cela ne prends que quelques secondes pour vous rendre compte que vous venez d’effacer votre fichier de configuration du noyau personnalisé. N’éditez pas, non plus, directement le fichier GENERIC, il peut être écrasé à la prochaine mise à jour de l’arborescence des sources, et vos modifications seraient perdues.

Vous voudrez peut être conserver votre fichier de configuration du noyau ailleurs et alors créer un lien symbolique vers le fichier dans le répertoire i386.

Par exemple:

# cd /usr/src/sys/i386/conf
# mkdir /root/noyaux
# cp GENERIC /root/noyaux/MONNOYAU
# ln -s /root/noyaux/MONNOYAU

Editez maintenant MONNOYAU avec votre éditeur de texte préféré. Si vous venez tout juste de finir l’installation, le seul éditeur disponible sera probablement vi, qui est trop complexe pour être décrit ici, mais est bien expliqué dans de nombreux ouvrages de la bibliographie. Cependant, FreeBSD offre un éditeur plus simple appelé ee qui, si vous êtes débutant, sera votre éditeur de choix. N’hésitez pas à modifier les commentaires d’entête pour y décrire votre configuration ou les modifications que vous avez apportés par rapport au noyau GENERIC.

Si vous avez déjà compilé un noyau sur SunOS™ ou tout autre système d’exploitation BSD, l’essentiel de fichier vous sera familier. Si vous venez d’un système d’exploitation comme DOS, à l’inverse, le fichier de configuration GENERIC vous paraîtra inintelligible, lisez alors lentement et attentivement la section sur le fichier de configuration.

Si vous synchronisez votre arborescence des sources avec les toutes dernières sources du projet FreeBSD, assurez-vous de toujours lire le fichier /usr/src/UPDATING avant d’effectuer une quelconque opération de mise à jour. Ce fichier décrit les problèmes importants ou les domaines demandant une attention particulière dans le code mis à jour. /usr/src/UPDATING correspond toujours à votre version des sources de FreeBSD, et est donc plus à jour que ce Manuel.

Vous devez maintenant compiler le code source du noyau.

Procedure: Compiler un noya

  1. Passez dans le répertoire /usr/src.

    # cd /usr/src
  2. Compilez le noyau:

    # make buildkernel KERNCONF=MONNOYAU
  3. Installez le nouveau noyau:

    # make installkernel KERNCONF=MONNOYAU

Il est indispensable d’avoir l’intégralité des sources du système FreeBSD pour compiler le noyau.

Par défaut, quand vous compilez un noyau personnalisé, tous les modules seront également recompilés. Si vous désirez mettre à jour un noyau plus rapidement ou compiler que certains modules, vous devez éditer le fichier /etc/make.conf avant de compiler le noyau:

MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs

Cette variable définit une liste de modules à compiler à la place de l’intégralité des modules.

WITHOUT_MODULES = linux acpi sound/sound sound/driver/ds1 ntfs

Cette variable définit une liste de modules à exclure du processus de compilation. Pour d’autres variables qui peuvent être intéressantes pour le processus de compilation du noyau, consultez la page de manuel make.conf(5).

Le nouveau noyau sera copié dans le répertoire /boot/kernel avec le nom /boot/kernel/kernel et l’ancien noyau sera renommé en /boot/kernel.old/kernel. Maintenant, arrêtez le système et redémarrez pour utiliser votre nouveau noyau. Si quelque chose se passe mal, il y a quelques instructions de dépannage à la fin de ce chapitre que vous pourrez trouver utiles. Assurez-vous de lire la section qui explique comment revenir en arrière dans le cas où votre nouveau noyau ne démarre pas.

Les autres fichiers concernant le processus de démarrage, comme le chargeur (loader(8)) et la configuration du démarrage sont conservés dans le répertoire /boot. Les modules tiers et personnalisés peuvent être placés dans /boot/kernel, bien que les utilisateurs doivent être conscients que garder ses modules synchronisés avec le noyau compilé est très important. Les modules qui ne sont pas destinés à fonctionner avec le noyau compilé peuvent être instables et ne pas donner les résultats escomptés.

8.4. Le fichier de configuration

Le format général du fichier de configuration est assez simple. Chaque ligne est composée d’un mot-clé et d’un ou plusieurs arguments. Pour simplifier, la plupart des lignes ne contiennent qu’un seul argument. Tout ce qui suit le caractère # est considéré comme un commentaire et ignoré. Les sections suivantes décrivent chaque mot-clé, dans l’ordre où ils apparaissent dans le fichier GENERIC. Pour une liste exhaustive des options et périphériques dépendants de l’architecture utilisée, consultez le fichier NOTES présent dans le même répertoire que le fichier GENERIC. Pour les options ne dépendant pas de l’architecture, consultez le fichier /usr/src/sys/conf/NOTES.

Pour compiler un fichier contenant toutes les options possibles, en général pour effectuer des tests, exécutez la commande suivante en tant que root:

# cd /usr/src/sys/i386/conf  make LINT

Ce qui suit est un exemple de fichier de configuration du noyau GENERIC avec divers commentaires aux endroits nécessaires pour un peu plus de clarté. Cet exemple devrait correspondre de façon très proche à votre copie du fichier /usr/src/sys/i386/conf/GENERIC.

machine		i386

C’est l’architecture de la machine. Elle doit être alpha, amd64, i386, ia64, pc98, powerpc, ou encore sparc64.

cpu          I486_CPU
cpu          I586_CPU
cpu          I686_CPU

Ce qui précède définit le type de CPU présent dans votre système. Il peut y avoir plusieurs occurrences de la ligne CPU (si, par exemple, vous n’êtes pas sûr de devoir utiliser I586_CPU ou I686_CPU), cependant, pour un noyau personnalisé, il est mieux de spécifier uniquement le CPU que vous avez. Si vous n’êtes pas sûr du type, vous pouvez lister le fichier /var/run/dmesg.boot pour visualiser les messages de démarrage.

ident          GENERIC

C’est l’identification du noyau. Vous devriez changer cela pour le nom, quel qu’il soit, que vous donnez à votre noyau, par exemple MONNOYAU si vous avez suivi les instructions des exemples précédents. La valeur que vous donnez à la chaîne ident s’affichera au démarrage du noyau, il est donc utile de donner au nouveau noyau un nom différent si vous voulez le différencier de votre noyau habituel (e.g., vous voulez compiler un noyau expérimental).

#To statically compile in device wiring instead of /boot/device.hints
#hints          "GENERIC.hints"         #Default places to look for devices.

Le fichier device.hints(5) est utilisé pour configurer les paramètres des pilotes de périphériques. Le loader(8) recherchera le fichier /boot/device.hints au démarrage. En utilisant l’option hints vous pouvez compiler ces valeurs en statique dans votre noyau. Il n’est alors pas utile de créer de fichier device.hints dans /boot.

makeoptions     DEBUG=-g          #Build kernel with gdb(1) debug symbols

Le processus normal de compilation de FreeBSD inclut les informations de débogage lors de la compilation du noyau avec l’option -g, qui autorisera les informations de débogage quand le noyau sera passé à gcc(1).

options          SCHED_4BSD         # 4BSD scheduler

L’ordonnanceur ("scheduler") traditionnel et par défaut de FreeBSD. Conservez cette ligne.

options          PREEMPTION         # Enable kernel thread preemption

Permet aux processus légers présents dans le noyau d’être devancés par des processus de priorité plus élevée. Cela améliore l’interactivité et permet aux processus d’interruption d’être exécutés le plus tôt possible au lieu d’attendre leur tour.

options          INET          #InterNETworking

Support réseau. Conservez-le, même si vous n’envisagez pas de vous connecter à un réseau. La plupart des programmes utilisent le réseau "en boucle" (i.e., établissent des connexions réseau avec le PC lui-même), cette option est donc quasiment obligatoire.

options          INET6          #IPv6 communications protocols

Ceci active les protocoles de communication IPv6.

options          FFS          #Berkeley Fast Filesystem

C’est le système de fichiers de base sur disque dur. Gardez ces options si vous démarrez depuis le disque dur.

options          SOFTUPDATES  #Enable FFS Soft Updates support

Cette option rajoutera le support des "Soft Updates" dans le noyau, ce qui aidera l’accélération des accès en écriture sur les disques. Même quand cette fonction est fournit par le noyau, elle doit être activée sur chaque disque. Regardez le résultat de la commande mount(8) pour voir si les "Soft Updates" sont activées sur les disques de votre système. Si vous ne voyez pas apparaître l’option soft-updates alors vous devrez l’activer en utilisant les commandes tunefs(8) (pour les systèmes de fichiers existant) ou newfs(8) (pour les nouveaux systèmes de fichiers).

options          UFS_ACL      #Support for access control lists

Cette option active le support des listes de contrôle d’accès au système de fichiers (ACL). Elles reposent sur l’utilisation d’attributs étendus et d’UFS2, cette fonctionnalité est décrite dans la Listes de contrôle d’accès au système de fichiers. Les ACLs sont activées par défaut, et leur support ne devraient pas être retiré du noyau si elles ont été précédemment utilisées sur un système de fichiers, étant donné que cela supprimera les listes de contrôle d’accès changeant alors la façon dont sont protégés les fichiers d’une manière imprévisible.

options          UFS_DIRHASH  #Improve performance on big directories

Cette option inclut certaines fonctions pour accélérer les opérations disque sur de gros répertoires, aux dépens d’employer de la mémoire supplémentaire. Vous conserverez normalement cela pour un gros serveur, ou une station de travail très active, et vous l’enlèverez si vous utilisez FreeBSD sur un petit système où la mémoire prime et la vitesse d’accès disque est moins importante, comme pour un coupe-feu.

options          MD_ROOT      #MD is a potential root device

Cette option active le support pour des disques virtuels en mémoire utilisés comme périphérique racine.

options          NFSCLIENT         # Network Filesystem Client
options          NFSSERVER         # Network Filesystem Server
options          NFS_ROOT          # NFS usable as /, requires NFSCLIENT

Le système de fichiers réseau. A moins que vous n’envisagiez de monter des partitions d’un serveur de fichiers UNIX® par l’intermédiaire d’un réseau TCP/IP, vous pouvez mettre en commentaire ces options.

options          MSDOSFS      #MSDOS Filesystem

Le système de fichiers MS-DOS®. A moins que vous n’envisagiez de monter une partition DOS d’un disque dur au démarrage, vous pouvez sans risque commenter cette option. Le module sera automatiquement chargé la première fois que vous monterez une partition DOS, comme décrit plus haut. Par ailleurs, l’excellent logiciel emulators/mtools vous permet d’accéder à des disquettes DOS sans avoir besoin de les monter (et ne requiert pas non plus MSDOSFS).

options          CD9660       #ISO 9660 Filesystem

Le système de fichiers ISO 9660 pour les CDROMs. Commentez ces options si vous n’avez pas de lecteur de CDROM ou que vous ne montez qu’occasionnellement des CDROMs (il sera chargé dynamiquement dès que vous monterez un CDROM). Les CDROMs audios n’ont pas besoin de ce système de fichiers.

options          PROCFS            # Process filesystem (requires PSEUDOFS)

Le système de fichiers pour les processus. C’est un "pseudo-système" de fichiers monté sur /proc qui permet à des programmes comme ps(1) de vous fournir plus d’informations sur les processus qui tournent sur le système. L’utilisation de PROCFS n’est pas nécessaire la plupart du temps, comme la majeur partie des outils de débogage et de monitoring ont été adaptés pour s’exécuter sans PROCFS: les nouvelles installations ne monteront pas par défaut ce système de fichiers.

options          PSEUDOFS     #Pseudo-filesystem framework

Les noyaux 6.X faisant usage du système PROCFS doivent également inclure le support pour PSEUDOFS.

options          GEOM_GPT          # GUID Partition Tables.

Cette option apporte la possibilité d’avoir un grand nombre de partitions sur un seul disque.

options          COMPAT_43    #Compatible with BSD 4.3 [KEEP THIS!]

Compatibilité avec 4.3BSD. Conservez cette option; certains programmes auront un comportement bizarre si vous la commentez.

options          COMPAT_FREEBSD4     #Compatible with FreeBSD4

Cette option est nécessaires aux systèmes i386™ et Alpha fonctionnant sous FreeBSD 5.X pour supporter les applications compilées sur d’anciennes version de FreeBSD qui utilisent d’anciennes interfaces d’appel système. Il est recommandé d’utiliser cette option sur tous les systèmes i386™ et Alpha susceptibles d’exécuter d’anciennes applications; les plateformes apparues sous FreeBSD 5.0, comme l’ia64 et sparc64, n’ont pas besoin de cette option.

options          COMPAT_FREEBSD5   # Compatible with FreeBSD5

Cette option est nécessaire sous FreeBSD 6.X et versions supérieures pour supporter les applications compilées sous FreeBSD 5.X et qui utilisent les interfaces d’appel système FreeBSD 5.X.

options          SCSI_DELAY=5000    #Delay (in ms) before probing SCSI

Cette option oblige le noyau à attendre 5 secondes avant de rechercher les périphériques SCSI présents sur votre système. Si vous n’avez que des disques IDE, vous pouvez l’ignorer, sinon vous pouvez essayer de diminuer cette valeur, pour accélérer le démarrage du système. Bien sûr, si vous le faites, et que FreeBSD a du mal à reconnaître vos périphériques SCSI, vous devrez l’augmenter à nouveau.

options          KTRACE              #ktrace(1) support

Ceci permet de tracer le processus du noyau, ce qui est utile pour le débogage.

options          SYSVSHM             #SYSV-style shared memory

Cette option implémente la mémoire partagée System V. L’usage le plus courant qui en est fait est l’extension XSHM d’X, dont de nombreux logiciels gourmants en graphique tireront automatiquement parti pour fonctionner plus vite. Si vous utilisez X, vous utiliserez absolument cette option.

options          SYSVMSG             #SYSV-style message queues

Support des messages System V. Cette option n’augmente que de quelques centaines d’octets la taille du noyau.

options          SYSVSEM             #SYSV-style semaphores

Support des sémaphores System V. D’un usage moins courant, mais n’augmente la taille du noyau que de quelques centaines d’octets.

L’option -p de la commande ipcs(1) donnera la liste des processus utilisant chacun de ces mécanismes System V.

options 	     _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions

Extensions temps-réel ajoutées dans la norme POSIX® 1993. Certaines applications du catalogue des logiciels portés les utilisent (comme StarOffice™).

options          KBD_INSTALL_CDEV  # install a CDEV entry in /dev

Cette option concerne le clavier. Elle installe une entrée CDEV dans le répertoire /dev.

options          ADAPTIVE_GIANT    # Giant mutex is adaptive.

"Giant" est le nom d’un mécanisme d’exclusion mutuelle (un "mutex" dormant) qui protège l’accès à un ensemble important de ressources du noyau. Aujourd’hui c’est un goulot d’étranglement des performances inacceptable que l’on est en train de remplacer activement par des verrous qui protègent les ressources individuelles. L’option ADAPTIVE_GIANT permet à Giant d’être inclus dans l’ensemble des mutex lancés de manière adaptative. C’est à dire, quand un thread désire verrouiller le mutex Giant, mais que ce dernier est déjà verrouillé par un thread sur un autre CPU, le premier thread continuera à fonctionner et attendra la libération du verrou. Normalement, le thread retournera à l’état dormant et attendra une nouvelle chance de pouvoir s’exécuter. Si vous n’êtes pas sûr, laissez la configuration en l’état.

device          apic               # I/O APIC

Le périphérique apic active l’utilisation de l’E/S APIC pour l’acheminement des interruptions. Le périphérique apic peut être utilisé dans les noyaux UP (monoprocesseur) et SMP, mais est requis pour les noyaux SMP. Ajoutez options SMP pour inclure le support pour plusieurs processeurs.

Le périphérique apic n’existe que sur l’architecture i386, cette ligne de configuration ne doit pas être utilisée sur d’autres architectures.

device          eisa

Rajoutez cela si vous avez une carte mère EISA. Cela permet l’auto-détection et la configuration de tous les périphériques présents sur le bus EISA.

device          pci

Ajoutez cette option si vous avez une carte mère PCI. Cela permet l’auto-détection des cartes PCI et gère l’interface entre les bus PCI et ISA.

# Floppy drives
device          fdc

C’est le contrôleur de lecteur de disquettes.

# ATA and ATAPI devices
device          ata

Ce pilote supporte tous les périphériques ATA et ATAPI. Vous n’avez besoin que d’une seule ligne device ata pour que le noyau détecte tous les périphériques PCI ATA/ATAPI sur les machines modernes.

device          atadisk                 # ATA disk drives

Ceci est requis avec device ata pour les disques ATA.

device          ataraid                 # ATA RAID drives

Ceci est nécessaire avec device ata pour les disques RAID ATA.

device          atapicd                 # ATAPI CDROM drives

Ceci est nécessaire avec device ata pour le support des lecteurs de CDROM ATAPI.

device          atapifd                 # ATAPI floppy drives

Ceci est nécessaire avec device ata pour le support des lecteurs de disquettes ATAPI.

device          atapist                 # ATAPI tape drives

Ceci est nécessaire avec device ata pour le support des lecteurs de bande ATAPI.

options         ATA_STATIC_ID           #Static device numbering

Cela rend la numérotation des périphériques statique, sans cela l’allocation des numéros de périphériques sera dynamique.

# SCSI Controllers
device          ahb        # EISA AHA1742 family
device          ahc        # AHA2940 and onboard AIC7xxx devices
options         AHC_REG_PRETTY_PRINT    # Print register bitfields in debug
                                        # output.  Adds ~128k to driver.
device          ahd        # AHA39320/29320 and onboard AIC79xx devices
options         AHD_REG_PRETTY_PRINT    # Print register bitfields in debug
                                        # output.  Adds ~215k to driver.
device          amd        # AMD 53C974 (Teckram DC-390(T))
device          isp        # Qlogic family
#device         ispfw      # Firmware for QLogic HBAs- normally a module
device          mpt        # LSI-Logic MPT-Fusion
#device         ncr        # NCR/Symbios Logic
device          sym        # NCR/Symbios Logic (newer chipsets + those of `ncr')
device          trm        # Tekram DC395U/UW/F DC315U adapters

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

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

Contrôleurs SCSI. Mettez en commentaires ceux que vous n’avez pas sur votre système. Si vous n’avez qu’un système IDE, vous pouvez supprimer toutes ces lignes. Les lignes *_REG_PRETTY_PRINT sont des options de débogage pour leur pilote respectif.

# SCSI peripherals
device          scbus      # SCSI bus (required for SCSI)
device          ch         # SCSI media changers
device          da         # Direct Access (disks)
device          sa         # Sequential Access (tape etc)
device          cd         # CD
device          pass       # Passthrough device (direct SCSI access)
device          ses        # SCSI Environmental Services (and SAF-TE)

Périphériques SCSI. A nouveau, mettez en commentaires tous ceux que vous n’avez pas, ou si vous n’avez que du matériel IDE, vous pouvez tous les supprimer.

Le pilote USB umass(4) et quelques autres pilotes utilisent le sous-système SCSI même si ce ne sont pas de véritables périphériques SCSI. Par conséquent assurez-vous de ne pas retirer le support SCSI si un tel pilote fait partie de la configuration du noyau.

# RAID controllers interfaced to the SCSI subsystem
device          amr        # AMI MegaRAID
device          arcmsr     # Areca SATA II RAID
device          asr        # DPT SmartRAID V, VI and Adaptec SCSI RAID
device          ciss       # Compaq Smart RAID 5*
device          dpt        # DPT Smartcache III, IV - See NOTES for options
device          hptmv      # Highpoint RocketRAID 182x
device          rr232x     # Highpoint RocketRAID 232x
device          iir        # Intel Integrated RAID
device          ips        # IBM (Adaptec) ServeRAID
device          mly        # Mylex AcceleRAID/eXtremeRAID
device          twa        # 3ware 9000 series PATA/SATA RAID

# RAID controllers
device          aac        # Adaptec FSA RAID
device          aacp       # SCSI passthrough for aac (requires CAM)
device          ida        # Compaq Smart RAID
device          mfi        # LSI MegaRAID SAS
device          mlx        # Mylex DAC960 family
device          pst        # Promise Supertrak SX6000
device          twe        # 3ware ATA RAID

Contrôleurs RAID supportés. Si vous n’avez aucun de ces derniers dans votre système, vous pouvez les mettre en commentaires ou les supprimer.

# atkbdc0 controls both the keyboard and the PS/2 mouse
device          atkbdc     # AT keyboard controller

Le contrôleur du clavier (atkbdc) permet de gérer les E/S du clavier AT et des périphériques de pointage PS/2. Ce contrôleur est nécessaire au pilote de périphérique du clavier (atkbd) et celui des périphériques de pointage PS/2 (psm).

device          atkbd      # AT keyboard

Le pilote de périphérique atkbd, associé au contrôleur atkbdc, fournit un accès au clavier AT 84 touches ou au clavier AT étendu qui est connecté au contrôleur de clavier de la machine.

device          psm        # PS/2 mouse

Utilisez ce périphérique si votre souris se branche sur le port PS/2.

device          kbdmux        # keyboard multiplexer

Support de base pour le multiplexage de claviers. Si vous n’avez pas l’intention d’utiliser sur le système plus d’un clavier, vous pouvez supprimer cette ligne sans risque.

device          vga        # VGA video card driver

Pilote de la carte graphique.

device          splash     # Splash screen and screen saver support

Ecran/bannière de démarrage. Les économiseurs d’écran ont également besoin de ce pseudo-périphérique.

# syscons is the default console driver, resembling an SCO console
device          sc

sc est le pilote par défaut pour la console, qui ressemble à une console SCO. Comme la plupart des programmes en mode plein-écran accèdent à la console par l’intermédiaire d’une base de données de description des terminaux comme termcap, cela n’a guère d’importance que vous choisissiez ce pilote ou vt, le pilote compatible VT220. Quand vous ouvrez une session, positionnez votre variable d’environnement TERM à scoansi si vous avez des problèmes pour utiliser des programmes en mode plein-écran avec cette console.

# Enable this for the pcvt (VT220 compatible) console driver
#device          vt
#options         XSERVER          # support for X server on a vt console
#options         FAT_CURSOR       # start with block cursor

C’est le pilote de console compatible VT220, et, rétrospectivement, compatible VT100/102. Il fonctionne bien sur certains ordinateurs portables qui sont matériellement incompatibles avec le pilote sc. Comme précédemment, positionnez la variable d’environnement TERM lorsque que vous ouvrez une session, mais cette fois-ci à vt100 ou vt220. Ce pilote peut aussi s’avérer utile quand vous vous connectez à un grand nombre de machines différentes par le réseau sur lesquelles les entrées pour le périphérique sc ne sont souvent pas définies dans leurs fichiers termcap ou terminfo - alors que le terminal vt100 devrait être disponible sur pratiquement toutes les plates-formes.

device          agp

Ajoutez cette option si vous avez une carte AGP dans votre système. Cela activera le support AGP, et l’AGP GART pour les cartes qui ont cette fonction.

# Power management support (see NOTES for more options)
device          apm

"Advanced Power Management support" - gestion avancée de l’énergie. Utile pour les ordinateurs portables, ceci est cependant désactivé par défaut dans le noyau GENERIC sous FreeBSD 5.X et versions suivantes

# Add suspend/resume support for the i8254.
device           pmtimer

Pilote du périphérique de gestion du temps pour les événements de la gestion de l’énergie, comme l’APM ou l’ACPI.

# PCCARD (PCMCIA) support
# PCMCIA and cardbus bridge support
device          cbb               # cardbus (yenta) bridge
device          pccard            # PC Card (16-bit) bus
device          cardbus           # CardBus (32-bit) bus

Support PCMCIA. Vous en avez besoin si vous utilisez un ordinateur portable.

# Serial (COM) ports
device          sio               # 8250, 16[45]50 based serial ports

Cela représente les ports séries, appelés ports COM dans le monde MS-DOS®/Windows®.

Si vous avez un modem interne sur le port COM4 et un port série COM2, vous devrez changer l’IRQ du modem en 2 (pour d’obscures raisons techniques, IRQ 2 = IRQ 9) pour y accéder avec FreeBSD. Si vous avez une carte série multi-ports, consultez la page de manuel de sio(4) pour plus d’informations sur les bonnes valeurs à ajouter à votre fichier /boot/device.hints. Certaines cartes vidéo (notamment celle à base de circuits S3) utilisent des adresses d’E/S sous la forme 0x*2e8, et comme de nombreuses cartes séries bon marché de décodent pas complètement l’espace d’adresse d’E/S 16 bits, il y a aura des conflits avec ces cartes, rendant le port COM4 pratiquement inutilisable.

Chaque port série doit avoir une IRQ unique (à moins que vous n’utilisiez une carte multi-ports qui autorise le partage d’interruption), donc les IRQs par défaut pour les ports COM3 et COM4 ne peuvent être utilisées.

# Parallel port
device          ppc

C’est l’interface parallèle du bus ISA.

device          ppbus      # Parallel port bus (required)

Fournit le support pour le bus du port parallèle.

device          lpt        # Printer

Support pour les imprimantes parallèles.

Les trois lignes précédentes sont nécessaires pour permettre le support des imprimantes parallèles.

device          plip       # TCP/IP over parallel

C’est le pilote pour l’interface réseau sur port parallèle.

device          ppi        # Parallel port interface device

Port d’E/S d’usage général ("geek port") + port d’E/S IEEE1284.

#device         vpo        # Requires scbus and da

Ceci est pour le lecteur Zip de Iomega. Les options scbus et da sont également requises. Les meilleures performances sont obtenues avec les ports configurés dans le mode EPP 1.9.

#device         puc

Décommentez ce périphérique si vous disposez d’une carte PCI série ou parallèle "idiote" qui est supportée par le pilote puc(4).

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

Divers pilotes de cartes réseaux PCI. Mettez en commentaires ou supprimer les lignes de celles qui ne sont pas présentes sur votre système.

# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device          miibus     # MII bus support

Le support du bus MII est nécessaire pour certaines cartes Ethernet PCI 10/100, à savoir celles qui utilisent des interfaces compatibles MII ou implémentent une gestion de l’interface opérant comme le bus MII. Ajouter device miibus à la configuration du noyau intègre le support pour l’API miibus générique et tous les pilotes d’interfaces PHY, incluant un pilote générique pour les interfaces PHYs qui ne sont pas spécifiquements gérées par un pilote individuel.

device          bce        # Broadcom BCM5706/BCM5708 Gigabit Ethernet
device          bfe        # Broadcom BCM440x 10/100 Ethernet
device          bge        # Broadcom BCM570xx Gigabit Ethernet
device          dc         # DEC/Intel 21143 and various workalikes
device          fxp        # Intel EtherExpress PRO/100B (82557, 82558)
device          lge        # Level 1 LXT1001 gigabit ethernet
device          msk        # Marvell/SysKonnect Yukon II Gigabit Ethernet
device          nge        # NatSemi DP83820 gigabit ethernet
device          nve        # nVidia nForce MCP on-board Ethernet Networking
device          pcn        # AMD Am79C97x PCI 10/100 (precedence over 'lnc')
device          re         # RealTek 8139C+/8169/8169S/8110S
device          rl         # RealTek 8129/8139
device          sf         # Adaptec AIC-6915 (Starfire)
device          sis        # Silicon Integrated Systems SiS 900/SiS 7016
device          sk         # SysKonnect SK-984x  SK-982x gigabit Ethernet
device          ste        # Sundance ST201 (D-Link DFE-550TX)
device          stge       # Sundance/Tamarack TC9021 gigabit Ethernet
device          ti         # Alteon Networks Tigon I/II gigabit Ethernet
device          tl         # Texas Instruments ThunderLAN
device          tx         # SMC EtherPower II (83c170 EPIC)
device          vge        # VIA VT612x gigabit ethernet
device          vr         # VIA Rhine, Rhine II
device          wb         # Winbond W89C840F
device          xl         # 3Com 3c90x (Boomerang, Cyclone)

Pilotes qui utilisent le code du contrôleur du bus MII.

# ISA Ethernet NICs.  pccard NICs included.
device          cs         # Crystal Semiconductor CS89x0 NIC
# 'device ed' requires 'device miibus'
device          ed         # NE[12]000, SMC Ultra, 3c503, DS8390 cards
device          ex         # Intel EtherExpress Pro/10 and Pro/10+
device          ep         # Etherlink III based cards
device          fe         # Fujitsu MB8696x based cards
device          ie         # EtherExpress 8/16, 3C507, StarLAN 10 etc.
device          lnc        # NE2100, NE32-VL Lance Ethernet cards
device          sn         # SMC's 9000 series of Ethernet chips
device          xe         # Xircom pccard Ethernet

# ISA devices that use the old ISA shims
#device         le

Pilotes pour les cartes Ethernet ISA. Consultez le fichier /usr/src/sys/i386/conf/NOTES pour savoir quelles cartes sont supportées et par quel pilote.

# Wireless NIC cards
device          wlan            # 802.11 support

Support 802.11 générique. Cette ligne est nécessaire pour le réseau sans fil.

device          wlan_wep        # 802.11 WEP support
device          wlan_ccmp       # 802.11 CCMP support
device          wlan_tkip       # 802.11 TKIP support

Support pour le chiffrage pour les périphériques 802.11. Ces lignes sont nécessaires si vous avez l’intention d’utiliser le chiffrage et les protocoles de sécurité 802.11i.

device          an         # Aironet 4500/4800 802.11 wireless NICs.
device          ath             # Atheros pci/cardbus NIC's
device          ath_hal         # Atheros HAL (Hardware Access Layer)
device          ath_rate_sample # SampleRate tx rate control for ath
device          awi        # BayStack 660 and others
device          ral        # Ralink Technology RT2500 wireless NICs.
device          wi         # WaveLAN/Intersil/Symbol 802.11 wireless NICs.
#device         wl         # Older non 802.11 Wavelan wireless NIC.

Support pour diverses cartes réseau sans fil.

# Pseudo devices
device   loop          # Network loopback

C’est l’interface générique en boucle de TCP/IP. Si vous employez telnet ou FTP sur localhost (aussi connu en tant qu’adresse 127.0.0.1) la réponse vous parviendra via ce pseudo-périphérique. Ceci est obligatoire.

device   random        # Entropy device

Générateur de nombres aléatoire sécurisé pour les applications de chiffrement.

device   ether         # Ethernet support

ether ne sert que si vous avez une carte Ethernet. Cela intègre le code générique pour le protocole Ethernet.

device   sl            # Kernel SLIP

sl est le support pour le protocole SLIP. Il a été presque entièrement supplanté par le protocole PPP, plus facile à mettre en oeuvre, mieux adapté aux connexions par modem, et aussi plus puissant.

device   ppp           # Kernel PPP

C’est le support intégré au noyau du protocole PPP pour les connexions par modem. Il y a aussi une version de PPP sous forme de programme utilisateur qui utilise tun et offre plus de souplesse et de possibilités comme la connexion à la demande.

device   tun           # Packet tunnel.

Ceci est utilisé par le programme PPP en mode utilisateur. Voyez la section PPP de ce manuel pour plus d’informations.

device   pty           # Pseudo-ttys (telnet etc)

C’est un "pseudo-terminal" ou un port simulant une session. Il est utilisé par les sessions telnet et rlogin entrantes, par xterm, et d’autres applications comme Emacs.

device   md            # Memory disks

Pseudo-périphérique de disque mémoire.

device   gif     # IPv6 and IPv4 tunneling

Ceci implémente l’encapsulation du protocole IPv6 par dessus l’IPv4, l’IPv4 par dessus l’IPv6, l’encapsulation IPv4 par dessus l’IPv4, et IPv6 par dessus IPv6. Le périphérique `gif`"s’auto-duplique", et créera les fichiers spéciaux de périphérique en fonction des besoins.

device   faith   # IPv6-to-IPv4 relaying (translation)

Ce pseudo-périphérique capture les paquets qui lui sont envoyés et les détourne vers le "daemon" de translation IPv4/IPv6.

# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
device   bpf           # Berkeley packet filter

C’est le filtre de paquets de Berkeley. Ce pseudo-périphérique permet de placer les interfaces en mode "promiscuous" (indiscret), pour capturer chaque paquet sur réseau de diffusion (e.g., un réseau Ethernet). Ces paquets peuvent être enregistrés sur le disque et/ou examinés avec le programme tcpdump(1).

Le périphérique bpf(4) est également utilisé par dhclient(8) pour obtenir une adresse IP du routeur par défaut (passerelle) et ainsi de suite. Si vous utilisez DHCP, conservez cette ligne non commentée.

# USB support
device          uhci          # UHCI PCI-USB interface
device          ohci          # OHCI PCI-USB interface
device          ehci          # EHCI PCI-USB interface (USB 2.0)
device          usb           # USB Bus (required)
#device         udbp          # USB Double Bulk Pipe devices
device          ugen          # Generic
device          uhid          # Human Interface Devices
device          ukbd          # Keyboard
device          ulpt          # Printer
device          umass         # Disks/Mass storage - Requires scbus and da
device          ums           # Mouse
device          ural          # Ralink Technology RT2500USB wireless NICs
device          urio          # Diamond Rio 500 MP3 player
device          uscanner      # Scanners
# USB Ethernet, requires mii
device          aue           # ADMtek USB Ethernet
device          axe           # ASIX Electronics USB Ethernet
device          cdce          # Generic USB over Ethernet
device          cue           # CATC USB Ethernet
device          kue           # Kawasaki LSI USB Ethernet
device          rue           # RealTek RTL8150 USB Ethernet

Support pour divers périphériques USB.

# FireWire support
device          firewire      # FireWire bus code
device          sbp           # SCSI over FireWire (Requires scbus and da)
device          fwe           # Ethernet over FireWire (non-standard!)

Support pour divers périphériques Firewire.

Pour plus d’informations et pour avoir la liste de périphériques supplémentaires supportés par FreeBSD, voyez le fichier /usr/src/sys/i386/conf/NOTES.

8.4.1. Configurations mémoire importantes (PAE)

Les machines à configuration mémoire importante ont besoin de pouvoir accéder à plus d’espace mémoire utilisateur et noyau que la limite des 4 gigaoctets de l’espace d’adresse noyau+utilisateur ("Kernel Virtual Address"-KVA). En raison de cette limite, Intel a ajouté le support d’adresses physiques sur 36 bits pour l’espace d’adresses dans les familles de microprocesseurs Pentium® Pro et suivantes.

L’extension de l’adressage physique-,"Physical Address Extension" (PAE) est une caractéristique des microprocesseurs Intel® Pentium® Pro et suivants autorisant les configurations mémoires jusqu’à 64 gigaoctets. FreeBSD fournit un support pour cette caratéristique via l’option de configuration du noyau PAE, disponible sous toutes les versions actuelles de FreeBSD. En raison des limitations de l’architecture mémoire Intel®, aucune distinction n’est faite entre la mémoire au-dessus et en-dessous de 4 gigaoctets. La mémoire allouée au-dessus de 4 gigaoctets est simplement ajoutée à l’ensemble de la mémoire disponible.

Pour activer le support PAE dans le noyau, ajoutez simplement la ligne suivante dans votre fichier de configuration du noyau:

options		PAE

Le support PAE sous FreeBSD est uniquement disponible pour les processeurs IA-32 d’Intel®. Il doit être noté que le support PAE sous FreeBSD n’a pas été énormément testé, et devrait être considéré comme bêta comparé aux autres fonctionnalités stables de FreeBSD.

Le support PAE sous FreeBSD a quelques limitations:

  • Un processus est incapable d’accéder à plus de 4 gigaoctets d’espace mémoire.

  • Les modules KLD ne peuvent être chargés dans un noyau avec PAE activé, en raison des différences entre la structure d’un module et du noyau.

  • Les pilotes de périphériques qui n’utilisent pas l’interface bus_dma(9) seront à l’origine de corruption de données avec un noyau PAE et ne sont pas recommandés. Pour cette raison, le fichier de configuration du noyau avec support PAE qui est fourni avec FreeBSD exclut tous les pilotes connus pour ne pas fonctionner avec un noyau avec support PAE.

  • Certains paramètres modifiables du système déterminent l’utilisation des ressources mémoire par la quantité de la mémoire physique disponible. De tels paramètres peuvent être inutilement sur-alloués en raison de la grande quantité de mémoire d’un système PAE. Un bon exemple est le "sysctl" kern.maxvnodes, qui contrôle le nombre maximal de "vnodes" alloués par le noyau. Il est recommandé d’ajuster ce dernier et les autres paramètres du même genre à des valeurs raisonnables.

  • Il pourra être nécessaire d’augmenter l’espace d’adressage virtuel du noyau ("kernel virtual address"-KVA) ou de réduire le montant de la ressource spécifique du noyau qui est fortement utilisée (voir plus haut) afin d’éviter l’épuisement de l’espace KVA. L’option du noyau KVA_PAGES peut être employée pour augmenter l’espace KVA.

Pour des considérations de performance et de stabilité, il est recommandé de consulter la page de manuel tuning(7). La page de manuel pae(4) contient des informations à jour sur le support PAE sous FreeBSD.

8.5. Si quelque chose se passe mal

Il y a cinq types de problèmes qui peuvent survenir lors de la compilation d’un noyau sur mesure. Ce sont:

La commande config échoue

Si la commande config(8) échoue quand vous lui passez en paramètre la description de votre noyau, vous avez probablement fait une simple erreur quelque part. Heureusement config(8) affichera le numéro de la ligne qui lui a posé problème, vous pouvez donc localiser rapidement la ligne contenant l’erreur. Par exemple, si vous avez:

config: line 17: syntax error

Vérifiez que la ligne est correctement écrite, en le comparant avec le noyau GENERIC ou une autre référence.

La commande make échoue

Si la commande make échoue, cela signale habituellement une erreur dans la description de votre noyau, mais qui n’est pas suffisamment sérieuse pour que la commande config(8) la détecte. A nouveau, vérifiez votre fichier de configuration, et si vous n’arrivez toujours pas à résoudre le problème, envoyez un courrier électronique à la liste de diffusion pour les questions d’ordre général à propos de FreeBSD en joignant votre fichier de configuration du noyau, le diagnostic devrait être rapide.

Le noyau ne démarre pas:

Si votre nouveau noyau ne démarre pas, ou ne reconnaît pas vos périphériques, ne paniquez pas! Heureusement, FreeBSD dispose d’un excellent mécanisme pour récupérer si le noyau ne fonctionne pas. Sélectionnez simplement le noyau, à partir duquel vous désirez démarrer, à l’invite du chargeur de FreeBSD. Vous pouvez y accéder quand le menu de démarrage apparaît. Sélectionner l’option 6, "Escape to a loader prompt". A l’invite, tapez unload kernel et ensuite boot /boot/kernel.old/kernel, ou le nom de fichier d’un autre noyau qui pourra démarrer proprement. Quand on reconfigure un noyau, il est toujours bon de conserver à portée de la main un noyau dont on sait qu’il fonctionne.

Après avoir démarré avec un noyau en état de marche, vous pouvez revérifier votre fichier de configuration et essayer de recompiler à nouveau votre noyau. Une ressource utile est le fichier /var/log/messages qui enregistre, entre autres, tous les messages du noyau à chaque démarrage réussi. En outre, la commande dmesg(8) affichera les messages du noyau pour le dernier démarrage.

Si vous avez des difficultés à compiler un noyau, veillez à conserver un noyau GENERIC, ou un autre noyau dont vous savez qu’il fonctionne, sous la main, avec un nom différent de sorte qu’il ne soit pas écrasé à la prochaine compilation. Vous ne pouvez pas faire confiance au noyau kernel.old parce qu’en installant un nouveau noyau, kernel.old est remplacé par le dernier noyau installé dont il n’est pas certain qu’il soit opérationnel. Aussi, dès que possible, déplacez le noyau opérationnel vers le bon emplacement /boot/kernel où des commandes comme ps(1) pourront ne pas fonctionner correctement. Pour cela, renommez le répertoire contenant le bon noyau:

# mv /boot/kernel /boot/kernel.bad
# mv /boot/kernel.good /boot/kernel
Le noyau est opérationnel, mais la commande ps ne fonctionne plus du tout

Si vous avez installé une version du noyau différente de celle avec laquelle ont été compilés les utilitaires système, par exemple, un noyau -CURRENT sur un système -RELEASE, de nombreuses commandes d’affichage de l’état du système comme ps(1) and vmstat(8) ne fonctionneront plus. Vous devrez recompiler et installer un système avec la même version de l’arborescence des sources de celle utilisée pour votre noyau. C’est une des raisons pour lesquelles il n’est pas judicieux d’utiliser des versions différentes du noyau et du reste du système d’exploitation.


Ce document, ainsi que d'autres peut être téléchargé sur https://download.freebsd.org/ftp/doc/

Pour toutes questions à propos de FreeBSD, lisez la documentation avant de contacter <freebsd-questions@FreeBSD.org>.
Pour les questions sur cette documentation, contactez <freebsd-doc@FreeBSD.org>.