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

De Lea Linux
Aller à la navigation Aller à la recherche
(Mise à jour complète de l'article)
Ligne 1 : Ligne 1 :
[[Category:Configurer votre noyau]]
[[Category:Configurer votre noyau]]
= Le noyau (kernel) de Linux : le compiler =
= Le noyau (kernel) de Linux : le compiler =
''en cours de réécriture''


<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>
<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>
----
Si vous ne savez pas ce qu'est le noyau, allez voir le glossaire !
== D'abord, quelle est la version actuelle du noyau ? ==


C'est facile, il suffit de lancer <tt>uname -sr</tt> pour avoir la réponse.
== Quelques rappels ==
Le noyau est le coeur du système. C'est lui qui, entre autres, gère la mémoire, contient les pilotes du matériel, ordonne les différentes tâches, gère le support des différents protocoles,...


'''Note sur la numérotation des noyaux :'''<br />Les noyaux sont numérotés sur 3 nombres x.y.z.
Le noyau, ou kernel, est composé d'une partie statique, à laquelle on peut greffer des modules.
 
La partie statique sera toujours chargée en mémoire, tandis que les module ne le seront qu'en cas de besoin.
* 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 : ==
Ligne 27 : Ligne 17 :
* 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 de nouveau noyau.'''''


----
== Quel noyau? ==


== Installation d'un noyau précompilé ==
Dans un premier temps, pour savoir quel noyau on utilise, il suffit de lancer <tt>uname -sr</tt>.


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>.
'''Note sur la numérotation des noyaux :'''<br />Les noyaux sont numérotés sur 3 nombres x.y.z.


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).
* Versions stables : le nombre du milieu (y) est pair. Par exemple : 2.'''4'''.31 ou 2.'''6'''.13.
* Versions de développement : le nombre du milieu (y) est impair, par exemple 2.'''5'''.75. Attention, il n'est pas recommandé d'utiliser un noyau d'une version de développement, car ces noyaux ne sont pas - a priori - stables.


<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>".
De plus, on peut différencier les sources [http://www.kernel.org Vanilla], qui sont les sources non patchées. Les distributions peuvent proposer des noyaux légèrement modifiés, optimisés pour telle ou telle architecture, etc.<br/> Le mieux est peut être d'installer la version du noyau via le système de paquetages de la distribution (mais rien n'empêche d'utiliser les ''vanilla sources'')


----
Enfin, il faut vérifier que <tt>/usr/src/linux</tt> est un lien vers le répertoire contenant les sources du noyau à compiler:
<code>ln -sf /usr/src/linux-x.y.z /usr/src/linux</code>


== Aide-mémoire rapide ==
== Dit-moi qui tu es, je te dirai quoi compiler ==  


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 :
Avant de se lancer dans l'aventure, il est important de connaitre son matériel, afin de ne pas oublier par exemple le support du controleur IDE sur lequel se trouve le disque!


* <tt>cd /usr/src/linux</tt>
Pour ne rien oublier, il existe quelques petits outils bien sympathiques.
* Configuration :  
''lspci'', provenant des [http://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.
** <tt>make xconfig</tt> (graphique) ou :
Il existe également [ftp://ftp.iqchoice.com/pub/people/rail/gmso/ hwinfo] qui peut nous donner pas mal de renseignements sur notre matériel.<br/>
** <tt>make menuconfig</tt> (mode texte avec menus) ou encore :  
Ces petits softs sont disponibles en tant que paquet dans pas mal de distributions, et sont peut être déjà installés.<br/>
** <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 :-)


----
Une fois que l'on connait son matériel, on va pouvoir passer à l'étape suivante.


'''And last, but not least...'''
== Prérequis ==


== Comment compiler mon propre noyau ? ==
Avant de passer à la suite il faut:
* avoir l'environnement de développement <tt>gcc</tt>
* si on souhaite utiliser l'interface graphique sous X, il faut autoriser l'affichage à ''root'' avec <code>xhost +</code>
* devenir ''root'' (donc avoir le droit de faire des bêtises!): <code>su</code>
* enfin, il faut aller dans le répertoire <code>cd /usr/src/linux</code>


'''pré requis :'''
== Configuration ==


* 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].
Pour configurer le noyau, il y a 4 possibilités:
* modifier le <tt>.config</tt> à la main,
* lancer la commande <code>make config</code>. Dans ce cas, on devra répondre à toutes les questions une par une,
* lancer la commande <code>make menuconfig</code>. Ici, on va configurer le noyau via une interface graphique en ncurses (mode semi-graphique),
* lancer la commande <code>make xconfig</code>. L'interface ici sera graphique sous X


Vous devez être '''<tt>root</tt>''' pour faire tout ce qui suit. Dans cet exemple, nous installerons le noyau 2.2.13.
=== Les options ===


Une contribution : [kernel_debian.php3 compiler un noyau à la sauce '''Debian''']. à lire si vous utilisez cette distribution.
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.


----
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...<br/>


== Installation des sources du noyau ==
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, etc. <br/>


'''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).
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.<br/>


