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

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


<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>
= Compiler le noyau =
 
par Jean-Christophe
 
Où vous apprendrez à compiler votre noyau Linux sans soucis.</div>


== Quelques rappels ==
== Quelques rappels ==
Le noyau est le cœur 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 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, ou kernel, est composé d'une partie statique, à laquelle on peut greffer des modules.
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.
La partie statique sera toujours chargée en mémoire, tandis que les modules ne le seront qu'en cas de besoin.


== Vous avez besoin d'un nouveau noyau si : ==
== 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,
* 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. Il serait suffisant de rester à jour avec sa distribution puisque celle-ci s'occupe des logiciels qui ont des problèmes de sécurité par exemple.
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 <span class="code">uname -sr</span>. Vous devriez voir apparaître quelque chose du genre: <tt>Linux 2.6.15</tt>.
 
<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>
 
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:
 
* '''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'').
 
* '''Mandriva''': <span class="code"># urpmi kernel-headers kernel-source</span>


== Quel noyau ? ==
* '''Fedora''': <span class="code"># yum install kernel-source</span>


Dans un premier temps, pour savoir quel noyau on utilise, il suffit de lancer <tt>uname -sr</tt>.
* '''Debian''': <span class="code"># apt-get install kernel-headers-$(uname -r) kernel-source-$(uname -r)</span>


'''Note sur la numérotation des noyaux :'''<br/>
* '''Kubuntu''': <span class="code"># apt-get install linux-headers-N°_de_noyau linux-source-$(uname -r)</span>
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é 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.
* '''Slackware''': <span class="code"># installpkg /où_est/kernel-source-2.6.x.tgz /où_est/kernel-headers-2.6.x.tgz</span>


Enfin, 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 distristibution (mais rien n'empêche d'utiliser les ''vanilla sources'').
* '''Gentoo''': <span class="code"># emerge gentoo-sources</span> (ou vanilla-sources, ou suspend2-sources, etc.)


== Dis-moi qui tu es, je te dirai quoi compiler ==  
== Dis-moi qui tu es, je te dirai quoi compiler ==  
Ligne 35 : Ligne 50 :


Pour ne rien oublier, il existe quelques petits outils bien sympathiques.
Pour ne rien oublier, il existe quelques petits outils bien sympathiques.
''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.
''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.
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.


Ligne 49 : Ligne 64 :
== Configuration ==
== Configuration ==


Si vous avez téléchargé l'archive sur kernel.org, décompressez l'archive quelque part dans votre répertoire principal et mettez vous dans le répertoire qui apparait.
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.


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 et positionnez vous dans le répertoire des sources.
=== Préparer les sources ===


Pour configurer le noyau, il y a 5 possibilités:
Deux possibilités:
* modifier le <tt>.config</tt> à la main (à déconseiller),
* 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>).
* lancer la commande <code>make config</code>. Dans ce cas, on devra répondre à toutes les questions une par une (à déconseiller aussi),
* 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 et utilisera la biliothèque QT,
* lancer la commande <code>make gconfig</code>. L'interface ici sera graphique et utilisera la biliothèque GTK+.


=== Les options ===
* 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.


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.
Pour la suite, nous assumons que vous vous serez positionné à la racine des sources du noyau.


De manière générale, il est bon de modulariser un maximum de choses, mais tout n'est pas possible (enfin... pas simplement :).
=== Les outils de configuration ===


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, le système de fichiers que vous utilisez, 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 ce document s'adresse aux débutants...
Trois interfaces de configuration sont disponibles, choisissez l'une d'elle et passez à la suite.  


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


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.
==== L'interface ncurses (mode semi-graphique) ====


Quoi qu'il arrive, dans le doute, il vaut mieux laisser les options par défaut.
Tapez : <span class="code">make menuconfig</span>
<div align="center">
[[Image:kernel26-menuconfig.png]]
</div>


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


==== Code maturity level options ====
Tapez: <span class="code">make xconfig</span>
<div align="center">
  [[Image:kernel26-xconfig.png]]
</div>


Ca ne coûte rien de répondre Y ici !<br/>
==== L'interface Gtk+(mode graphique) ====
<code>Prompt for development and/or incomplete code/drivers</code>: Y<br/>
<code>Select only drivers expected to compile cleanly</code>: Y


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


<code>Support for paging of anonymous memory (swap)</code>: Y<br/>
=== Les options disponibles ===
<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


==== Loadable module support ====
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.


Pour que le noyau puisse charger et décharger les modules selon ses besoins:
'''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.
<code>Enable loadable module support</code>: Y<br />
<code>Module unloading</code>: Y<br/>
<code>Automatic kernel module loading</code>: Y<br/>


