Compiler le noyau
Le noyau (kernel) de Linux : le compiler
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 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. Il serait suffisant de rester à jour avec votre distribution puisque celle-ci s'occupe des logiciels qui ont des problèmes de sécurité par exemple.
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 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.
Enfin, 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 distristibution (mais rien n'empêche d'utiliser les vanilla sources).
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
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.
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.
Pour configurer le noyau, il y a 5 possibilités:
- modifier le .config à la main (à déconseiller),
- lancer la commande
make config
. Dans ce cas, on devra répondre à toutes les questions une par une (à déconseiller aussi), - 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 et utilisera la biliothèque QT, - lancer la commande
make gconfig
. L'interface ici sera graphique et utilisera la biliothèque GTK+.
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.
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 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 à initrd, 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.
Quoi qu'il arrive, dans le doute, il vaut mieux laisser les options par défaut.
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.
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
À 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. À 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.
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
.
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: 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). Pour bien le faire, le mieux est de lire la doc sur léa !
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 champs extra-version. Pour cela, avant de lancer la compilation, éditez le fichier Makefile qui se trouve à la racine des sources et renseignez le champs EXTRAVERSION avec un texte qui décrit votre extra-version (par exemple EXTRAVERSION = -debug ou bien EXTRAVERSION = -production, etc).
Les options du make
Tapez simplement make help
pour avoir l'ensemble des commandes possibles et ce qu'elles font.
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.
Avec les noyau 2.4, 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. |
Pour les noyaux 2.6, deux choix sont possibles : make xconfig
ou make gconfig
suivant le besoin d'une interface en QT ou en GTK+.
Copyright
Copyright © 06/11/1999, Jean-Christophe Cardot
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/ |