Guide de configuration du noyau pour Gentoo Linux
1.
Introduction
Gentoo fournit deux manières de gérer l'installation et la mise à jour de votre
noyau : la méthode automatique (genkernel) et la méthode
manuelle. Bien que la méthode automatique soit vue comme plus
simple pour les utilisateurs, il existe de nombreuses raisons qui font
qu'une large proportion d'utilisateurs de Gentoo choisissent de configurer
manuellement leur noyau : une flexibilité accrue, un noyau moins lourd,
une compilation plus rapide, l'expérience, l'ennui, etc.
Ce guide ne couvrira pas la méthode automatique (genkernel). Si vous désirez
emprunter cette voie pour compiler et installer votre noyau, jetez un œil à
la documentation Genkernel.
Ce manuel n'a pas pour prétention de documenter la configuration manuelle de A
à Z. Le processus de configuration repose sur le bon sens et sur un niveau de
connaissances techniques relativement élevé sur votre système. Mais il
introduira le concept de la configuration manuelle et détaillera les pièges les
plus courants auxquels les utilisateurs font face.
Ce document est écrit pour les noyaux les plus récents, pour les systèmes et
architectures les plus répandus. Certains détails pourront différer pour un
noyau plus ancien ou sur des architectures exotiques, mais la majorité des
informations seront valables pour autant.
À ce point, nous considérons que vous disposez des sources du noyau
décompactées sur votre disque dur (habituellement quelque part dans
/usr/src). Vous devriez savoir comment entrer la commande
menuconfig qui lance l'utilitaire de configuation du noyau et naviguer
dans les différents menus. Si vous n'êtes pas arrivé à ce niveau, d'autres
documentations vous conviendront mieux.
2.
Concepts de configuration
Les bases
Le processus général est en fait assez simple : vous vous trouvez devant
une série d'options, ordonnées en menus et sous-menus et vous devez choisir les
options qui correspondent à votre matériel et à votre système.
Le noyau est fourni avec une configuration par défaut qui vous est
présentée la première fois que vous lancez menuconfig sur un jeu de sources.
Les options par défaut sont généralistes, ce qui signifie que la majorité des
utilisateurs n'aura que peu de changements à faire. Si vous décidez de
désactiver une option qui, par défaut, était activée, soyez sûr de ce que vous
faites, de ce à quoi cette option sert et connaissez les conséquences
engendrées par cette désactivation.
Si c'est votre première configuration manuelle de noyau, vous serez sûrement
conservateur : ne soyez pas trop aventurier et cherchez plutôt à faire le
moins de modifications possible par rapport à la configuration par défaut. En
même temps, gardez à l'esprit que certaines parties de la configuration devront
absolument être modifiées pour que votre système puisse démarrer !
Monolithique contre modulaire
La plupart des options de configuration ont trois états : elles
peuvent être soit désactivées, soit compilées directement dans le noyau (Y),
soit compilées en tant que module (M). Les modules sont enregistrés séparément
du noyau, sur le système de fichiers, alors que les options compilées dans le
noyau sont enregistrées dans l'image du noyau elle-même.
Il existe une différence importante entre la compilation monolithique et
modulaire : sauf quelques exceptions, le noyau ne fait pas de tentative de
chargement d'un module dont vous pourriez avoir besoin (cela reste à la charge
de l'utilisateur). Bien que certaines parties du système possèdent des
fonctions de chargement « à la demande » et bien qu'il existe
certains outils de chargement automatique de modules, il est recommandé de
compiler le support pour votre matériel directement dans le noyau. Ainsi,
celui-ci pourra disposer des fonctionnalités de votre matériel directement et
chaque fois que cela sera nécessaire.
Bien sûr, pour certaines parties de la configuration, le support intégré dans
le noyau sera nécessaire. Par exemple, si votre partition racine est située sur
un système de fichier en ext2, votre système ne pourra pas démarrer si
le support de l'ext2 n'a été activé qu'en module (le système devrait regarder
sur le système de fichiers pour charger le module qui se trouve sur le système
de fichiers, illisible tant que le module n'a pas été chargé !).
Support matériel
Au delà de la détection de votre architecture, l'outil de configuration
ne fait aucune démarche pour identifier le matériel effectivement présent dans
votre machine. Bien qu'il existe des paramètres par défaut pour le support
générique, vous devrez certainement trouver et activer les options qui se
rapportent à la configuration matérielle de votre ordinateur.
Cela requiert que vous sachiez ce qui se trouve dans votre ordinateur et ce qui
y est connecté, ou que vous identifiez ces composants. Pour la plupart des
composants internes, il vous faudra connaître le nom du chipset et non
le nom du revendeur ou du produit en sa version boîte.
Certains outils pourront vous aider. lspci (qui se trouve dans le paquet
sys-apps/pciutils) identifiera vos périphériques situés sur les bus PCI
et AGP, en incluant les composants situés sur la carte mère elle-même.
lsusb (du paquet sys-apps/usbutils) identifiera les périphériques
connectés sur les ports USB.
La situation est rendue confuse par les différents degrés de standardisation
dans le monde du matériel. À moins de vraiment posséder un matériel exotique,
vos disques durs IDE fonctionneront « correctement », de même pour
votre souris et votre clavier PS/2 ou USB. Vous disposerez d'un affichage VGA
basique. Toutefois, certains périphériques comme la carte réseau Ethernet ne
sont pas standardisés du tout. Vous devrez donc identifier votre contrôleur
réseau et activer l'option adéquate dans le noyau pour bénéficier de la
fonctionnalité réseau.
De plus, certaines options par défaut feront que votre matériel fonctionne
« correctement », mais vous devrez activer certaines options plus
spécifiques pour exploiter complètement le potentiel de votre matériel. Par
exemple, si vous n'activez pas le support pour votre chipset IDE, votre disque
fonctionnera très lentement.
Fonctionnalités du noyau
En plus du support du matériel, vous devrez disposer de certaines
fonctionnalités dans le noyau pour vos différents logiciels. Un des exemples
les plus importants est le support des systèmes de fichiers : vous devez
activer le support pour le système de fichiers utilisé sur votre disque dur,
ainsi que tous les systèmes de fichiers que vous utilisez sur vos périphériques
de stockage externes (par exemple, le support du VFAT pour les clefs USB).
Un autre exemple courant est le support du réseau. Si vous désirez implémenter
des choses comme le routage ou le pare-feu (firewalling), vous devrez vous
assurer d'avoir activé certaines options dans votre noyau.
Prêt ?
Maintenant que le concept est introduit, vous devriez être capable de localiser
les options relatives à votre matériel au travers des différents menus et de
sélectionner ces options.
La fin de ce document a pour volonté de lever certaines zones de confusions et
de prodiguer quelques conseils pour éviter les problèmes les plus courants
rencontrés par les utilisateurs Gentoo. Bonne chance !
3.
Problèmes communs et zones de confusion
Les disques SATA sont des disques SCSI
Les ordinateurs de bureau récents possèdent des disques durs et/ou des lecteurs
optiques situés sur un BUS Serial ATA, plutôt que sur
l'ancien BUS IDE
(câble ruban).
Le support SATA de Linux est implémenté sur une couche appelée libata,
qui se situe dans le sous-sytème SCSI. Pour cette raison, les drivers SATA sont
disponibles dans la section « SCSI Device Driver » de l'outil de
configuration du noyau. De plus, votre périphérique de stockage sera considéré
comme un périphérique SCSI, ce qui signifie que l'option « SCSI disk/cdrom
support » est également requise. Votre disque dur SATA sera nommé (par
exemple) /dev/sda et votre lecteur optique SATA sera nommé (par exemple)
/dev/sr0.
Bien que la majorité de ces pilotes SATA soient pour les contrôleurs, libata
n'a pas été créé dans l'unique optique du Serial-ATA. Tous les pilotes IDE
standards seront inclus dans libata dans un futur proche et, dès lors, les
considérations précédentes s'appliqueront aux utilisateurs de bus IDE.
Exemple de code 3.1 : Options de configuration pour libata |
Device Drivers --->
SCSI device support --->
<*> SCSI device support
<*> SCSI disk support
<*> SCSI CDROM support
SCSI low-level drivers --->
<*> Serial ATA (SATA) support
|
Chipsets IDE et DMA
Malgré l'arrivée du SATA, les périphériques IDE sont encore très répandus. IDE
est une technologie très générique et, grâce à cela, Linux supporte la majorité
des contrôleurs IDE même sans la moindre option spécifique activée.
Néanmoins, IDE est une vieille technologie et sa spécification originale de
« Programmed Input/Output » (Entrées/Sorties Programmées) ne permet
pas de fournir des taux de transfert assez rapides pour les périphériques de
stockage les plus récents. Le pilote IDE générique est limité aux modes PIO, ce
qui entraîne des taux de transfert très longs accompagnés d'une charge accrue
du CPU quand les données sont transférées vers/depuis les disques.
À moins que vous ne vous trouviez devant une machine antérieure à 1995, votre
contrôleur IDE supportera un mode de transfert alternatif, appelé DMA :
Direct Memory Access. Le DMA est plus rapide et la charge CPU est moins
affectée durant les transferts de fichiers. Si vous rencontrez des lenteurs
durant l'utilisation de votre système et si celui-ci est équipé d'un disque dur
IDE, il y a de fortes chances pour que le DMA ne soit pas activé.
Note :
Comme mentionné précédemment, libata est disponible même pour les disques IDE.
Si vous utilisez libata, alors tous vos disques, y compris les disques IDE,
utiliseront le DMA. Aucune configuration supplémentaire n'est alors nécessaire.
|
Si vous n'utilisez pas libata pour vos disques IDE, alors vous devrez contrôler
l'utilisation du DMA et l'activer.
Exemple de code 3.2 : Vérification de l'état d'activation du DMA sur le disque IDE |
# hdparm -d /dev/hda
/dev/hda:
using_dma = 0 (off)
|
Pour activer le DMA sur vos périphériques IDE, il vous suffit simplement
d'activer l'option pour votre contrôleur IDE.
Exemple de code 3.3 : Configuration noyau pour activer le DMA sur les contrôleurs IDE |
Device Drivers --->
ATA/ATAPI/MFM/RLL support --->
<*> ATA/ATAPI/MFM/RLL support
<*> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
[*] PCI IDE chipset support
|
Contrôleurs USB
L'USB est un BUS largement
adopté pour la connexion des périphériques externes à votre ordinateur. L'une
des raisons qui se cache derrière ce succès est le protocole de communication
standardisé, même si le contrôleur hôte (host controller devices, HCD)
peut varier légèrement. Il en existe trois types :
-
L'UHCI, pour Universal Host Controller Interface. Il supporte
l'USB 1.1 et se trouve généralement sur les cartes mères à base de chipset
VIA ou intel.
-
L'OHCI, pour Open Host Controller Interface. Il supporte
l'USB 1.1 et se trouve généralement sur les cartes mères à base de chipsets
nVidia ou SiS.
-
L'EHCI, pour Extended Host Controller Interface. C'est le
seul contrôleur hôte à supporter l'USB 2.0 et il se trouve typiquement sur
tous les ordinateurs qui supportent l'USB 2.0.
La plupart des systèmes sont fournis avec deux des interfaces précédemment
citées : EHCI (pour l'USB 2.0) ainsi que UHCI ou OCHI (pour l'USB 1.1). Il
est important de choisir les deux types présents sur votre machine dans les
options du noyau. Puisque les périphériques USB 2.0 sont rétro-compatibles avec
l'USB 1.1, une large proportion des périphériques USB (même ceux fabriqués de
nos jours) sont basés sur des interfaces USB 1.1 — pourquoi une souris
aurait-elle besoin d'un taux de transfert supérieur à 1.5 Mbit/sec ?
Si vous ne sélectionnez pas les options correspondant aux deux types de
contrôleurs présents dans votre ordinateur, vous pourriez rencontrer le
syndrome des ports USB « morts » : vous connectez le
périphérique mais celui-ci ne s'allume pas ni ne répond.
Une astuce élégante de lspci permet de détecter facilement quels types
de HCD sont présents dans votre système. En ignorant le contrôleur Firewire
qui répond également, nous pouvons constater que ma machine nécessite le
support pour les contrôleurs OHCI et EHCI :
Exemple de code 3.4 : Utilisation de lspci pour détecter le type de contrôleur USB |
# lspci -v | grep HCI
00:02.0 USB Controller: nVidia Corporation CK804 USB Controller (rev a2) (prog-if 10 [OHCI])
00:02.1 USB Controller: nVidia Corporation CK804 USB Controller (rev a3) (prog-if 20 [EHCI])
01:0b.0 FireWire (IEEE 1394): Agere Systems FW323 (rev 61) (prog-if 10 [OHCI])
|
Exemple de code 3.5 : Configuration des contrôleurs hôtes USB |
Device Drivers --->
USB support --->
<*> Support for Host-side USB
--- USB Host Controller Drivers
<*> EHCI HCD (USB 2.0) support
<*> OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support
|
Systèmes multiprocesseurs, Hyper-Threading et double cœurs
Bien des systèmes sont basés sur des processeurs multiples, mais pas toujours
de manière évidente.
-
De nombreux processeurs Intel se basent sur une technologie appelée l'Hyper-Threading,
dans laquelle le processeur est en fait vu par le système comme deux
processeurs logiques.
-
Certains processeurs récents d'Intel et d'AMD sont constitués de plusieurs
processeurs rassemblés en un seul et unique, connus sous le nom de
processeurs double
cœurs (ou dual core).
-
Certains ordinateurs sont constitués de plusieurs processeurs
physiques, installés sur des cartes mères qui fournissent plusieurs
emplacements pour les processeurs, ce qui permet d'obtenir des performances
bien au-delà de ce que peut fournir un système uniprocesseur.
Dans tous ces cas, vous devrez sélectionner l'option appropriée dans le noyau,
pour obtenir des performances optimales.
Exemple de code 3.6 : Configuration pour multiprocesseurs |
Processor type and features --->
[*] Symmetric multi-processing support
[*] SMT (Hyperthreading) scheduler support
[*] Multi-core scheduler support (NEW)
Power management and ACPI options --->
[*] ACPI (Advanced Configuration and Power Interface) Support
|
Support de la mémoire haute en x86
Des limitations dans l'adressage 32 bits des architectures x86 font qu'un
noyau avec la configuration par défaut ne peut supporter que 896 Mo de
RAM. Si votre système possède plus de mémoire, seuls 896 Mo seront
visibles, si vous n'activez pas l'option « High Memory Support ».
Note :
Cette limitation est spécifique à l'architecture x86 (IA32). Les autres
architectures supportent nativement de plus grandes quantités de mémoire, sans
configuration spéciale nécessaire.
|
Le support de cette mémoire haute n'est pas activé par défaut, parce qu'il
induit une légère surcharge du système. Ne soyez pas effaré par ceci, la
surcharge est insignifiante comparée à l'accroissement de la performance
qu'apporte la disponibilité d'une grande quantité de mémoire.
Exemple de code 3.7 : Activation du support de la mémoire haute sur x86 |
Processor type and features --->
High Memory Support --->
(X) 4GB
( ) 64GB
|
4.
Autres documentations relatives à la configuration du noyau
Jusqu'ici, nous n'avons discuté que de concepts généraux et de problèmes
spécifiques liés à des problèmes de configuration, sans entrer en profondeur
dans les détails (des détails que par ailleurs vous devrez découvrir par
vous-même). Néanmoins, d'autres parties de la Documentation Gentoo fournissent
toute un ensemble de détails spécifiques pour ces sujets.
Vous trouverez ces documents très utiles lorsque vous configurerez précisement
votre noyau, mais, si vous êtes nouveau dans ce domaine, ne soyez pas trop
téméraire. Commencez par obtenir un système fonctionnel et stable, vous pourrez
toujours revenir sur vos pas dans le futur pour activer les supports
spécifiques comme la carte son, l'imprimante, etc.
-
Le Guide ALSA détaille les options
de configuration nécessaires pour la carte son. Notez qu'ALSA est une
exception à la règle qui recommande de compiler les pilotes dans le
noyau : ALSA est plus simple de configuration lorsqu'il est compilé en
tant que modules.
-
Le Guide Bluetooth détaille
les options de configuration nécessaires pour l'utilisation de
périphériques Bluetooth sur votre système.
-
Le Guide du routeur IPv6 décrit comment
configurer votre noyau pour les fonctionnalités de routage, en utilisant
l'adressage réseau de nouvelle génération.
-
Si vous comptez utiliser le pilote propriétaire de nVidia pour disposer de
fonctionnalités 3D avancées, le Guide
nVidia liste les options de configuration nécessaires qu'il faudra
activer ou non au niveau du noyau.
-
Parmi les sujets traités, le Guide de la gestion
d'énergie explique comment configurer le noyau pour la fonctionnalité
« CPU Frequency Scaling », qui permet d'ajuster la fréquence du
processeur afin d'économiser de l'énergie, ainsi que pour bénéficier des
fonctionnalités d'hibernation et de suspension.
-
Si vous utilisez un système de type PowerPC, la FAQ PPC possède quelques sections
qui traitent de la configuration du noyau.
-
Le guide Imprimer sous Gentoo
liste les options du noyau nécessaires pour pouvoir imprimer sour Linux.
-
Le Guide USB détaille la
configuration requise pour l'utilisation des périphériques USB les plus
courants comme les claviers, souris, disques durs externes, clefs USB ou
les imprimantes.
5.
Résolution de problèmes
Les changements de configuration n'ont aucun d'effet
Il est très courant pour les utilisateurs de faire des changements dans la
configuration, mais de faire une légère erreur dans le processus qui suit cette
modification. Par exemple, il arrive souvent qu'ils redémarrent sur une image
du noyau qui n'est pas celle qui vient d'être modifiée. Ils constatent alors
que le problème est toujours présent et en concluent trop rapidement que la
modification n'a pas apporté d'amélioration.
Le processus de compilation et d'installation du noyau est hors de la portée de
cette documentation. Vous devrez vous réferer au Guide de mise à jour du noyau pour une
aide générale. En bref, le processus est le suivant : configuration,
compilation, montage de /boot (si ce n'est pas déjà fait), copie du nouveau
noyau et redémarrage. Si vous oubliez l'une de ces étapes, vos changements ne
seront pas pris en compte !
Il est possible de vérifier si le noyau sur lequel vous avez démarré est celui
compilé sur le disque dur en examinant la date et l'heure de compilation.
Admettons que votre architecture soit x86 et que vos sources de noyau soient
situées dans /usr/src/linux :
Exemple de code 5.1 : Vérification du noyau sur lequel vous avez démarré |
# uname -v
#4 SMP PREEMPT Sat Jul 15 08:49:26 BST 2006
# ls -l /usr/src/linux/arch/i386/boot/bzImage
-rw-r--r-- 1 dsd users 1504118 Jul 15 08:49 /usr/src/linux/arch/i386/boot/bzImage
|
Si les deux dates issues des commandes ci-dessus diffèrent de plus de deux
minutes, il est probable que la version de votre noyau ne soit pas celle que
vous avez dernièrement compilée.
Les modules ne sont pas chargés automatiquement
Comme vous l'avez vu plus haut dans ce document, le système de configuration du
noyau cache un changement de comportement important lorsque vous préférez la
compilation en tant que module (M) à la compilation directement dans le noyau
(Y). Il est nécessaire que l'on répète cela ici parce que de nombreux
utilisateurs passent à côté de cette notion importante.
Quand vous sélectionnez un composant comme faisant partie intégrante du noyau
(par rapport au choix « Module »), le code est compilé dans l'image
du noyau (bzImage). Quand le noyau a besoin de faire appel à celui-ci, il peut
le charger et l'initialiser automatiquement, sans intervention de
l'utilisateur.
Quand au contraire vous choisissez que ce composant soit un module, le code est
compilé et installé en tant que fichier sur votre système de fichiers. En
général, quand le noyau a besoin d'utiliser ce module, il ne le peut pas !
À quelques exceptions près, le noyau ne fait aucun effort pour tenter de
localiser et de charger le module correspondant — cette tâche incombe à
l'utilisateur.
Donc, si vous compilez le support de votre carte réseau en tant que module et
que vous constatez que vous ne pouvez pas accéder au réseau, c'est probablement
que le module de votre carte n'est pas chargé. Vous devez le charger
manuellement ou configurer votre système pour qu'il le charge automatiquement
au démarrage.
Sauf si vous avez des raisons de procéder autrement, vous devriez économiser du
temps en intégrant directement le module dans l'image du noyau (en choisissant
Y plutôt que M), de telle sorte que le noyau puisse y accéder directement et
puisse faire les choses automatiquement pour vous.
Ce document est protégé par la licence Creative
Commons : Paternité - Partage des Conditions Initiales à
l'Identique 2.5.
|