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

De Lea Linux
Aller à la navigation Aller à la recherche
(balises code)
 
(37 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'').


== Quel noyau ? ==
* '''Mandriva''': <span class="code"># urpmi kernel-headers kernel-source</span>


Dans un premier temps, pour savoir quel noyau on utilise, il suffit de lancer <tt>uname -sr</tt>.
* '''Fedora''': <span class="code"># yum install kernel-source</span>


'''Note sur la numérotation des noyaux :'''<br />Les noyaux sont numérotés depuis le 2.6.11 sur 4 nombres w.x.y.z (ce dernier est facultatif, il représente une modification mineure sur la version).
* '''Debian''': <span class="code"># apt-get install kernel-headers-$(uname -r) kernel-source-$(uname -r)</span>


* Versions stables : le deuxième nombre (y) est pair. Par exemple : 2.'''6'''.14.4
* '''Kubuntu''': <span class="code"># apt-get install linux-headers-N°_de_noyau linux-source-$(uname -r)</span>
* 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 [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'')
* '''Slackware''': <span class="code"># installpkg /où_est/kernel-source-2.6.x.tgz /où_est/kernel-headers-2.6.x.tgz</span>


Enfin, il faut vérifier que <tt>/usr/src/linux</tt> est un lien vers le répertoire contenant les sources du noyau à compiler:
* '''Gentoo''': <span class="code"># emerge gentoo-sources</span> (ou vanilla-sources, ou suspend2-sources, etc.)
<code>ln -sf /usr/src/linux-w.x.y.z /usr/src/linux</code>


== Dis-moi qui tu es, je te dirai quoi compiler ==  
== Dis-moi qui tu es, je te dirai quoi compiler ==  
Ligne 38 : 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<br />
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.
Ces petits softs sont disponibles en tant que paquet dans pas mal de distributions, et sont peut être déjà installés.<br />


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


Avant de passer à la suite il faut:
Avant de passer à la suite il faut:
* avoir l'environnement de développement <tt>gcc</tt>
* avoir l'environnement de développement <tt>gcc</tt>, <tt>make</tt>, ...
* si on souhaite utiliser l'interface graphique sous X, il faut autoriser l'affichage à ''root'' avec <code>xhost +</code>
* avoir les fichiers de développement des bibliothèques que l'on utilisera pour faire la configuration (ncurses, tcl/tk, Gtk, Qt, ...).
* devenir ''root'' (donc avoir le droit de faire des bêtises !): <code>su</code>
* pouvoir passer root pour installer le noyau (à la fin de la compilation)
* enfin, il faut aller dans le répertoire <code>cd /usr/src/linux</code>


== Configuration ==
== Configuration ==


Pour configurer le noyau, il y a 5 possibilités:
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.
* 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 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 ===
=== Préparer les sources ===


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.
Deux possibilités:
* Si vous avez téléchargé l'archive sur kernel.org, décompressez l'archive quelque part dans votre répertoire principal (par exemple, je les décompresse habituellement dans <tt>~/devel/kernel/</tt>).


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


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


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/>
=== Les outils de configuration ===


Dans le doute, il vaut mieux laisser les options par défaut.<br/>
Trois interfaces de configuration sont disponibles, choisissez l'une d'elle et passez à la suite.  


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


==== Code maturity level options ====
==== L'interface ncurses (mode semi-graphique) ====


Ca ne coûte rien de répondre Y ici !<br/>
Tapez : <span class="code">make menuconfig</span>
<code>Prompt for development and/or incomplete code/drivers</code>: Y<br/>
<div align="center">
<code>Select only drivers expected to compile cleanly</code>: Y
[[Image:kernel26-menuconfig.png]]
</div>  


==== General setup ====
==== L'interface Qt (mode graphique) ====


<code>Support for paging of anonymous memory (swap)</code>: Y<br/>
Tapez: <span class="code">make xconfig</span>
<code>System V IPC</code>: Y<br/>
<div align="center">
<code>Sysctl support</code>: Y<br/>
  [[Image:kernel26-xconfig.png]]
Pour permettre le hotplug:
</div>  
<code>Support for hot-pluggable devices</code>: Y<br/>
Et enfin :
<code>Kernel userspace events</code>: Y


==== Loadable module support ====
==== L'interface Gtk+(mode graphique) ====


Pour que le noyau puisse charger et décharger les modules selon ses besoins:
Tapez: <span class="code">make gconfig</span>
<code>Enable loadable module support</code>: Y<br />
<div align="center">
<code>Module unloading</code>: Y<br/>
  [[Image:kernel26-gconfig.png]]
<code>Automatic kernel module loading</code>: Y<br/>
</div>


==== Processor type and features ====
=== Les options disponibles ===


C'est ici que vous définissez quel est votre type de processeur.
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.
<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 ====
'''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>PCI support</code>: Y<br/>
==== Les options section par section ====
<code>PCI device name database</code>: Y<br/>
* '''<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)


==== Executable file format ====
=== Positionner les options ===


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


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


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


'''Logo configuration'''<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...
À vous de voir si vous voulez un beau logo de tux au démarrage !


==== Memory technologie Device ====
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, ...


À voir selon votre matériel !
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.


==== block devices ====
Quoi qu'il arrive, dans le doute, il vaut mieux laisser les options par défaut.
<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 ====
== La compilation ==


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/>
Pour lancer la compilation du noyau, rien de plus simple, il suffit de lancer : <span class="code">make</span>.
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 ====
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.


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


==== Networking options ====
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>.


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


Je vous conseille quand même de garder le <code>PPP</code>.
== Trucs & Astuces ==


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


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


==== Unix98 PTY ====
=== Personnaliser un noyau ===


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


==== Filesystems ====
=== Patcher un noyau ===


Ici, vous choisissez les systèmes de fichiers dont vous avez besoin (ext2, ext3, éventuellement ReiserFS).<br/>
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.


<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 ==
Pour lancer la compilation du noyau, rien de plus simple. Il suffit de lancer :<br/>
<code>
make && make modules_install
</code>
La compilation peut être relativement longue.
== Dernière étape ==
Maintenant, on va préparer le système à redémarrer avec le nouveau noyau :<br/>
<code>
cp arch/architecture/boot/bzImage /boot/kernel-W.X.Y.Z
</code>où ''architecture'' correspond à votre architecture (i386 pour un système 32bits,  x86_64 pour un amd64)
<br/>
<br/>
<code>
<br/>
cp System.map /boot/System.map-W.X.Y.Z
'''<b>[[Kernel-index|@ Retour à la rubrique Noyau et modules]]</b>'''
</code>
<br/>
 
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-W.X.Y.Z /boot/System.map</code>
 
Autant copier le fichier de configuration du noyau, on ne sait jamais :<br/>
<code>
cp .config /boot/config-W.X.Y.Z<br/>
</code>
 
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>
 
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.
 
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 !
 
== Annexe : copies d'écran ==
 
<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.
 
 
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.
 
Avec les noyau 2.4, <code>make xconfig</code> 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.
|}
 
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+.


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