'''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 />
Dans le doute, il vaut mieux laisser les options par défaut.<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.
''Attention'': cette doc a été mise à jour en se basant sur la version 2.6.13 du noyau! Si la version est différente (notamment la branche), il est possible que certaines options n'existent pas ou aient été déplacées.


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>
==== Code maturity level options ====


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 />
Ca ne coûte rien de répondre Y ici!<br/>
<code>Prompt for development and/or incomplete code/drivers</code>: Y<br/>
<code>Select only drivers expected to compile cleanly</code>: Y


<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.
==== General setup ====


----
<code>Support for paging of anonymous memory (swap)</code>: Y<br/>
<code>System V IPC</code>: Y<br/>
<code>Sysctl support</code>: Y<br/>
Pour permettre le hotplug:
<code>Support for hot-pluggable devices</code>: Y<br/>
Et enfin:
<code>Kernel userspace events</code>: Y


== Phase de configuration du noyau ==
==== Loadable module support ====


Placez vous dans le répertoire des sources /usr/src, puis lancez les commandes suivantes :
Pour que le noyau puisse charger et décharger les modules selon ses besoins:
<code>Enable loadable module support</code>: Y<br />
<code>Module unloading</code>: Y<br/>
<code>Automatic kernel module loading</code>: Y<br/>


<tt>'''[root@taz src]#''' cd linux</tt><br />
==== Processor type and features ====
 
<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>
C'est ici que vous définissez quel est votre type de processeur.
<code>Preemptible kernel</code>: Y. Grâce à cette option, le noyau devient "préemptif". Cela permet d'avoir un noyau plus réactif.


==== Processor type and features ====
==== Bus options ====


<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>
<code>PCI support</code>: Y<br/>
<code>PCI device name database</code>: Y<br/>


==== Loadable module support ====
==== Executable file format ====


<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>
<code> Kernel support for ELF binaries</code>: Y<br/>
<code> Kernel support for MISC binaries</code>: M ou Y


==== General setup ====
==== Graphics support ====


<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 !  
<code>Support for frame buffer devices</code>: Y<br/>
A vous de choisir votre carte graphique!


Sinon pour les autres options, laissez la valeur par défaut ou bien lisez l'aide jointe.
'''Logo configuration'''<br/>
à vous de voir si vous voulez un beau logo de tux au démarrage!


</blockquote>
==== Memory technologie Device ====


==== Plug and Play support ====
à voir selon votre matériel!


<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 ====
<code>Loopback device support</code>: Y<br/>
<code>RAM disk support</code> Y ou M si vous comptez utiliser un ramdisk<br/>
<code>Initial RAM disk (initrd) support</code> si vous comptez démarrer avec un ramdisk.


==== Block devices ====
==== Device drivers ====


<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>
Dans la section <code>character devices</code>, il faut mettre en module la gestion de l'agp (<code>/dev/agpart</code>), ainsi que celle de son chipset.<br/>
Dans la section <code>ATA/ATAPI/MFM/RLL support</code>, il ne faut pas oublier de mettre Y pour la gestion de la DMA.


==== Additional block devices ====
==== SCSI device support ====


<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>
C'est ici que vous pouvez configurer, en plus du SCSI, les lecteurs IOMEGA ZIP sur port parallèle, ainsi que le bus SATA.
A partir du noyau 2.6, on n'utilise plus d'interface SCSI pour les graveurs de CD/DVD.


==== Networking options ====
==== Networking options ====


