« Compiler le noyau » : différence entre les versions

De Lea Linux
Aller à la navigation Aller à la recherche
(balises code)
 
(50 versions intermédiaires par 13 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
[[Category:Configurer votre noyau]]
[[Catégorie:Noyau et modules]]
= Le noyau (kernel) de Linux : le compiler =


''en cours de réécriture''
= Compiler le noyau =


<div class="leatitre">Le noyau (kernel) de Linux : le compiler</div><div class="leapar">par Jean-Christophe</div><div class="leadesc">Où vous apprendrez à compiler votre noyau Linux sans soucis.</div>
par Jean-Christophe
----


Si vous ne savez pas ce qu'est le noyau, allez voir le glossaire !
vous apprendrez à compiler votre noyau Linux sans soucis.</div>


== D'abord, quelle est la version actuelle du noyau ? ==
== Quelques rappels ==
Le noyau est le cœur du système. C'est lui qui fait l'interface entre vos applications et votre matériel. Par exemple, il gère la mémoire, donne l'ordre d'exécution des tâches sur le(s) processeur(s), interagit avec vos périphériques via les pilotes matériels (souris, claviers, etc), s'occupe du réseau, ...


C'est facile, il suffit de lancer <tt>uname -sr</tt> pour avoir la réponse.
Le noyau (<em>kernel</em> en anglais) est composé d'une partie statique à laquelle on peut dynamiquement greffer des <em>modules</em>. La partie statique est utilisée lors du démarrage de votre ordinateur et sera toujours chargée en mémoire, tandis que les modules peuvent être chargés seulement une fois la machine démarrée et uniquement en cas de besoin.


'''Note sur la numérotation des noyaux :'''<br />Les noyaux sont numérotés sur 3 nombres x.y.z.
== Pourquoi Compiler son noyau ? ==
 
* Versions stables : le nombre du milieu (y) est pair. Par exemple : 2.'''2'''.11 ou 2.'''4'''.19.
* Versions de développement : le nombre du milieu (y) est impair, par exemple 2.'''3'''.35 ou 2.'''5'''.40. Attention, il n'est pas recommandé à des utilisateurs peu expérimentés d'utiliser un noyau d'une version de développement, car ces noyaux ne sont pas - a priori - stables.
 
----
 
== Vous avez besoin d'un nouveau noyau si : ==


Vous avez besoin d'un nouveau noyau si :
* vous avez un matériel dont le support a été ajouté dans une nouvelle version du noyau,
* vous avez un matériel dont le support a été ajouté dans une nouvelle version du noyau,
* un trou de sécurité a été découvert dans le noyau actuel, ce problème étant réglé dans une nouvelle version,
* un trou de sécurité a été découvert dans le noyau actuel, ce problème étant réglé dans une nouvelle version,
* vous souhaitez disposer d'une fonctionnalité qui n'est pas encore dans la branche principale du noyau (par exemple ajouter le support du temps réel afin de réduire les temps de latences d'une carte son, pour faire de la musique).
* vous souhaitez toujours avoir le dernier noyau possible :)
* vous souhaitez toujours avoir le dernier noyau possible :)
* comme tout bon Geek, vous aimez compiler votre kernel ;)
* comme tout bon Geek, vous aimez compiler votre kernel ;)


