Chapitre 8. Compilation du noyau de Linux

Table des matières
8.1. Installation des sources de Linux
8.2. Lancement du programme de configuration
8.3. Choix des options de configuration
8.4. Compilation du noyau
8.5. Installation du noyau
8.6. Compilation des modules
8.7. Installation des modules

La compilation du noyau est une spécificité des systèmes libres, qui n'est possible que parce que l'on dispose des sources du noyau. Cependant, même pour certains Unix commerciaux, il est possible d'effectuer une édition de liens, les modules du noyau étant fournis sous la forme de fichiers objets. La compilation ou l'édition de liens du noyau est une opération technique qui peut surprendre un habitué des systèmes fermés que sont par exemple Windows ou OS/2. Cependant, elle permet d'obtenir un noyau très petit, optimisé pour la machine sur laquelle il tourne, et donc à la fois économe en mémoire et performant. Il est donc recommandé d'effectuer cette compilation : pourquoi conserver un monstre capable de gérer des périphériques qui ne sont pas et ne seront jamais installé sur votre système ?

La compilation du noyau de Linux nécessite de disposer des dernières sources du noyau (version 2.4.17. au 22/10/2001) et d'un compilateur. Il est évident que le compilateur idéal est le compilateur GNU C/C++ GCC. On utilisera la version la plus stable actuellement, à savoir la version 2.95.3. Je supposerai dans la suite de ce document que vous disposez de la dernière version du noyau, à savoir la version 2.4.17.

La compilation du noyau n'est pas très difficile, cependant, elle nécessite de répondre correctement aux questions de configuration. Les erreurs peuvent être multiples, et seront fatales. Il est donc fortement conseillé de disposer d'une disquette de démarrage afin de réparer le système en cas d'erreur. Par ailleurs, il faut toujours conserver le dernier noyau utilisable en sauvegarde dans le répertoire /boot/. Il faut également ajouter une entrée spécifiant ce noyau dans le programme de démarrage (lilo), afin de pouvoir sélectionner l'ancien noyau en cas d'erreur. Ces opérations seront également décrites en détail plus loin.

La compilation du noyau se passe en quatre étapes :

8.1. Installation des sources de Linux

Les sources du noyau peuvent être trouvées sur le site kernel.org. Il est possible de récupérer les sources complètes, sous la forme d'une archive comprimée d'environ 24 Mo. Toutefois, si l'on dispose déjà d'une version complète des fichiers sources, il est envisageable de ne télécharger que les fichiers différentiels de cette version à la version courante (ce que l'on appelle classiquement des « patches »).

Il est recommandé d'installer les sources du noyau dans un autre répertoire que celui où se trouvent les fichiers sources de votre distribution, car ceux-ci contiennent les fichiers d'en-tête C qui ont été utilisés pour générer la bibliothèque C du système et sont donc nécessaires à la compilation des programmes. Le remplacement des fichiers sources du noyau imposerait donc, en toute rigueur, de recompiler la librairie C du système (en pratique cependant, il est rare que les en-têtes du noyau soient modifiés au point de générer des incompatibilités, du moins dans une même série de noyaux). Cette opération est extrêmement technique, risquée et longue, il est donc logique que l'on s'en dispense. Les plus motivés trouveront en annexe la manière de procéder pour recompiler la librairie C.

Généralement, les sources du noyaux Linux sont installés dans le répertoire /usr/src/linux/. On devra donc renommer temporairement le répertoire originel avant d'installer les sources du nouveau noyau, ou au moins en faire une sauvegarde. Une autre solution est d'installer les fichiers du noyau dans un répertoire /usr/src/linux<version>/ et d'utiliser un lien symbolique /usr/src/linux/ pour sélectionner la version que l'on veut compiler. Cela permet de conserver plusieurs jeux de sources de versions différentes, et de travailler sur la version courante dans le répertoire /usr/src/linux/ facilement. Les commandes suivantes permettront d'extraire les sources dans le répertoire dédié au sources de Linux. Elles supposent qu'il existe déjà un lien symbolique /usr/src/linux/ vers le répertoire des fichiers sources actuels de Linux :

cd /usr/src
rm linux
mkdir linux-2.4.17
ln -s linux-2.4.17 linux
tar xvfz linux-2.4.17.tar.gz

Une fois le nouveau noyau compilé et installé, on pourra rétablir la dépendance de la librairie C sur les fichiers d'en-tête de l'ancien noyau en rétablissant le lien symbolique à sa valeur initiale.

Si l'on dispose déjà d'une version complète des fichiers sources, et que l'on désire appliquer un patch, il faut décomprimer le fichier de patch avec la commande suivante :

gunzip fichier.gz
fichier.gz représente le fichier de patch comprimé (en supposant qu'il ait été comprimé à l'aide de gzip). L'application du patch se fait de la manière suivante :
patch -p0 < fichier

Cette commande doit être lancée à partir du répertoire /usr/src/. Elle suppose que les fichiers sources de Linux pourront être trouvées dans le répertoire ./linux/. Dans cette ligne de commande, fichier représente le nom du fichier de patch précédemment décomprimé, et l'option -p0 indique au programme patch d'utiliser les noms de répertoires relatifs au répertoire courant (à savoir ./linux/). Si les sources sont installées dans un autre répertoire, il faudra modifier l'option -px passée en paramètre au programme patch, où x est le nombre de niveaux de répertoires à ignorer pour l'application du patch. Consultez la page de manuel patch pour plus de détails sur cette option.

Il est recommandé de télécharger au moins une fois les sources complètes du noyau, et de ne pas utiliser les sources fournies avec la distribution que vous utilisez. En effet, certaines distributions modifient les sources et on ne peut donc pas leur appliquer les patches standards.