<blockquote>Les networking options peuvent être laissées telles quelles si vous ne faites rien de spécial.</blockquote>
Comme d'habitude, on ne garde, pour les pilotes, que ceux du matériel (ARCnet, TokenRing peuvent être désactivés. Ne garder dans l'ethernet que ce qui concerne la carte réseau,...)
Si vous ne comptez pas utilisez l'IPv6 (ou si vous vous demandez ce que c'est), vous pouvez le supprimer.<br/>


==== SCSI support ====
L'IrDA et le Bluetooth peut être désactivé si vous ne l'utilisez pas.<br/>


<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>
Je vous conseille quand même de garder le <code>PPP</code>


==== SCSI low level drivers ====
==== ISDN ====


<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>
Ceci concerne les connexions numéris.


==== Network device support ====
==== Unix98 PTY ====


<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>
<code>Unix98 PTY support: Y</code><br/>
256 est un bon nombre maximum.


==== ARCnet devices ====
==== Filesystems ====


<blockquote><tt>Dummy net driver support (CONFIG_DUMMY) Y ou M</tt><br /> et vous pouvez raisonnablement mettre les autres options à N.</blockquote>
Ici, vous choisissez les systèmes de fichiers dont vous avez besoin (ext2, ext3, éventuellement ReiserFS).<br/>


==== Ethernet (10 or 100Mbit) ====
<code>Kernel automounter version 4 support</code>: M<br/>
Ne pas oublier de vérifier <code>CD-ROM/DVD Filesystems</code> et <code>DOS/FAT/NT Filesystems</code> <br/>


<blockquote>Choisissez le driver pour votre carte réseau, Y ou M, et mettez les autres à N.</blockquote>
Dans <code>pseudo filesystems</code>, mettre Y à:
<code>/proc</code><br/>
<code>Virtual memory file system support</code><br/>


==== Appletalk devices ====
<code>/dev file system support</code> est obsolète et remplacé par <code>udev</code>.


<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>
<code>Network File systems</code> n'est utile que si vous montez des systèmes de fichier par le réseau.


==== Token Ring, Wan interfaces, Amateur Radio support ====
==== Multimedia devices ====


<blockquote>A moins d'une configuration spécifique, vous pouvez tout mettre à N dans ces trois rubriques.</blockquote>
Ici vous ajoutez vos pilotes pour les cartes radio, ainsi que l'acquisition vidéo (carte TV, webcam,...)


==== IrDA subsystem support ====
==== Sound ====


<blockquote>Configurez IrDA suivant votre utilisation, je ne connais pas :) voir http://www.cs.uit.no/~dagb/irda/.</blockquote>
Ne pas utiliser OSS, mais ALSA.


==== Infrared-port device drivers ====
==== USB support ====


<blockquote>Si vous utilisez IrDA, configurez ici votre "low level driver".</blockquote>
Vous pouvez utiliser lsmod pour savoir quel module utiliser (entre EHCI, OHCI et UHCI).
Ensuite, c'est à vous de savoir quel matériel vous avez!


==== ISDN subsystem ====
==== Watchdog cards ====


<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>
Si vous vous demandez ce que c'est, c'est que vous n'en avez pas besoin!


==== Old CD-ROM drivers (not SCSI, not IDE) ====
==== Profiling support ====


<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>
Mettre N partout


==== Character devices ====
==== Kernel hacking ====


<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>
Même si vous ne vous sentez pas l'âme d'un hacker, je vous conseille de mettre Y à<br/>
<code>Kernel debugging</code><br/>
<code>Magic SysRq Key</code><br/>


==== Mice ====
Comme cela, en cas de plantage du système, vous pourrez utiliser les touches magiques pour démonter les partitions et redémarrer "proprement" (sans appuyer sur le bouton reset)


<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>
====  Security options ====


<br />
Vous n'avez sûrement pas besoin de configurer SELinux ou d'autres méthodes de haute sécurité. Donc, un petit N suffit.


==== Watchdog Cards ====
==== Cryptographic options ====


<blockquote>Vraisemblablement vous n'en avez pas : mettez tout à N, sinon vous savez certainement ce que vous faites :)</blockquote>
Les mettre en module ne fait pas de mal.


==== Video For Linux ====
==== Library routines ====


<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>
Idem, en module, ça peut éventuellement servir.


==== Joystick support ====
== La compilation ==


<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>
Pour lancer la compilation du noyau, rien de plus simple. Il suffit de lancer:<br/>
<code>
make && make bzImage modules_install
</code>


