Compiler le noyau

De Lea Linux
Aller à la navigation Aller à la recherche

Compiler le noyau

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

Installez 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 (habituellement je les décompresse dans ~/dev/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. 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+). Noubliez donc pas d'installer les paquetages correspondant pour les utiliser. Les interfaces sont les suivantes:

  • L'interface ncurses (mode semi-graphique): make menuconfig

  • L'interface Qt (mode graphique): make xconfig
 
  • L'interface Gtk+ (mode graphique): make gconfig
 

Les options section par section

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

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

General setup

Loadable module support

Block layer

Processor type and features

Power management options (ACPI, APM)

Bus options (PCI, PCMCIA, EISA, MCA, ISA)

Executable file formats

Networking

Device Drivers

File systems

Instrumentation Support

Kernel hacking

Security options

Cryptographic options

Library routines

Configurer 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'outils de configuration du noyau, chaque question attends 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 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, ...).

Les options du make

Tapez simplement make help pour avoir l'ensemble des commandes possibles et ce qu'elles font.

Copyright

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

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