==== Processor type and features ====
==== 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)


C'est ici que vous définissez quel est votre type de processeur.
=== Positionner les options ===
<code>Preemptible kernel</code>: Y. Grâce à cette option, le noyau devient « préemptif ». Cela permet d'avoir un noyau plus réactif.


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


<code>PCI support</code>: Y<br/>
Dans l'outil de configuration du noyau, chaque question attend une réponse:
<code>PCI device name database</code>: Y<br/>
* '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.


==== Executable file format ====
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 :).


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


==== Graphics support ====
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, ...


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


'''Logo configuration'''<br/>
Quoi qu'il arrive, dans le doute, il vaut mieux laisser les options par défaut.
À vous de voir si vous voulez un beau logo de tux au démarrage !
 
==== Memory technologie Device ====
 
À voir selon votre matériel !
 
==== 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.
 
==== Device drivers ====
 
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.
 
==== 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.
À 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 utiliser l'IPv6 (ou si vous vous demandez ce que c'est), vous pouvez le supprimer.<br/>
 
L'IrDA et le Bluetooth peut être désactivé si vous ne l'utilisez pas.<br/>
 
Je vous conseille quand même de garder le <code>PPP</code>.
 
==== ISDN ====
 
Ceci concerne les connexions numéris.
 
==== Unix98 PTY ====
 
<code>Unix98 PTY support: Y</code><br/>
256 est un bon nombre maximum.
 
==== Filesystems ====
 
Ici, vous choisissez les systèmes de fichiers dont vous avez besoin (ext2, ext3, éventuellement ReiserFS).<br/>
 
<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/>
 
Dans <code>pseudo filesystems</code>, mettre Y à :
<code>/proc</code><br/>
<code>Virtual memory file system support</code><br/>
 
<code>/dev file system support</code> est obsolète et remplacé par <code>udev</code>.
 
<code>Network File systems</code> 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 à<br/>
<code>Kernel debugging</code><br/>
<code>Magic SysRq Key</code><br/>
 
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 ==
== La compilation ==


Pour lancer la compilation du noyau, rien de plus simple. Il suffit de lancer : <code>make</code>.
Pour lancer la compilation du noyau, rien de plus simple, il suffit de lancer : <span class="code">make</span>.


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


== Installation ==
== 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: <code>su -c 'make modules_install && make install'</code>.  
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).
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]).  
 
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]). Pour bien le faire, le mieux est de lire la doc sur léa !


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


== Annexe : copies d'écran ==
== Trucs & Astuces ==
 
<code>make menuconfig</code> 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.


=== Le fichier <tt>.config</tt> ===


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


Avec les noyau 2.4, <code>make xconfig</code> donne la fenêtre suivante :
=== Personnaliser un noyau ===


[[Image:kernel-make_xconfig.png]]
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>, ...).


Ce premier écran contient des boutons qui mènent aux différents sous-menus de configuration : <br />
=== Patcher un noyau ===


{|
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.
|
[[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.
|}


Pour les noyaux 2.6, deux choix sont possibles : <code>make xconfig</code> ou <code>make gconfig</code> suivant le besoin d'une interface en QT ou en GTK+.
<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 à 10: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/