==== Ftape, the floppy tape device driver ====
La compilation peut être relativement longue.


<blockquote>Vous avez un lecteur de bande branché avec le lecteur de disquettes ? Cette rubrique vous concerne.</blockquote>
== Dernière étape ==


==== Filesystems ====
Maintenant, on va préparer le système à redémarrer avec le nouveau noyau:<br/>
<code>
cp arch/architecture/boot/bzImage /boot/kernel-X.Y.Z
</code>où ''architecture'' correspond à votre architecture (i386 pour un système 32bits,  x86_64 pour un amd64)
<br/>
<code>
cp System.map /boot/System.map-X.Y.Z
</code>


<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>
Si le fichier <tt>/boot/System.map</tt> est un lien, le supprimer, sinon le renommer.
Ensuite, nous allons créer le lien suivant:<br/>
<code>ln -s /boot/System.map-X.Y.Z /boot/System.map</code>


==== Network File Systems ====
Autant copier le fichier de configuration du noyau, on ne sait jamais:<br/>
<code>
cp .config /boot/config-X.Y.Z<br/>
</code>


<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>
Enfin, si vous utilisez un ramdisk au boot, il faut le recréer en lançant la commande suivante:<code>mkinitrd</code>, puis copier l'initrd dans <tt>/boot</tt>.<br>


==== Partition Types ====
Remarque sur '''initrd''' :


<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>
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.


==== Native Language Support ====
Il ne reste plus qu'à configurer le gestionnaire de démarrage (grub, lilo ou loadlin). Pour bien le faire, le mieux est de lire la doc sur léa!


<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>
== Annexe : copies d'écran ==


==== Console drivers ====
<code>make menuconfig</code> donne l'écran suivant :


<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>
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 />  