'''''La plupart du temps, vous n'avez pas réellement besoin de nouveau noyau.'''''<br />'' ''<br />Vous pouvez récupérer la dernière version du noyau (ainsi que toutes les autres) sur '''[http://www.kernel.org kernel.org]''', ou  plutôt depuis le [http://www.kernel.org/mirrors miroir] le plus proche de vous.
La plupart du temps, vous n'avez pas réellement besoin d'un nouveau noyau. Il serait suffisant de rester à jour avec votre distribution puisque celle-ci s'occupe des logiciels qui ont des problèmes de sécurité ou des bugs.
 
----
 
== Installation d'un noyau précompilé ==
 
Lorsque votre distribution vous propose un package de mise à jour du noyau précompilé, vous pouvez l'installer. C'est souvent recommandé, car ces mises à jour concernent soit des bugs, soit des trous de sécurité importants. <br />On reconnaît les packages RPM de tels noyaux à leur nom, en général de la forme : <tt>kernel-2.*.*.i?86.rpm</tt>.
 
Je vous conseille, pour le noyau précompilé, de ne pas mettre à jour votre distribution avec le package d'une autre distribution. Si la version que vous désirez n'est pas disponible pour votre distribution, passez plutôt par la compilation des sources (voir ci-dessous).
 
<u>Attention</u>, si vous installez un package RPM : il ne faut '''jamais''' mettre à jour un noyau par l'intermédiaire de la commande "<tt>rpm -U</tt>" (upgrade). Cette commande supprimera votre noyau actuel. Si le nouveau noyau ne fonctionne pas, il ne vous restera plus qu'à réinstaller votre système :-( <br />En fait, il faut installer (et non mettre à jour) le nouveau noyau par l'intermédiaire de la commande "<tt>rpm -i kernel-2.x.x.i586.rpm</tt>".
 
----
 
== Aide-mémoire rapide ==
 
Voici en quelques lignes les étapes à réaliser pour configurer, compiler et installer un noyau. Connectez-vous en tant que root et réalisez les étapes suivantes :
 
* <tt>cd /usr/src/linux</tt>
* Configuration :
** <tt>make xconfig</tt> (graphique) ou :
** <tt>make menuconfig</tt> (mode texte avec menus) ou encore :
** <tt>make config</tt> (mode texte intégral) 
* Compilation :
** <tt>make dep</tt>
** <tt>make bzImage</tt>
** <tt>make modules</tt> 
* Installation (les lignes suivantes sont à adapter à votre configuration, à la version du noyau...) :
** <tt>make modules_install</tt>
** <tt>mv /boot/vmlinuz-2.4.18 /boot/vmlinuz-2.4.18.old</tt>
** <tt>cp arch/boot/i386/bzImage /boot/vmlinuz-2.4.18</tt>
** <tt>mv /boot/System.map-2.4.18 /boot/System.map-2.4.18.old</tt>
** <tt>cp System.map /boot/System.map-2.4.18</tt>
** <tt>mkinitrd</tt> (si votre distribution utilise un RAM disque initial)
** Gestionnaire de boot :
*** Si vous utilisez Lilo : éditez éventuellement <tt>/etc/lilo.conf</tt> pour mettre à jour avec la nouvelle version ou ajouter une entrée, puis lancez <tt>/sbin/lilo</tt>
*** Si vous utilisez Grub : lancez <tt>grub root (hdC,P) setup (hd0)</tt>, en remplaçant C par le numéro du disque (hda:C=0, hdb:C=1, etc.) et P par le numéro de partition sur ce disque (hdx1:P=0, hdx2:P=1, etc.) 
* Fin :-)
 
----
 
'''And last, but not least...'''
 
== Comment compiler mon propre noyau ? ==
 
'''pré requis :'''
 
* vous avez installé un environnement de compilation complet (<tt>gcc</tt> et consorts) ; cet environnement est disponible sur votre distribution, reportez vous à la rubrique [../install/install.php3#pack installation].
 
Vous devez être '''<tt>root</tt>''' pour faire tout ce qui suit. Dans cet exemple, nous installerons le noyau 2.2.13.
 
Une contribution : [kernel_debian.php3 compiler un noyau à la sauce '''Debian''']. à lire si vous utilisez cette distribution.
 
----
 
== Installation des sources du noyau ==
 
'''Archive au format <font size="+1">rpm</font>'''<br />Si vous avez installé le noyau avec le rpm de votre distribution, vous devez également installer le rpm des sources ainsi que celui des en-têtes (headers).
 
'''Archive au format <font size="+1">.tar.bz2</font> ou <font size="+1">.tar.gz</font>'''<br />Tant que vous y êtes, récupérez l'archive contenant la dernière version du noyau si vous le souhaitez (attention, ces fichiers sont volumineux, dans les 14 Mo pour les derniers noyaux), puis décompressez là au bon endroit en suivant les indications suivantes :<br /><tt>'''[root@taz root]#''' cd /usr/src/<br />'''[root@taz src]#''' ls -l<br /><font size="-1">total 4 <br /> lrwxrwxrwx  1 root  root      12 Jun 20 22:23 linux -> linux-2.2.10/<br /> drwxr-xr-x  15 root  root    1024 Jun 20 22:38 linux-2.2.10/<br /> drwxr-xr-x  15 root  root    2048 Jun 16 19:52 linux-2.2.9/<br /> drwxr-xr-x  7 root  root    1024 Jul  7 16:57 RPM/</font></tt><br />
 
En général, <tt>/usr/src/linux</tt> représente un lien vers le répertoire courant contenant les sources, ici <tt>linux-2.2.10</tt>. Dans ce cas, faites :<br /><tt>'''[root@taz src]#''' rm -f linux</tt><br /> Dans le cas où linux est un répertoire (pas un lien), renommez le : <tt>mv linux linux-2.x.x</tt>, où 2.x.x est la version de votre noyau.
 
Puis faites :<br /><tt>'''[root@taz src]#''' tar jxvf /chemin/de/linux-2.2.13.tar.bz2</tt> ou<br /><tt>'''[root@taz src]#''' tar zxvf /chemin/de/linux-2.2.13.tar.gz</tt>
 
A ce moment là, un répertoire <tt>linux</tt> a été créé, qui contient les sources de Linux 2.2.13. Afin de recréer un environnement propre, je vous suggère de renommer ce répertoire en <tt>linux-2.2.13</tt> et de créer un lien <tt>linux</tt> qui pointe dessus :<br /><tt>'''[root@taz src]#''' mv linux linux-2.2.13<br />'''[root@taz src]#''' ln -s linux-2.2.13 linux</tt><br />
 
<u>Remarque</u> : Le lien <tt>/usr/src/linux</tt> est nécessaire à la compilation du noyau et afin que les fichier d'entêtes (les "includes") du noyau soient disponibles pour des compilations futures d'applications.
 
----
 
== Phase de configuration du noyau ==
 
Placez vous dans le répertoire des sources /usr/src, puis lancez les commandes suivantes :
 
<tt>'''[root@taz src]#''' cd linux</tt><br />
 
<tt>'''[root@taz linux]#''' make mrproper</tt> (ça nettoie l'arborescence des sources)<br /><br />''pour une configuration en mode graphique :''<br /><br /><tt>'''[root@taz linux]#''' make xconfig</tt><br /><br />''ou pour une configuration en mode texte avec menus (ncurses) :''<br /><br /><tt>'''[root@taz linux]#''' make menuconfig</tt><br /><br />''ou pour une configuration en mode texte pur (longue suite de questions/réponses) :''<br /><br /><tt>'''[root@taz linux]#''' make config</tt><br />
 
(voir les annexes pour la manipulation de [#menuconfig menuconfig] et de [#xconfig xconfig]).
 
Le moment est venu de choisir vos options. <br />Si c'est la première fois que vous compilez le noyau, je vous conseille de les passer toutes en revue les unes après les autres, dans l'ordre, afin de voir si elles s'appliquent à vous ou non. Pour en savoir plus, vous pouvez demander de l'aide pour chaque option (touche [H] dans la console ou bouton [Help] sous X). Reportez vous aussi à l'[#options annexe sur les options] pour avoir une aide afin de les choisir.
 
Je vous conseille de '''sauvegarder''' votre config dans un fichier pour la réutiliser plus tard. Par exemple, sauvegardez là dans <tt>/root/kernel.config-2.2.13</tt>. Ainsi vous pourrez recompiler le noyau en rechargeant cette config, et n'ajuster que les paramètres nécessaires. De plus, même en cas de montée de version du noyau, vous pourrez réutiliser ce fichier de config qui reste compatible (et vérifier les nouvelles options, bien sûr).
 
----
 
== Phase de compilation du noyau et des modules ==
 
Sauvez et quittez, puis lancez les commandes qui vont vraiment compiler le noyau :<br /><tt>'''[root@taz linux]#''' make dep clean bzImage modules modules_install</tt><br /> pour tout compiler en une fois et installer.
 
ou :<br /><tt>'''[root@taz linux]#''' make dep <br />'''[root@taz linux]#''' make clean <br />'''[root@taz linux]#''' make bzImage</tt><br /> pour compiler le noyau lui-même, et pour compiler et installer les modules (i.e. les drivers) :<br /><tt>'''[root@taz linux]#''' make modules <br />'''[root@taz linux]#''' make modules_install</tt> Les modules seront installés dans le répertoire '''<tt>/lib/modules/2.2.13/</tt>'''.
 
<u>Remarque</u> : Si vous voulez juste recompiler le noyau, sans monter de version, je vous conseille de déplacer le répertoire <tt>/lib/modules/2.x.x</tt> (remplacez par votre version) vers <tt>/lib/modules/old-2.x.x</tt> par exemple, avant la phase de compilation, afin que l'installation des modules recrée ce répertoire et y place les nouveaux modules : cela vous épargnera des problèmes si la nouvelle configuration du noyau a modifié celle des modules. <br />Si tout fonctionne correctement après le redémarrage, vous pourrez supprimer <tt>/lib/modules/old-2.x.x</tt>.
 
----
 
== Installation du nouveau noyau ==
 
Remarque sur '''initrd''' :
 
* La plupart des distributions récentes utilisent souvent par défaut un disque RAM initial (initrd) afin de démarrer le système. Ce n'est pas nécessaire en général, sauf si votre système de fichiers racine <tt>/</tt> a besoin de modules pour être chargé (par exemple, s'il se trouve sur un disque SCSI, et que le support SCSI est en modules). Si vous incluez les modules nécessaires au chargement de votre système de fichiers racine (en répondant <tt>Y</tt> au lieu de <tt>M</tt>), vous pouvez vous passer d'initrd.
* Si vous utilisez initrd, n'oubliez pas de le '''regénérer''' avec la commande <tt>mkinitrd</tt> avant de lancer LILO ou de redémarrer avec LOADLIN.
 
=== Installation avec LILO ===
 
Nous allons modifier <tt>/etc/lilo.conf</tt> pour bouter sur votre nouveau noyau en tapant "<tt>linux</tt>" et sur l'ancien en tapant "<tt>old</tt>". Nous conserverons l'ancien noyau, ce qui permet de revenir à l'ancienne configuration si quelque chose se passe mal en boutant le nouveau noyau.
 
Voici un exemple de ce à quoi nous aboutissons :<br /><tt>boot=/dev/hda<br /> # ''remplacez hda par le disque<br /> # où vous installez LILO<br /> ''map=/boot/map<br /> install=/boot/boot.b<br /> prompt<br /> timeout=15<br /> image=/boot/vmlinuz-2.2.13<br />        label=linux<br />        root=/dev/hdb1<br />          # ''remplacez hdb1 par<br />          # votre partition racine<br /> ''        read-only<br /> image=/boot/vmlinuz-2.2.10<br />        label=old<br />        root=/dev/hdb1<br />        read-only</tt>
 
Ensuite, placez vous dans <tt>/usr/src/linux</tt>, et installez le nouveau noyau par la commande suivante : <tt>'''[root@taz linux]#''' make install</tt>
 
Cela copie le noyau et le fichier <tt>System.map</tt> dans le répertoire <tt>/boot</tt>, puis lance <tt>lilo</tt> afin de prendre en compte les changements que nous avons apporté à <tt>/etc/lilo.conf</tt>.
 
Si tout s'est bien passé, vous n'avez plus qu'à rebouter :<br /><tt>'''[root@taz linux]#''' reboot</tt>
 
Au prompt LILO, tapez 'linux' pour démarrer le nouveau noyau, et si cela ne fonctionne pas 'old' pour démarrer l'ancien noyau et aller corriger ce qui ne va pas (c'est à ce moment que vous serez content d'avoir sauvegardé les informations de configuration du noyau dans un fichier :).
 
=== Installation avec GRUB ===
 
Note : le fichier de configuration de Grub est <tt>/boot/grub.lst</tt><br /> Vous devez copier le noyau et System.map dans /boot comme décrit plus haut (voir [#rapide aide mémoire rapide]) :
 
Déterminez le nom de l'image noyau (ici vmlinuz) dans le fichier de configuration de Grub. Puis copiez le noyau :<br /><tt>mv /boot/vmlinuz-2.4.18 /boot/vmlinuz-2.4.18.old<br /> cp arch/<architecture>/boot/bzImage /boot/vmlinuz-2.4.18</tt><br /> avec <architecture> étant égal à <tt>i386</tt> pour un PC compatible Intel, <tt>ppc</tt> pour un Macintosh PowerPC, etc.<br /><tt>mv /boot/System.map-2.4.18 /boot/System.map-2.4.18.old</tt> <tt>cp System.map /boot/System.map-2.4.18</tt>
 
Remarque : ces instructions sont valables quelque soit le chargeur de démarrage...
 
Enfin, pour faire prendre en compte la nouvelle image noyau à Grub, tapez :<br /><tt>grub root (hdC,P) setup (hd0)</tt><br /> En remplaçant C par le numéro du disque dur, selon la correspondance suivante : hda:C=0, hdb:C=1, hdc:C=2, etc. et P par le numéro de partition sur le disque, c'est à dire hdx1:P=0, hdx2:P=1, hdx3:P=2, etc.
 
=== Installation avec LOADLIN ===
 
Placez vous dans <tt>/usr/src/linux</tt>, et copiez <tt>System.map</tt> dans <tt>/boot</tt> sous le nom <tt>System.map-2.2.13</tt>, effacez le lien <tt>/boot/System.map</tt>, puis recréez le sur <tt>System.map-2.2.13</tt> :<br /><tt>'''[root@taz linux]#''' cp System.map /boot/System.map-2.2.13<br />'''[root@taz linux]#''' rm -f /boot/System.map<br />'''[root@taz linux]#''' ln -s /boot/System.map-2.2.13 /boot/System.map</tt>
 
Copiez le noyau vers l'endroit ou vous avez l'habitude de le faire (en général dans le premier disque DOS, par exemple dans <tt>C:\LINUX</tt>), monté par exemple dans <tt>/mnt/dosc</tt> :<br /><tt>'''[root@taz linux]#''' cp arch/i386/boot/bzImage /mnt/dosc/linux/vmlinuz2</tt>
 
Si vous utiliser initrd, regénérez-le :<br /><tt>'''[root@taz linux]#''' mkinitrd<br />'''[root@taz linux]#''' cp /boot/initrd /mnt/dosc/linux/initrd2</tt>
 
Reboutez sous DOS, et démarrez Linux par :<br /><tt>C:\>LOADLIN vmlinuz2 root=/dev/hdb1 ro</tt><br /> (remplacez <tt>/dev/hdb1</tt> par votre partition racine).
 
Ou si vous utilisez initrd : <tt>C:\>LOADLIN c:\linux\vmlinuz2 initrd=c:\linux\initrd2</tt>
 
<center>'''<font size="+2">The end...</font>'''</center>
----
 
== Annexe : copies d'écran ==
 
<tt>make menuconfig</tt> donne l'écran suivant :
 
L'écran suivant contient la liste des sous-menus de configuration. <br />Déplacez vous avec les flèches, et tapez 'Entrée' pour entrer dans chaque sous-menu. <br />
 
{|
| bgcolor="#CCCCCC" | <tt><font size="-2"> Linux Kernel v2.2.13 Configuration<br />  ------------------------------------------------------------------------------<br />  +------------------------------- Main Menu -------------------------------<br />  |  Arrow keys navigate the menu.  <Enter> selects submenus --->.          |<br />  |  Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes, |<br />  |  <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help.    |<br />  |  Legend: [*] built-in  [ ] excluded  <M> module  < > module capable    |<br />  | +---------------------------------------------------------------------+ |<br />  | |          Code maturity level options  --->                        | |<br />  | |          Processor type and features  --->                        | |<br />  | |          Loadable module support  --->                            | |<br />  | |          General setup  --->                                      | |<br />  | |          Plug and Play support  --->                              | |<br />  | |          Block devices  --->                                      | |<br />  | |          Networking options  --->                                  | |<br />  | |          SCSI support  --->                                        | |<br />  | |          Network device support  --->                              | |<br />  | |          Amateur Radio support  --->                              | |<br />  | |          IrDA subsystem support  --->                              | |<br />  | |          ISDN subsystem  --->                                      | |<br />  | |          Old CD-ROM drivers (not SCSI, not IDE)  --->              | |<br />  | |          Character devices  --->                                  | |<br />  | |          Filesystems  --->                                        | |<br />  | |          Console drivers  --->                                    | |<br />  | |          Sound  --->                                              | |<br />  | |          Kernel hacking  --->                                      | |<br />  | |          ---                                                      | |<br />  | |          Load an Alternate Configuration File                      | |<br />  | |          Save Configuration to an Alternate File                  | |<br />  | |                                                                    | |<br />  | +---------------------------------------------------------------------+ |<br />  +-------------------------------------------------------------------------+<br />  |                    <Select>    < Exit >    < Help >                    |<br />  +-------------------------------------------------------------------------</font></tt><br />
|}
Sur les écrans déplacez vous avec les flèches, tapez 'Y' pour include une fonction, 'M' pour l'inclure en tant que module. Tapez '?' ou 'H' pour avoir de l'aide sur la fonction sélectionnée (je vous recommande de lire l'aide de chaque fonction, et si vous ne comprenez pas, prenez la valeur conseillée). Tapez 'Esc' afin de sortir d'un sous-menu.
 
 
Après avoir configuré votre noyau, sélectionnez "Save Configuration to an Alternate File", afin d'enregistrer le fichier de configuration et de pouvoir le réutiliser ultérieurement. Enfin, quittez en pressant 'Esc' et enregistrez la configuration.
 
<tt>make xconfig</tt> donne la fenêtre suivante :
 
[[Image:kernel-make_xconfig.png]]
 
Ce premier écran contient des boutons qui mènent aux différents sous-menus de configuration : <br />
 
{|
|
[[Image:kernel-make_xconfig2.png]]
| Pour chaque option, cliquez sur le bouton [Help] afin de lire la documentation de l'option.  <br />Après avoir configuré votre noyau, sélectionnez "Store Configuration to File", afin d'enregistrer le fichier de configuration et de pouvoir le réutiliser ultérieurement. Enfin, quittez en pressant 'Esc', et enregistrez la configuration.
|}
 
----
 
== Annexe : quelles options choisir ==
 
Je ne vais bien sûr pas pouvoir vous donner ici toutes les options dont vous allez avoir besoin, néanmoins celles qui sont nécessaires en général, ainsi que les options permettant de résoudre un cas particulier seront citées ci-dessous.
 
Afin de choisir vous-même vos options, passez les en revue l'une après l'autre dans l'ordre, en consultant si besoin l'aide disponible pour chacune d'entre elles. Si vous ne comprenez pas l'anglais, une traduction de l'aide existe en français à l'adresse http://www.linux-kheops.com/traduc/kernels/. Remplacez le fichier <tt>/usr/src/linux/Documentation/Configure.help</tt> par le fichier traduit.
 
'''Aller plus loin''' : si vous désirez comprendre un peu mieux "comment ça marche", lisez les documents présents dans le répertoire '''<tt>/usr/src/linux/Documentation</tt>'''. Ils sont souvent très intéressants.
 
=== Options "générales" ===
 
<u>Résumé</u> :
 
Il faut répondre '''<tt>Y</tt>''' à la question du support des '''modules''', ainsi qu'à celle du chargement automatique des modules par le kernel (<tt>kerneld Y</tt>), sinon vous devrez les monter en mémoire à la main !
 
De manière générale, il est bon de modulariser un maximum de choses, mais tout n'est pas possible (enfin... pas simplement :) <br />Par exemple, vous ne devriez pas mettre en module ce qui vous permet de monter votre partition racine. Si celle-ci se situe sur un disque IDE, ne mettez pas le support IDE en module, de même si elle se situe sur un disque SCSI, ne mettez pas le support SCSI en module. Si votre partition racine est montée par le réseau et NFS (cas des stations diskless par exemple), ne mettez pas le support de la carte réseau et le support NFS en modules. <br />En effet, les modules sont chargés après le noyau, et si les modules IDE sont sur un disque IDE, il faut d'abord les charger avant de pouvoir accéder au disque, mais pour les charger, il faut avoir accès au disque et donc les avoir chargés avant... vous voyez le cercle vicieux ? <br />En fait, il est possible de contourner ce problème, mais ce document s'adresse aux débutants...
 
Tout le reste peut être compilé en modules, c'est à dire carte son, carte réseau (sauf si votre racine est déportée sur un serveur NFS comme dit précédemment), le port parallèle, le support ppp (pour internet par modem), le CD-ROM, etc. <br />Si vous avez du matériel PnP et que vous voulez utiliser le support PnP de Linux,  passez tous les drivers pour ces cartes en modules aussi et configurez votre PNP (voir la [../hardware/pnp.php3 rubrique Plug'n Play] afin de configurer ensuite les modules dans <tt>/etc/conf.modules</tt>).
 
Voici ci-dessous les options '''classiques''' à utiliser pour une configuration classique. Si rien n'est dit ici à propos d'une option, regardez l'aide ou conservez la valeur par défaut ; vous pouvez aussi répondre 'N' à tous les périphériques que vous ne possédez pas, comme par exemple, IDE/ATAPI TAPE, etc.
 
==== Code maturity level options ====
 
<blockquote><tt>Prompt for development and/or incomplete code/drivers : Y</tt> Ca n'engage à rien :)</blockquote>
 
==== Processor type and features ====
 
<blockquote>définissez ici votre type de processeur, la quantité de mémoire vive maxi que vous voulez gérer <tt>Math emulation                        N<br />  Si vous avez un processeur x86<br /> MTRR                                  Y<br />  une chtite optimisation<br /> Symmetric multi-processing support    N<br />  c'est l'option pour les multi processeurs !</tt> </blockquote>
 
==== Loadable module support ====
 
<blockquote><tt>Enable loadable module support        Y<br /> Set version information on all symbols for modules : Y<br /> Kernel module loader                  Y</tt><br /> </blockquote>
 
==== General setup ====
 
<blockquote><tt>Networking support                    Y<br />  même si vous ne faites ni réseau ni internet<br /> PCI support                            Y<br />  évidemment<br /> Advanced Power Management BIOS support Y<br />  si vous avez un portable ca peut être utile</tt> <u>Remarque</u> (merci Fred !) : le support du BIOS APM n'est pas utile qu'au portable ! Si en plus vous cochez "<tt>Make CPU Idle when IDLE</tt>" : quand votre PC ne fait rien, il refroidit. Ca permet d'''overclocker'' un CPU sans acheter de ventilateur plus gros ! (en fait sur les sites d'overclockeur on trouve des programmes en shareware qui font la même chose !) Ca n'a aucun impact (notable) sur le PC sinon que chaque fois qu'il ne fait rien, Linux le dit au processeur qui fait ce qu'il faut !
 
Sinon pour les autres options, laissez la valeur par défaut ou bien lisez l'aide jointe.
 
</blockquote>
 
==== Plug and Play support ====
 
<blockquote><tt>Plug and Play support                  Y<br />  si vous souhaitez utilisez le PnP de Linux<br /> Auto-probe for parallel devices        M<br />  permet de tester les perifs sur le port //</tt><br /> </blockquote>
 
==== Block devices ====
 
<blockquote><tt>Normal PC floppy disk support          Y<br /> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support  Y<br />    Include IDE/ATA-2 DISK support      Y<br />    Include IDE/ATAPI CDROM support    Y<br />        à moins que vous ayez un CD non IDE</tt><br /> Et si vous connaissez le chipset qui est sur votre carte mère, vous pouvez choisir les options correspondantes. Dans le doute, si l'option corrige un bug, choisissez Y, sinon choisissez N.</blockquote>
 
==== Additional block devices ====
 
<blockquote><tt>Loopback device support                M<br />  utile pour voir ce que contient une image ISO<br /> RAM disk support (CONFIG_BLK_DEV_RAM)  Y<br />  si vous utilisez un ramdisk pour booter (N sinon) <br /> Parallel port IDE device support      M<br />  si vous avez un CD, disque dur... sur le port //<br />  dans ce cas, prenez tous les protocoles en module<br />  pour être sûr que ça marche, et prenez aussi<br />  l'autoprobe (voir plus haut)</tt><br /> </blockquote>
 
==== Networking options ====


<blockquote>Les networking options peuvent être laissées telles quelles si vous ne faites rien de spécial.</blockquote>
== Quel noyau compiler ? ==


==== SCSI support ====
Dans un premier temps, pour savoir quel noyau vous utilisez, il suffit de faire <span class="code">uname -sr</span>. Vous devriez voir apparaître quelque chose du genre: <tt>Linux 2.6.15</tt>.


<blockquote>Même si vous n'avez rien de SCSI, cette section peut vous intéresser (graveur IDE, CD, disque dur ou ZIP sur port parallèle, etc.). <tt>SCSI support (CONFIG_SCSI)            Y<br />  si partition racine sur disque SCSI<br />                                    ou M<br />  si CD SCSI ou graveur (même IDE : voir [#graveurIDE plus bas])<br /> SCSI disk, tape, CD-ROM support        Y<br />  si vous avez ce périphérique<br /> Enable vendor-specific extensions    Y<br />  ca peut pas faire de mal :) + indisp. graveur IDE</tt><br /> </blockquote>
<div class="note">Les noyaux sont numérotés depuis le 2.6.11 sur 4 nombres w.x.y.z. Ce dernier numéro est facultatif, il représente la correction d'un bug important ne pouvant attendre la prochaine version. Le plus souvent ce sont des problèmes de sécurité ou des bugs qui altèrent les données. Il est aussi à noter que la différenciation stable/instable via le numéro de sous-version pair/impair a été abandonnée au profit d'un modèle de développement plus souple. Le noyau continue constamment à évoluer en fusionnant des branches plus expérimentales de temps à autres.</div>


==== SCSI low level drivers ====
On peut différencier les sources [http://www.kernel.org Vanilla], qui sont les sources stables et celles que peuvent proposer les distributions avec des noyaux légèrement modifiés, optimisés pour telle ou telle architecture. Le mieux est peut-être d'installer la version du noyau qui correspond à votre système en le prenant parmi les paquetages fourni par votre distritibution (mais rien n'empêche d'utiliser les ''vanilla sources''). Quoiqu'il en soit, voici les différentes manières de rapatrier les sources de votre noyau:


<blockquote>Pour les SCSI low-level drivers, choisissez seulement celui de votre carte SCSI, Y ou M selon votre partition racine, et N pour les autres. (graveur IDE : M pour n'importe lequel). Si vous avez un ZIP sur le port parallèle, choisissez (dans les SCSI low-level drivers) : <tt>IOMEGA parallel port (ppa - older drives)  M<br /> IOMEGA parallel port (imm - newer drives) M</tt> </blockquote>
* '''kernel.org''': Allez sur [http://www.kernel.org kernel.org] et téléchargez les dernières sources du noyau (allez sur ''F'' comme ''full'').


==== Network device support ====
* '''Mandriva''': <span class="code"># urpmi kernel-headers kernel-source</span>


<blockquote>Si vous avez une carte réseau ou si vous utilisez un modem en ppp pour aller sur internet, soit dans la plupart des cas : <tt>Network device support (CONFIG_NETDEVICES) Y</tt><br /> </blockquote>
* '''Fedora''': <span class="code"># yum install kernel-source</span>


==== ARCnet devices ====
* '''Debian''': <span class="code"># apt-get install kernel-headers-$(uname -r) kernel-source-$(uname -r)</span>


<blockquote><tt>Dummy net driver support (CONFIG_DUMMY) Y ou M</tt><br /> et vous pouvez raisonnablement mettre les autres options à N.</blockquote>
* '''Kubuntu''': <span class="code"># apt-get install linux-headers-N°_de_noyau linux-source-$(uname -r)</span>


==== Ethernet (10 or 100Mbit) ====
* '''Slackware''': <span class="code"># installpkg /où_est/kernel-source-2.6.x.tgz /où_est/kernel-headers-2.6.x.tgz</span>


<blockquote>Choisissez le driver pour votre carte réseau, Y ou M, et mettez les autres à N.</blockquote>
* '''Gentoo''': <span class="code"># emerge gentoo-sources</span> (ou vanilla-sources, ou suspend2-sources, etc.)


==== Appletalk devices ====
== Dis-moi qui tu es, je te dirai quoi compiler ==  


<blockquote>Vous pouvez tout mettre à N ici, sauf bien sûr si vous voulez faire de l'Appletalk. Mais si vous vous connectez à internet avec un modem : <tt>PPP (point-to-point) support (CONFIG_PPP)  Y ou M</tt><br /> </blockquote>
Avant de se lancer dans l'aventure, il est important de connaître son matériel, afin de ne pas oublier par exemple le support du controleur IDE sur lequel se trouve le disque !


==== Token Ring, Wan interfaces, Amateur Radio support ====
Pour ne rien oublier, il existe quelques petits outils bien sympathiques.
''lspci'', provenant des [http://atrey.karlin.mff.cuni.cz/~mj/pciutils.shtml pciutils] pour voir ce que l'on a sur les ports pci,  ''lsusb'', provenant des [http://www.linux-usb.org/ usbutils], pour savoir ce que l'on a sur les ports usb.
Il existe également [ftp://ftp.iqchoice.com/pub/people/rail/gmso/ hwinfo] qui peut nous donner pas mal de renseignements sur notre matériel. Pour découvrir plus en détail votre matériel, allez voir l'[[Hardware-hard plus-matos|article complet]] sur léa. Ces petits softs sont disponibles en tant que paquet dans pas mal de distributions, et sont peut être déjà installés.


<blockquote>A moins d'une configuration spécifique, vous pouvez tout mettre à N dans ces trois rubriques.</blockquote>
Une fois que l'on connaît son matériel, on va pouvoir passer à l'étape suivante.


==== IrDA subsystem support ====
== Prérequis ==  


<blockquote>Configurez IrDA suivant votre utilisation, je ne connais pas :) voir http://www.cs.uit.no/~dagb/irda/.</blockquote>
Avant de passer à la suite il faut:
* avoir l'environnement de développement <tt>gcc</tt>, <tt>make</tt>, ...
* avoir les fichiers de développement des bibliothèques que l'on utilisera pour faire la configuration (ncurses, tcl/tk, Gtk, Qt, ...).
* pouvoir passer root pour installer le noyau (à la fin de la compilation)


==== Infrared-port device drivers ====
== Configuration ==


<blockquote>Si vous utilisez IrDA, configurez ici votre "low level driver".</blockquote>
Une fois que vous avez téléchargé l'archive des sources ou simplement installé le paquetage de votre distribution avec les sources du noyau, il est temps de passer à la configuration du noyau pour qu'il corresponde à votre ordinateur.


==== ISDN subsystem ====
=== Préparer les sources ===


<blockquote>si vous avez un modem Numéris(tm) choisissez : <tt>ISDN support : M</tt><br /> ainsi que le driver pour votre modem à M.</blockquote>
Deux possibilités:
* Si vous avez téléchargé l'archive sur kernel.org, décompressez l'archive quelque part dans votre répertoire principal (par exemple, je les décompresse habituellement dans <tt>~/devel/kernel/</tt>).


==== Old CD-ROM drivers (not SCSI, not IDE) ====
* Si vous avez récupéré le paquetage via votre distribution, donnez les droits nécessaires pour que vous puissiez lire/écrire en tant qu'utilisateur.


<blockquote>si vous avez un vieux lecteur de CD-ROM, ni IDE ni SCSI, c'est à dire connecté à une carte propriétaire ou une carte son en général, vous pouvez essayer de le faire fonctionner avec ces drivers.</blockquote>
Pour la suite, nous assumons que vous vous serez positionné à la racine des sources du noyau.


==== Character devices ====
=== Les outils de configuration ===


<blockquote><tt>Virtual terminal                        Y<br /> Support for console on virtual terminal Y<br /> Standard/generic (dumb) serial support  Y<br /> Parallel printer support                M</tt><br /> et pour le reste, laissez la valeur par défaut et supprimez (N) les périphériques qui ne vous concernent pas.</blockquote>
Trois interfaces de configuration sont disponibles, choisissez l'une d'elle et passez à la suite.  


==== Mice ====
Il est a noter que chacune de ces interfaces a besoin des fichiers de développement correspondant à la bibliothèque qu'elle utilise (ncurses, Qt, Gtk+). N'oubliez, donc, pas d'installer les paquetages correspondant pour les utiliser.


<blockquote>Si vous avez une souris série, vous n'avez rien à faire. <br />Si vous avez une souris PS/2 : <tt>PS/2 mouse (aka "auxiliary device") support    Y</tt><br /> Dans la majorité des cas (qui n'a pas une souris série<br /> ou PS/2 ?) vous pouvez répondre N aux autres options.</blockquote>
==== L'interface ncurses (mode semi-graphique) ====


<br />
Tapez : <span class="code">make menuconfig</span>
<div align="center">
[[Image:kernel26-menuconfig.png]]
</div>  


==== Watchdog Cards ====
==== L'interface Qt (mode graphique) ====


<blockquote>Vraisemblablement vous n'en avez pas : mettez tout à N, sinon vous savez certainement ce que vous faites :)</blockquote>
Tapez: <span class="code">make xconfig</span>
<div align="center">
  [[Image:kernel26-xconfig.png]]
</div>  


==== Video For Linux ====
==== L'interface Gtk+(mode graphique) ====


<blockquote>Cela concerne les personnes qui ont une carte tuner TV ou radio ou une web cam supportée (voir la [../hardware/tv.php3 rubrique TV]). Si c'est votre cas, choisissez : <tt>Video For Linux          M</tt><br /> puis mettez en module les drivers nécessaires. Par exemple, si vous possédez une carte Miro PCTV (ou compatible BT8xx), choisissez : <tt>BT848 Video For Linux    M</tt><br /> </blockquote>
Tapez: <span class="code">make gconfig</span>
<div align="center">
  [[Image:kernel26-gconfig.png]]
</div>


==== Joystick support ====
=== Les options disponibles ===


<blockquote>Si vous en avez un ou plusieurs, choisissez : <tt>Joystick support : M</tt> puis mettez en module les drivers pour les joysticks qui vous intéressent. <br />'''Attention''', les drivers pour joysticks NES, SNES, PSX, Sega, etc. (Multisystem) nécessitent que vous fabriquiez une interface spéciale pour les connecter au port parallèle... à vos fers à souder !</blockquote>
Les options correspondent à des fonctionnalités que vous pouvez activer/désactiver dans le noyau suivant vos besoins. Elles sont organisées suivant différentes ''sections'' et ''sous-sections'', nous allons ici décrire les principales sections qui existent et en donner une brêve description pour vous donner une idée des options qu'elles peuvent contenir.


==== Ftape, the floppy tape device driver ====
'''Note''': Il est important de noter que d'une version à l'autre du noyau, les options, sous-sections ou même les sections peuvent changer, mais l'idée générale reste conservée.


<blockquote>Vous avez un lecteur de bande branché avec le lecteur de disquettes ? Cette rubrique vous concerne.</blockquote>
==== Les options section par section ====
* '''<tt>Code maturity level options</tt>''': Permet de cacher ou de faire apparaître les options qui sont encore en développement et donc considérées comme instables (souvent utile de dire 'oui' ici si l'on veut pouvoir profiter des dernières avancées du noyau).
* '''<tt>General setup</tt>''': Ensemble d'options générales sur votre système (sauf si vous voulez compiler pour des architectures très particulières, vous pouvez le laisser tel quel).
* '''<tt>Loadable module support</tt>''': Options concernant la gestion des modules (le défaut est presque toujours correct pour une utilisation normale).
* '''<tt>Block layer</tt>''': Les entrées/sorties sur votre carte-mère (inutile d'y toucher).
* '''<tt>Processor type and features</tt>''': Options relatives au(x) processeur(s): type (x86, Sparc, ...), hyper-thread, dual-core, SMP, etc.
* '''<tt>Power management options (ACPI, APM)</tt>''': Options concernant l'économie d'énergie, la mise en veille et l'ACPI/APM.
* '''<tt>Bus options (PCI, PCMCIA, EISA, MCA, ISA)</tt>''': Gestion de tous les endroits où vous pourriez enficher des cartes (PCI, PCMCIA, ISA, etc).
* '''<tt>Executable file formats</tt>''': La gestion des fichiers exécutable (Le suppport ELF doit toujours être à 'Y').
* '''<tt>Networking</tt>''': Options concernant les protocoles réseau gérés par votre noyau (le défaut est bien souvent suffisant, mais jetez y un coup d'oeil à tout hasard).
* '''<tt>Device Drivers</tt>''': Options concernant tous les pilotes matériel (c'est bien souvent ici que l'on passe le plus de temps).
* '''<tt>File systems</tt>''': Options concernant les systèmes de fichiers gérés par votre noyau (vous aurez à y jeter un coup d'oeil).
* '''<tt>Instrumentation Support</tt>''': Option de profilage du noyau (inutile de l'activer).
* '''<tt>Kernel hacking</tt>'''; Options de déboguage du noyau (inutile de l'activer sauf si vous avez des envies particulières).
* '''<tt>Security options</tt>''': Options concernant le modèle de sécurité de votre noyau (le défaut est suffisant)
* '''<tt>Cryptographic options</tt>''': Algorithmes cryptographiques pouvant être implantés dans le noyau (le défaut est suffisant).
* '''<tt>Library routines</tt>''': Bibliothèques communes du noyau (le défaut est suffisant)


==== Filesystems ====
=== Positionner les options ===


<blockquote>Les systèmes de fichiers. Choisissez ceux dont vous avez besoin : minix, ext2 (second extended), /proc, /dev/pts sont '''indispensables'''. <br />Plus en général : DOS FAT + VFAT, ISO 9660 (pour les CD-ROMS) et les extensions Joliet (noms longs sur les CD), <br />plus romfs qui peut être utile pour ceux qui utilisent initrd.</blockquote>
Le moment est venu de choisir vos options. Si c'est la première fois que vous compilez le noyau, je vous conseille de les passer toutes en revue les unes après les autres en lisant l'aide qui y est attachée, dans l'ordre, afin de voir si elles s'appliquent à vous ou non.


==== Network File Systems ====
Dans l'outil de configuration du noyau, chaque question attend une réponse:
* 'oui' (<span class="code">Y</span>),
* 'non' (<span class="code">N</span>)
* ou éventuellement 'module' (<span class="code">M</span>) pour rendre la fonctionnalité chargeable dynamiquement.


<blockquote>Choisissez les options NFS si vous souhaitez monter des disques partagés en NFS, <br />choisissez les options SMB afin de monter les répertoires partagés Windows par réseau. (si vous ne voulez pas monter de répertoire partagé, mais plutôt en partager avec Samba, vous n'avez pas besoin de répondre Y ou M ici).</blockquote>
De manière générale, il est bon de modulariser les fonctionnalités qui ne servent pas en permanence (lecteur de CD, carte réseau, clefs USB, ...), mais tout n'est pas possible (enfin... pas simplement :).  


==== Partition Types ====
Par exemple, vous ne devriez pas mettre en module ce qui est utilisé lors du démarrage de votre ordinateur (pilotes des disques-durs IDE, système de fichiers que vous utilisez pour votre partition <tt>/</tt>, ou encore le support réseau si votre partition racine est montée par le réseau et NFS dans le cas des stations diskless par exemple, etc).  En effet, les modules sont chargés après le noyau, et si les modules IDE sont sur un disque IDE, il faut d'abord les charger avant de pouvoir accéder au disque, mais pour les charger, il faut avoir accès au disque et donc les avoir chargés avant... vous voyez le cercle vicieux ? En fait, il est possible de contourner ce problème grâce à <tt>initrd</tt>, mais cela dépasserait l'ambition de ce document...


<blockquote>Vous pouvez sûrement répondre N partout ici, sauf si vous en avez besoin, mais si c'est le cas, vous le savez :)</blockquote>
Tout le reste peut être compilé en modules, c'est à dire carte son, carte réseau (sauf si votre racine est déportée sur un serveur NFS comme dit précédemment), le support ppp (pour internet par modem), le CD-ROM, ...


==== Native Language Support ====
Voici ci-dessous les options '''classiques''' à utiliser pour une configuration standard. Si rien n'est dit ici à propos d'une option, regardez l'aide ou conservez la valeur par défaut ; vous pouvez aussi répondre 'N' à tous les périphériques que vous ne possédez pas, comme par exemple, IDE/ATAPI TAPE, etc.


<blockquote>Linux est localisé, c'est à dire qu'il peut être utilisé dans tous les pays avec les caractères spécifiques au pays. A priori en France il suffit de choisir en module : Codepage 850 et NLS ISO 8859-1. Les autres peuvent être mis à N.</blockquote>
Quoi qu'il arrive, dans le doute, il vaut mieux laisser les options par défaut.


==== Console drivers ====
== La compilation ==


<blockquote>Vous pouvez laisser les options par défaut, sauf si vous voulez utiliser la console en mode frame buffer, avec le serveur X pour frame buffer (pratique si votre carte, récente, n'est pas encore supportée par XFree). <br />Dans ce cas, choisissez : <tt>Support for frame buffer devices    Y</tt><br /> et configurez les options qui en dépendent.</blockquote>
Pour lancer la compilation du noyau, rien de plus simple, il suffit de lancer : <span class="code">make</span>.


==== Sound ====
La compilation peut être relativement longue suivant votre type de machine. Pour ceux qui possèdent un multi-processeurs, un processeur hyperthread ou un multi-core, vous pouvez taper: <span class="code">make -j 4</span>. Cela permet de paralléliser la compilation sur 4 processus.


<blockquote>Nous allons ici configurer la carte son. Si vous en avez une, choisissez : <tt>Sound card support            M</tt><br /> Vous pouvez aussi utiliser le PC Speaker : <tt>Internal PC speaker support  M</tt><br /> Ensuite, choisissez le "low level driver" de votre carte. Si vous le mettez en module (conseillé), ce n'est pas la peine de mettre ici les paramètres de la carte (irq, dma, etc.)</blockquote>
== Installation ==


'''<font size="+1">Ouf... c'est fini :-)</font>'''<br />Après ça, vous comprenez pourquoi je n'arrête pas de vous dire de sauvegarder votre config de noyau dans un fichier !!!
On va à présent installer le noyau sur le système pour pouvoir démarrer dessus au prochain reboot. Toujours dans le même répertoire, tapez simplement: <span class="code">su -c 'make modules_install && make install'</span>.


----
Le système va vous demander votre mot de passe root puis va lancer l'installation. En effet, la phase d'installation requière des droits de root (contrairement à toutes les phases précédentes). Et voilà, il ne reste plus qu'à configurer le gestionnaire de démarrage ([http://lea-linux.org/cached/index/Admin-admin_boot-grub.html grub], [http://lea-linux.org/cached/index/Admin-admin_boot-LILO.html lilo] ou [http://lea-linux.org/cached/index/Admin-admin_boot-loadlin.html loadlin]).


== Cas particuliers ==
<b>Note:</b> Vous pouvez aussi de temps à autre faire un peu de ménage dans les répertoires /boot/ et /lib/modules/. Mais pensez <b>TOUJOURS</b> à conserver au moins un noyau dont vous êtes sûr qu'il démarre lorsque vous n'avez pas encore testé à fond le noyau que vous venez de compiler.


=== Permettre le gravage sur des graveurs IDE ===
== Trucs & Astuces ==


<blockquote>Les graveurs IDE sont reconnus sans problème en tant que lecteur de CD-ROM, mais pour ce qui est de s'en servir comme d'un graveur, vous allez devoir utiliser "''l'émulation SCSI''", comme sous Windows d'ailleurs (ASPI, ca vous dit quelquechose ?). Pour ce faire, il faut choisir les options suivantes dans le noyau : <tt>Enhanced IDE/MFM/RLL...        Y<br /> IDE/ATAPI CDROM                M<br /> SCSI hostadaptor emulation      M<br /> Loopback device                M<br /> SCSI support                    Y ou M<br /> SCSI CD-ROM support            Y ou M<br /> Enable vendor-specific          Y<br /> SCSI generic support            Y ou M<br />    (choisir un driver SCSI, n'importe lequel)<br /> ISO 9660 CDROM filesystem      Y<br /> Microsoft Joliet cdrom...       M</tt><br /> Pour le reste de la configuration, celle-ci ne concerne pas le noyau. Allez la consulter dans la rubrique [../trucs/?aff_item=8 trucs]. <br /><u>Remarque</u> : les distributions récentes ont souvent le support de l'émulation SCSI déjà inclus, il suffit alors de le configurer selon ce qui est indiqué dans la rubrique [../trucs/?aff_item=8 trucs].</blockquote>
=== Le fichier <tt>.config</tt> ===


=== Activer le support Frame buffer dans le noyau ===
Toute votre configuration noyau est en fait stockée dans le fichier <tt>.config</tt>. Si vous téléchargez un autre noyau et que vous placez votre fichier <tt>.config</tt> dans le répertoire racine des sources vous n'aurez pas à tout refaire, alors n'oubliez pas de le sauvegarder précieusement (ailleurs que dans les sources).


<blockquote>Menu '''Code maturity level options'''<br /><tt>Prompt for development and/or incomplete code/drivers : Y</tt><br /><br />Menu '''Console drivers'''<br /><tt>Video mode selection support : Y</tt><br /><br /><tt>Support for frame buffer devices : Y</tt><br /><br /><tt>VESA VGA graphic console : Y</tt><br />
=== Personnaliser un noyau ===


Pour le reste de la configuration du frame buffer, par exemple le serveur X, voir la rubrique [../xwindow/x.php3#frame_buffer correspondante].
Il est possible de personnaliser le nom de votre noyau en lui ajoutant un champ extra-version. Pour cela, avant de lancer la compilation, éditez le fichier <tt>Makefile</tt> qui se trouve à la racine des sources et renseignez le champ <tt>EXTRAVERSION</tt> avec un texte qui décrit votre extra-version (par exemple <tt>EXTRAVERSION = -debug</tt> ou bien <tt>EXTRAVERSION = -production</tt>, ...).


</blockquote>
=== Patcher un noyau ===


=== Options spécifiques à un modem ADSL USB ===
Patcher un noyau requière de se placer  à la racine des sources de votre noyau puis de faire: <span class="code">patch -p1 < /chemin/vers/le/patch</span>. Il est possible de retirer le patch en refaisant exactement la même commande. La lecture de <span class="code">man patch</span> est bien sûr recommandée en cas de problème.


<blockquote>Pour les utilisateurs d'un modem adsl USB, voici les options que vous devriez choisir :<br /><br /> - '''Menu [Network Device Support]'''<br /><tt>PPP (point-to-point protocol) support (CONFIG_PPP) [M]<br /> PPP support for sync tty ports (CONFIG_PPP_SYNC_TTY) [M]</tt><br /><br /> - '''Menu [Character devices]'''<br /><tt>[*] Non-standard serial port support<br /> HDLC line discipline support<br /> [*] Unix98 PTY support</tt><br /><br /> - '''Menu [USB support]'''<br /><tt> Support for USB (CONFIG_USB) [M]<br /> Preliminary USB device filesystem (CONFIG_USB_DEVICEFS) [Y]<br /> UHCI (Intel PIIX4, VIA, ...) support (CONFIG_USB_UHCI) [M]<br /> UHCI Alternate Driver (JE) support (CONFIG_USB_UHCI_ALT) [M]<br /> OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support (CONFIG_USB_OHCI) [M]</tt> </blockquote><div class="merci">Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Jean-Christophe Cardot le 06/11/1999.</div>
<br/>
<br/>
'''<b>[[Kernel-index|@ Retour à la rubrique Noyau et modules]]</b>'''
<br/>


= Copyright =
= Copyright =
Copyright &copy; 06/11/1999, Jean-Christophe Cardot
Copyright &copy; 17/07/2006, Jean-Christophe Cardot
{{CC-BY-NC-SA}}
{{CC-BY-SA}}

Dernière version du 5 juin 2012 à 11:03


Compiler le noyau

par Jean-Christophe

Où vous apprendrez à compiler votre noyau Linux sans soucis.

Quelques rappels

Le noyau est le cœur du système. C'est lui qui fait l'interface entre vos applications et votre matériel. Par exemple, il gère la mémoire, donne l'ordre d'exécution des tâches sur le(s) processeur(s), interagit avec vos périphériques via les pilotes matériels (souris, claviers, etc), s'occupe du réseau, ...

Le noyau (kernel en anglais) est composé d'une partie statique à laquelle on peut dynamiquement greffer des modules. La partie statique est utilisée lors du démarrage de votre ordinateur et sera toujours chargée en mémoire, tandis que les modules peuvent être chargés seulement une fois la machine démarrée et uniquement en cas de besoin.

Pourquoi Compiler son noyau ?

Vous avez besoin d'un nouveau noyau si :

  • vous avez un matériel dont le support a été ajouté dans une nouvelle version du noyau,
  • un trou de sécurité a été découvert dans le noyau actuel, ce problème étant réglé dans une nouvelle version,
  • vous souhaitez disposer d'une fonctionnalité qui n'est pas encore dans la branche principale du noyau (par exemple ajouter le support du temps réel afin de réduire les temps de latences d'une carte son, pour faire de la musique).
  • vous souhaitez toujours avoir le dernier noyau possible :)
  • comme tout bon Geek, vous aimez compiler votre kernel ;)

La plupart du temps, vous n'avez pas réellement besoin d'un nouveau noyau. Il serait suffisant de rester à jour avec votre distribution puisque celle-ci s'occupe des logiciels qui ont des problèmes de sécurité ou des bugs.

Quel noyau compiler ?

Dans un premier temps, pour savoir quel noyau vous utilisez, il suffit de faire uname -sr. Vous devriez voir apparaître quelque chose du genre: Linux 2.6.15.

Les noyaux sont numérotés depuis le 2.6.11 sur 4 nombres w.x.y.z. Ce dernier numéro est facultatif, il représente la correction d'un bug important ne pouvant attendre la prochaine version. Le plus souvent ce sont des problèmes de sécurité ou des bugs qui altèrent les données. Il est aussi à noter que la différenciation stable/instable via le numéro de sous-version pair/impair a été abandonnée au profit d'un modèle de développement plus souple. Le noyau continue constamment à évoluer en fusionnant des branches plus expérimentales de temps à autres.

On peut différencier les sources Vanilla, qui sont les sources stables et celles que peuvent proposer les distributions avec des noyaux légèrement modifiés, optimisés pour telle ou telle architecture. Le mieux est peut-être d'installer la version du noyau qui correspond à votre système en le prenant parmi les paquetages fourni par votre distritibution (mais rien n'empêche d'utiliser les vanilla sources). Quoiqu'il en soit, voici les différentes manières de rapatrier les sources de votre noyau:

  • kernel.org: Allez sur kernel.org et téléchargez les dernières sources du noyau (allez sur F comme full).
  • Mandriva: # urpmi kernel-headers kernel-source
  • Fedora: # yum install kernel-source
  • Debian: # apt-get install kernel-headers-$(uname -r) kernel-source-$(uname -r)
  • Kubuntu: # apt-get install linux-headers-N°_de_noyau linux-source-$(uname -r)
  • Slackware: # installpkg /où_est/kernel-source-2.6.x.tgz /où_est/kernel-headers-2.6.x.tgz
  • Gentoo: # emerge gentoo-sources (ou vanilla-sources, ou suspend2-sources, etc.)

Dis-moi qui tu es, je te dirai quoi compiler

Avant de se lancer dans l'aventure, il est important de connaître son matériel, afin de ne pas oublier par exemple le support du controleur IDE sur lequel se trouve le disque !

Pour ne rien oublier, il existe quelques petits outils bien sympathiques. lspci, provenant des pciutils pour voir ce que l'on a sur les ports pci, lsusb, provenant des usbutils, pour savoir ce que l'on a sur les ports usb. Il existe également hwinfo qui peut nous donner pas mal de renseignements sur notre matériel. Pour découvrir plus en détail votre matériel, allez voir l'article complet sur léa. Ces petits softs sont disponibles en tant que paquet dans pas mal de distributions, et sont peut être déjà installés.

Une fois que l'on connaît son matériel, on va pouvoir passer à l'étape suivante.

Prérequis

Avant de passer à la suite il faut:

  • avoir l'environnement de développement gcc, make, ...
  • avoir les fichiers de développement des bibliothèques que l'on utilisera pour faire la configuration (ncurses, tcl/tk, Gtk, Qt, ...).
  • pouvoir passer root pour installer le noyau (à la fin de la compilation)

Configuration

Une fois que vous avez téléchargé l'archive des sources ou simplement installé le paquetage de votre distribution avec les sources du noyau, il est temps de passer à la configuration du noyau pour qu'il corresponde à votre ordinateur.

Préparer les sources

Deux possibilités:

  • Si vous avez téléchargé l'archive sur kernel.org, décompressez l'archive quelque part dans votre répertoire principal (par exemple, je les décompresse habituellement dans ~/devel/kernel/).
  • Si vous avez récupéré le paquetage via votre distribution, donnez les droits nécessaires pour que vous puissiez lire/écrire en tant qu'utilisateur.

Pour la suite, nous assumons que vous vous serez positionné à la racine des sources du noyau.

Les outils de configuration

Trois interfaces de configuration sont disponibles, choisissez l'une d'elle et passez à la suite.

Il est a noter que chacune de ces interfaces a besoin des fichiers de développement correspondant à la bibliothèque qu'elle utilise (ncurses, Qt, Gtk+). N'oubliez, donc, pas d'installer les paquetages correspondant pour les utiliser.

L'interface ncurses (mode semi-graphique)

Tapez : make menuconfig


L'interface Qt (mode graphique)

Tapez: make xconfig

 

L'interface Gtk+(mode graphique)

Tapez: make gconfig

 

Les options disponibles

Les options correspondent à des fonctionnalités que vous pouvez activer/désactiver dans le noyau suivant vos besoins. Elles sont organisées suivant différentes sections et sous-sections, nous allons ici décrire les principales sections qui existent et en donner une brêve description pour vous donner une idée des options qu'elles peuvent contenir.

Note: Il est important de noter que d'une version à l'autre du noyau, les options, sous-sections ou même les sections peuvent changer, mais l'idée générale reste conservée.

Les options section par section

  • Code maturity level options: Permet de cacher ou de faire apparaître les options qui sont encore en développement et donc considérées comme instables (souvent utile de dire 'oui' ici si l'on veut pouvoir profiter des dernières avancées du noyau).
  • General setup: Ensemble d'options générales sur votre système (sauf si vous voulez compiler pour des architectures très particulières, vous pouvez le laisser tel quel).
  • Loadable module support: Options concernant la gestion des modules (le défaut est presque toujours correct pour une utilisation normale).
  • Block layer: Les entrées/sorties sur votre carte-mère (inutile d'y toucher).
  • Processor type and features: Options relatives au(x) processeur(s): type (x86, Sparc, ...), hyper-thread, dual-core, SMP, etc.
  • Power management options (ACPI, APM): Options concernant l'économie d'énergie, la mise en veille et l'ACPI/APM.
  • Bus options (PCI, PCMCIA, EISA, MCA, ISA): Gestion de tous les endroits où vous pourriez enficher des cartes (PCI, PCMCIA, ISA, etc).
  • Executable file formats: La gestion des fichiers exécutable (Le suppport ELF doit toujours être à 'Y').
  • Networking: Options concernant les protocoles réseau gérés par votre noyau (le défaut est bien souvent suffisant, mais jetez y un coup d'oeil à tout hasard).
  • Device Drivers: Options concernant tous les pilotes matériel (c'est bien souvent ici que l'on passe le plus de temps).
  • File systems: Options concernant les systèmes de fichiers gérés par votre noyau (vous aurez à y jeter un coup d'oeil).
  • Instrumentation Support: Option de profilage du noyau (inutile de l'activer).
  • Kernel hacking; Options de déboguage du noyau (inutile de l'activer sauf si vous avez des envies particulières).
  • Security options: Options concernant le modèle de sécurité de votre noyau (le défaut est suffisant)
  • Cryptographic options: Algorithmes cryptographiques pouvant être implantés dans le noyau (le défaut est suffisant).
  • Library routines: Bibliothèques communes du noyau (le défaut est suffisant)

Positionner les options

Le moment est venu de choisir vos options. Si c'est la première fois que vous compilez le noyau, je vous conseille de les passer toutes en revue les unes après les autres en lisant l'aide qui y est attachée, dans l'ordre, afin de voir si elles s'appliquent à vous ou non.

Dans l'outil de configuration du noyau, chaque question attend une réponse:

  • 'oui' (Y),
  • 'non' (N)
  • ou éventuellement 'module' (M) pour rendre la fonctionnalité chargeable dynamiquement.

De manière générale, il est bon de modulariser les fonctionnalités qui ne servent pas en permanence (lecteur de CD, carte réseau, clefs USB, ...), mais tout n'est pas possible (enfin... pas simplement :).

Par exemple, vous ne devriez pas mettre en module ce qui est utilisé lors du démarrage de votre ordinateur (pilotes des disques-durs IDE, système de fichiers que vous utilisez pour votre partition /, ou encore le support réseau si votre partition racine est montée par le réseau et NFS dans le cas des stations diskless par exemple, etc). En effet, les modules sont chargés après le noyau, et si les modules IDE sont sur un disque IDE, il faut d'abord les charger avant de pouvoir accéder au disque, mais pour les charger, il faut avoir accès au disque et donc les avoir chargés avant... vous voyez le cercle vicieux ? En fait, il est possible de contourner ce problème grâce à initrd, mais cela dépasserait l'ambition de ce document...

Tout le reste peut être compilé en modules, c'est à dire carte son, carte réseau (sauf si votre racine est déportée sur un serveur NFS comme dit précédemment), le support ppp (pour internet par modem), le CD-ROM, ...

Voici ci-dessous les options classiques à utiliser pour une configuration standard. Si rien n'est dit ici à propos d'une option, regardez l'aide ou conservez la valeur par défaut ; vous pouvez aussi répondre 'N' à tous les périphériques que vous ne possédez pas, comme par exemple, IDE/ATAPI TAPE, etc.

Quoi qu'il arrive, dans le doute, il vaut mieux laisser les options par défaut.

La compilation

Pour lancer la compilation du noyau, rien de plus simple, il suffit de lancer : make.

La compilation peut être relativement longue suivant votre type de machine. Pour ceux qui possèdent un multi-processeurs, un processeur hyperthread ou un multi-core, vous pouvez taper: make -j 4. Cela permet de paralléliser la compilation sur 4 processus.

Installation

On va à présent installer le noyau sur le système pour pouvoir démarrer dessus au prochain reboot. Toujours dans le même répertoire, tapez simplement: su -c 'make modules_install && make install'.

Le système va vous demander votre mot de passe root puis va lancer l'installation. En effet, la phase d'installation requière des droits de root (contrairement à toutes les phases précédentes). Et voilà, il ne reste plus qu'à configurer le gestionnaire de démarrage (grub, lilo ou loadlin).

Note: Vous pouvez aussi de temps à autre faire un peu de ménage dans les répertoires /boot/ et /lib/modules/. Mais pensez TOUJOURS à conserver au moins un noyau dont vous êtes sûr qu'il démarre lorsque vous n'avez pas encore testé à fond le noyau que vous venez de compiler.

Trucs & Astuces

Le fichier .config

Toute votre configuration noyau est en fait stockée dans le fichier .config. Si vous téléchargez un autre noyau et que vous placez votre fichier .config dans le répertoire racine des sources vous n'aurez pas à tout refaire, alors n'oubliez pas de le sauvegarder précieusement (ailleurs que dans les sources).

Personnaliser un noyau

Il est possible de personnaliser le nom de votre noyau en lui ajoutant un champ extra-version. Pour cela, avant de lancer la compilation, éditez le fichier Makefile qui se trouve à la racine des sources et renseignez le champ EXTRAVERSION avec un texte qui décrit votre extra-version (par exemple EXTRAVERSION = -debug ou bien EXTRAVERSION = -production, ...).

Patcher un noyau

Patcher un noyau requière de se placer à la racine des sources de votre noyau puis de faire: patch -p1 < /chemin/vers/le/patch. Il est possible de retirer le patch en refaisant exactement la même commande. La lecture de man patch est bien sûr recommandée en cas de problème.



@ Retour à la rubrique Noyau et modules

Copyright

Copyright © 17/07/2006, Jean-Christophe Cardot

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike icon
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique 4.0 :
https://creativecommons.org/licenses/by-sa/4.0/