==== Sound ====
{|
| 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.


<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>


'''<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 !!!
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.


----
<code>make xconfig</code> donne la fenêtre suivante :


== Cas particuliers ==
[[Image:kernel-make_xconfig.png]]


=== Permettre le gravage sur des graveurs IDE ===
Ce premier écran contient des boutons qui mènent aux différents sous-menus de configuration : <br />


<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>
{|
 
|
=== Activer le support Frame buffer dans le noyau ===
[[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.
<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 />
|}
 
Pour le reste de la configuration du frame buffer, par exemple le serveur X, voir la rubrique [../xwindow/x.php3#frame_buffer correspondante].
 
</blockquote>
 
=== Options spécifiques à un modem ADSL USB ===


<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>


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

Version du 17 octobre 2005 à 22:42

Le noyau (kernel) de Linux : le compiler

Le noyau (kernel) de Linux : le compiler
par Jean-Christophe
Où vous apprendrez à compiler votre noyau Linux sans soucis.

Quelques rappels

Le noyau est le coeur du système. C'est lui qui, entre autres, gère la mémoire, contient les pilotes du matériel, ordonne les différentes tâches, gère le support des différents protocoles,...

Le noyau, ou kernel, est composé d'une partie statique, à laquelle on peut greffer des modules. La partie statique sera toujours chargée en mémoire, tandis que les module ne le seront qu'en cas de besoin.

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 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 de nouveau noyau.

Quel noyau?

Dans un premier temps, pour savoir quel noyau on utilise, il suffit de lancer uname -sr.

Note sur la numérotation des noyaux :
Les noyaux sont numérotés sur 3 nombres x.y.z.

  • Versions stables : le nombre du milieu (y) est pair. Par exemple : 2.4.31 ou 2.6.13.
  • Versions de développement : le nombre du milieu (y) est impair, par exemple 2.5.75. Attention, il n'est pas recommandé d'utiliser un noyau d'une version de développement, car ces noyaux ne sont pas - a priori - stables.

De plus, on peut différencier les sources Vanilla, qui sont les sources non patchées. Les distributions peuvent proposer des noyaux légèrement modifiés, optimisés pour telle ou telle architecture, etc.
Le mieux est peut être d'installer la version du noyau via le système de paquetages de la distribution (mais rien n'empêche d'utiliser les vanilla sources)

Enfin, il faut vérifier que /usr/src/linux est un lien vers le répertoire contenant les sources du noyau à compiler: ln -sf /usr/src/linux-x.y.z /usr/src/linux

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

Avant de se lancer dans l'aventure, il est important de connaitre 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.
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 connait 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
  • si on souhaite utiliser l'interface graphique sous X, il faut autoriser l'affichage à root avec xhost +
  • devenir root (donc avoir le droit de faire des bêtises!): su
  • enfin, il faut aller dans le répertoire cd /usr/src/linux

Configuration

Pour configurer le noyau, il y a 4 possibilités:

  • modifier le .config à la main,
  • lancer la commande make config. Dans ce cas, on devra répondre à toutes les questions une par une,
  • lancer la commande make menuconfig. Ici, on va configurer le noyau via une interface graphique en ncurses (mode semi-graphique),
  • lancer la commande make xconfig. L'interface ici sera graphique sous X

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, dans l'ordre, afin de voir si elles s'appliquent à vous ou non.

De manière générale, il est bon de modulariser un maximum de choses, mais tout n'est pas possible (enfin... pas simplement :)
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.
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, 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 support ppp (pour internet par modem), le CD-ROM, etc.

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.

Dans le doute, il vaut mieux laisser les options par défaut.

Attention: cette doc a été mise à jour en se basant sur la version 2.6.13 du noyau! Si la version est différente (notamment la branche), il est possible que certaines options n'existent pas ou aient été déplacées.

Code maturity level options

Ca ne coûte rien de répondre Y ici!
Prompt for development and/or incomplete code/drivers: Y
Select only drivers expected to compile cleanly: Y

General setup

Support for paging of anonymous memory (swap): Y
System V IPC: Y
Sysctl support: Y
Pour permettre le hotplug: Support for hot-pluggable devices: Y
Et enfin: Kernel userspace events: Y

Loadable module support

Pour que le noyau puisse charger et décharger les modules selon ses besoins: Enable loadable module support: Y
Module unloading: Y
Automatic kernel module loading: Y

Processor type and features

C'est ici que vous définissez quel est votre type de processeur. Preemptible kernel: Y. Grâce à cette option, le noyau devient "préemptif". Cela permet d'avoir un noyau plus réactif.

Bus options

PCI support: Y
PCI device name database: Y

Executable file format

Kernel support for ELF binaries: Y
Kernel support for MISC binaries: M ou Y

Graphics support

Support for frame buffer devices: Y
A vous de choisir votre carte graphique!

Logo configuration
à vous de voir si vous voulez un beau logo de tux au démarrage!

Memory technologie Device

à voir selon votre matériel!

block devices

Loopback device support: Y

RAM disk support Y ou M si vous comptez utiliser un ramdisk
Initial RAM disk (initrd) support si vous comptez démarrer avec un ramdisk.

Device drivers

Dans la section character devices, il faut mettre en module la gestion de l'agp (/dev/agpart), ainsi que celle de son chipset.
Dans la section ATA/ATAPI/MFM/RLL support, il ne faut pas oublier de mettre Y pour la gestion de la DMA.

SCSI device support

C'est ici que vous pouvez configurer, en plus du SCSI, les lecteurs IOMEGA ZIP sur port parallèle, ainsi que le bus SATA. A partir du noyau 2.6, on n'utilise plus d'interface SCSI pour les graveurs de CD/DVD.

Networking options

Comme d'habitude, on ne garde, pour les pilotes, que ceux du matériel (ARCnet, TokenRing peuvent être désactivés. Ne garder dans l'ethernet que ce qui concerne la carte réseau,...) Si vous ne comptez pas utilisez l'IPv6 (ou si vous vous demandez ce que c'est), vous pouvez le supprimer.

L'IrDA et le Bluetooth peut être désactivé si vous ne l'utilisez pas.

Je vous conseille quand même de garder le PPP

ISDN

Ceci concerne les connexions numéris.

Unix98 PTY

Unix98 PTY support: Y
256 est un bon nombre maximum.

Filesystems

Ici, vous choisissez les systèmes de fichiers dont vous avez besoin (ext2, ext3, éventuellement ReiserFS).

Kernel automounter version 4 support: M
Ne pas oublier de vérifier CD-ROM/DVD Filesystems et DOS/FAT/NT Filesystems

Dans pseudo filesystems, mettre Y à: /proc
Virtual memory file system support

/dev file system support est obsolète et remplacé par udev.

Network File systems n'est utile que si vous montez des systèmes de fichier par le réseau.

Multimedia devices

Ici vous ajoutez vos pilotes pour les cartes radio, ainsi que l'acquisition vidéo (carte TV, webcam,...)

Sound

Ne pas utiliser OSS, mais ALSA.

USB support

Vous pouvez utiliser lsmod pour savoir quel module utiliser (entre EHCI, OHCI et UHCI). Ensuite, c'est à vous de savoir quel matériel vous avez!

Watchdog cards

Si vous vous demandez ce que c'est, c'est que vous n'en avez pas besoin!

Profiling support

Mettre N partout

Kernel hacking

Même si vous ne vous sentez pas l'âme d'un hacker, je vous conseille de mettre Y à
Kernel debugging
Magic SysRq Key

Comme cela, en cas de plantage du système, vous pourrez utiliser les touches magiques pour démonter les partitions et redémarrer "proprement" (sans appuyer sur le bouton reset)

Security options

Vous n'avez sûrement pas besoin de configurer SELinux ou d'autres méthodes de haute sécurité. Donc, un petit N suffit.

Cryptographic options

Les mettre en module ne fait pas de mal.

Library routines

Idem, en module, ça peut éventuellement servir.

La compilation

Pour lancer la compilation du noyau, rien de plus simple. Il suffit de lancer:
make && make bzImage modules_install

La compilation peut être relativement longue.

Dernière étape

Maintenant, on va préparer le système à redémarrer avec le nouveau noyau:
cp arch/architecture/boot/bzImage /boot/kernel-X.Y.Z architecture correspond à votre architecture (i386 pour un système 32bits, x86_64 pour un amd64)
cp System.map /boot/System.map-X.Y.Z

Si le fichier /boot/System.map est un lien, le supprimer, sinon le renommer. Ensuite, nous allons créer le lien suivant:
ln -s /boot/System.map-X.Y.Z /boot/System.map

Autant copier le fichier de configuration du noyau, on ne sait jamais:
cp .config /boot/config-X.Y.Z

Enfin, si vous utilisez un ramdisk au boot, il faut le recréer en lançant la commande suivante:mkinitrd, puis copier l'initrd dans /boot.

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 / 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 Y au lieu de M), vous pouvez vous passer d'initrd.

Il ne reste plus qu'à configurer le gestionnaire de démarrage (grub, lilo ou loadlin). Pour bien le faire, le mieux est de lire la doc sur léa!

Annexe : copies d'écran

make menuconfig donne l'écran suivant :

L'écran suivant contient la liste des sous-menus de configuration.
Déplacez vous avec les flèches, et tapez 'Entrée' pour entrer dans chaque sous-menu.

Linux Kernel v2.2.13 Configuration
------------------------------------------------------------------------------
+------------------------------- Main Menu -------------------------------
| Arrow keys navigate the menu. <Enter> selects submenus --->. |
| Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes, |
| <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help. |
| Legend: [*] built-in [ ] excluded <M> module < > module capable |
| +---------------------------------------------------------------------+ |
| | Code maturity level options ---> | |
| | Processor type and features ---> | |
| | Loadable module support ---> | |
| | General setup ---> | |
| | Plug and Play support ---> | |
| | Block devices ---> | |
| | Networking options ---> | |
| | SCSI support ---> | |
| | Network device support ---> | |
| | Amateur Radio support ---> | |
| | IrDA subsystem support ---> | |
| | ISDN subsystem ---> | |
| | Old CD-ROM drivers (not SCSI, not IDE) ---> | |
| | Character devices ---> | |
| | Filesystems ---> | |
| | Console drivers ---> | |
| | Sound ---> | |
| | Kernel hacking ---> | |
| | --- | |
| | Load an Alternate Configuration File | |
| | Save Configuration to an Alternate File | |
| | | |
| +---------------------------------------------------------------------+ |
+-------------------------------------------------------------------------+
| <Select> < Exit > < Help > |
+-------------------------------------------------------------------------

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.

make xconfig donne la fenêtre suivante :

Ce premier écran contient des boutons qui mènent aux différents sous-menus de configuration :

Pour chaque option, cliquez sur le bouton [Help] afin de lire la documentation de l'option.
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.


Copyright

Copyright © 06/11/1999, Jean-Christophe Cardot

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike iconCreative Commons Noncommercial
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique, Contexte non commercial 2.0 :
http://creativecommons.org/licenses/by-nc-sa/2.0/fr/