Vous êtes sur la page 1sur 34

Configurer, 

Compiler et Installer 
un noyau Linux personnalisé
Elies Jebri
Ai‐je besoin d'un nouveau 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 voulez absolument avoir la dernière version possible 

2
Ai‐je besoin de recompiler le noyau ?
Vous avez besoin de recompiler votre noyau si : 

• vous voulez optimiser votre système 
• vous voulez tester des fonctionnalités encore au stade expérimental 
• vous avez l'âme d'un aventurier, c'est votre première compilation 
• comme tout bon Geek, vous aimez compiler votre kernel ;o) 

Dans la plupart des cas, vous n'avez PAS besoin de recompiler votre 
kernel. 

3
Notions de base

4
Version du noyau
• Comment fonctionne la notation du kernel linux ?
• La <version> d'un noyau linux est formée d'une suite de 3 ou 4 
nombres sous la forme suivante : 2.6.x ou 2.6.x.y. 
• 2 : Numéro de version majeure du noyau. Le nombre correspond à la 
“génération” du noyau. 
• 6 : Numéro de version mineure du noyau. 
• x : Numéro de révision du noyau. 
• y : Numéro de “patch level” du noyau. 
• Exemple : 2.6.22.1

5
Quels patchs appliquer à quelle version ?
Un patch noyau va mettre à jour le code source seulement d'une version spécifique du noyau à une 
autre version spécifique. 

Voici comment les différents patchs peuvent être appliqués : 
• Les patchs pour noyau stable s'appliquent sur une version de base du noyau. 
Exemple : Le patch 2.6.21.10 s'applique uniquement sur une version 2.6.21. 
Un 2.6.21.10 ne s'applique pas sur une version 2.6.21.9, ou sur tout autre version. 
• Les patchs pour noyau de base s'appliquent seulement sur la version précédente de version de 
base du noyau. 
Exemple : Le patch 2.6.23 s'applique seulement sur la version 2.6.22 du noyau. Il ne s'applique pas 
sur une version 2.6.22.y, ou sur tout autre version. 
• Les patchs incrémentaux mettent à jour une version spécifique vers une autre version spécifique. 
Exemple : Le patch 2.6.22.10‐11 s'applique sur une version 2.6.22‐10 uniquement pour obtenir une 
version 2.6.22.11

6
Noyau 3.x (stable/EOL, mainline, End of Life, 
longterm)
• Les noyaux se déplacent de la catégorie "mainline" à "stable", 
• deux choses peuvent se produire: 
• Ils peuvent atteindre "End of life" après quelques bugsfix, ce qui signifie que 
les responsables du noyau ne publieront plus de corrections de bugs pour 
cette version du noyau, ou 
• Ils peuvent être mis en maintenance "longterm", ce qui signifie que les 
responsables fournissent des corrections de bugs pour cette révision de 
noyau pour une période de temps beaucoup plus longue. 

7
Patcher linux‐3.X
• Vous pouvez également mettre à jour entre les versions 3.x par patch.
• Les patchs sont distribués dans le format classique gzip ou bzip2 
• Pour installer en patchant, récupérer tous les fichiers de patch plus récents, 
entrez dans le répertoire de haut niveau des sources du noyau (linux‐3.X) 
et exécuter :
gzip -cd ../patch-3.x.gz | patch -p1
Ou
bzip2 -dc ../patch-3.x.bz2 | patch -p1
• Remplacez "x" pour toutes les versions plus grandes que la version "X" de 
votre arbre source courant, dans l’ordre.

8
Patcher linux‐3.X.Y
• Contrairement aux patchs pour les noyaux 3.x, les patchs pour les 
noyaux 3.x.y (aussi connus comme les noyaux‐stables) ne sont pas 
incrémentaux mais s'appliquent directement au noyau 3.x de base.
• Par exemple, si le noyau de base est le 3.0 et que vous voulez 
appliquer le patch 3.0.3, vous ne devez pas appliquer d'abord les 
patchs 3.0.1 et 3.0.2. 
• De même, si vous utilisez la version du noyau 3.0.2 et que vous 
souhaitez passer à 3.0.3, vous devez d'abord inverser le patch 3.0.2 
(soit patch ‐R)  avant l'application du patch 3.0.3.

9
Qu'est ce qu'un kernel "vanilla" ?
• Vanilla est le nom pour quelque chose qui ne contient aucun patch, 
modifications ou autres extras ce‐que‐vous‐voulez. 
• Dans le monde logiciel, vanilla signifie donc usuellement le "package 
original". 
• Dans le cas du noyau Linux, c'est une référence au noyau officiel, 
disponible sur www.kernel.org

10
Noyau et modules
Il y a typiquement 2 voies pour intégrer un driver dans votre système : 
• le driver peut être compilé directement dans le noyau (compilation en dur). 
• Un tel noyau (en une pièce) est appelé un noyau monolithique. Quelques drivers n'existent 
que sous cette forme. 
• le driver peut être chargé dans le noyau à la demande. 
• Dans ce cas, le noyau est appelé noyau modulaire. 
• Ceci à l'avantage que seuls les drivers réellement requis par le système sont chargés et que le 
noyau ne contient rien qui ne soit pas nécessaire. 
• Le noyau Linux est modulaire la plupart du temps (sauf pour des kernels
embarqués), mais de nombreux drivers et fonctions sont intégrées au noyau. 
• Le choix des drivers qui doivent être compilés dans le noyau et ceux qui doivent 
être chargés à la demande est définit par la configuration du noyau. 

11
Noyau monolithique

Gestion du réseau

Pilotes

Gestion de la mémoire

12
Noyau modulaire (micro‐noyau)

Gestion du
réseau

Gestion de la Micro-noyau
mémoire

Pilotes

13
Quels drivers compiler dans le noyau, et lesquels 
doivent être compilés comme modules ?
• Basiquement, les composants non requis pour le démarrage du 
système doivent être compilés comme modules. 
• Ceci assure que le kernel ne devient pas trop gros et ne puisse être 
chargé par le BIOS ou par un chargeur de démarrage. 
• Aussi, intégrer le driver ou la fonction dans le noyau le rend (en 
théorie) plus stable et plus sécurisé. 
Exemple : Les drivers pour ext3, SCSI sur les systèmes basés sur SCSI et 
les drivers similaires devraient être compilés dans le noyau. En 
contraste, les autres, comme isofs, msdos, ou le son, qui ne sont pas 
requis pour le démarrage du système, devraient être compilés comme 
modules.
14
Quels drivers compiler dans le noyau, et lesquels 
doivent être compilés comme modules ?
• Mais notez que ce n'est pas forcément une règle stricte à respecter.
• Les drivers scsi ne sont pas forcément intégrés au noyau. 
• Il faut alors que le ramdisk intègre les drivers et que le noyau monte 
tout de suite après. 
• Idemmement, les drivers ‘son’ peuvent être intégrés au noyau sans 
problème. 
• C'est même obligatoire pour certaines cartes. 
• Le problème est que s'il y a des mises à jour d'alsa par exemple, il faut 
recompiler le noyau, alors qu'une mise à jour du modules 
correspondants est plus rapide. 

15
Où sont situés tous ces fichiers ?
• Les sources du noyau sont situés dans /usr/src/<linux‐version>
• Il y a également un lien symbolique /usr/src/linux/ qui pointe vers ce 
répertoire.
• Le noyau est situé dans le repertoire /boot/
• Les modules noyau sont situés dans /lib/modules/<version>/

16
Quels fichiers composent le noyau ?
Le noyau est composé de 3 parties : 
• vmlinuz est l'image du noyau ‐ le fichier qui contient le noyau. 
• System.map est le fichier qui contient les symboles noyau requis par 
les modules pour assurer le lancement avec succès des fonctions du 
noyau. 
• initrd ‐ initial ram disk ‐ est un fichier qui charge les drivers compilés 
en modules nécessaire au démarrage du noyau. 
Ces trois fichiers sont dépendants et chacun est regénéré à chaque 
compilation. 

17
Installation des sources

18
Pré‐requis
Veillez à ce que ces packages soient installés : 
• les outils de développement noyau. Les packages ncurses, ncurses‐
dev, automake, autoconf, Qt3 (pour la configuration graphique) sont 
requis. Les autres sont des dépendances. 
• les sources du noyau, à jour si possible. 
Yum ‐y install ncurses‐devel
Yum ‐y install qt3‐devel libXi‐devel gcc‐c++

19
Installation des sources
• Vous trouverez sur Kernel.org, toutes les sources des noyaux actuels, 
précédents ou en développement.
• linux‐<version>.tar.gz ou linux‐<version>.tar.bz2 contient toutes les 
sources du noyau. 
• patch‐<version>.tar.gz ou patch‐<version>.tar.bz2 contient la mise à 
jour des sources du noyau. 
cp archive /usr/src/
tar x[jJz]f linux-<version>.tar.{bz2,xz,gz}
ln -s /usr/src/linux-<version> /usr/src/linux

20
Exemple ‐1‐
cp linux‐3.11.8.tar.xz /usr/src/
cp patch‐3.11.8.xz
cp patch‐3.11.9.xz
cd /usr/src/
tar xJf linux‐3.11.8.tar.xz
unxz patch‐3.11.8.xz
unxz patch‐3.11.9.xz
rm ‐f patch‐3.11.8.xz patch‐3.11.9.xz linux‐3.11.8.tar.xz

21
Exemple ‐2‐
• Renverser les sources
• cd /usr/src/linux/
• make kernelversion
3.11.8
• patch ‐p1 ‐R < ../patch‐3.11.8
• make kernelversion
3.11.0

22
Exemple ‐3‐
• cd /usr/src/linux/
• patch ‐p1 < ../patch‐3.11.9
• make kernelversion
3.11.9
• head ‐5 Makefile
• cd /usr/src/
• mv linux‐3.11.8/ linux‐3.11.9/
• ln ‐s ‐f linux‐3.11.9 linux

23
Astuces pour mettre le noyau à jour
• La plupart des linuxiens se servent de patch uniquement pour le noyau. 
• La méthode la plus simple consiste à utiliser le script shell « patch‐kernel », situé 
dans le répertoire /script des sources du noyau. 
• Le script suppose que les sources sont placées dans /usr/src/linux, et que le patch 
est situé dans le répertoire courant. 
• Ces deux choix par défaut peuvent être modifiés par des options sur la ligne de 
commande : 
patch‐kernel [répertoire des sources] [répertoire du patch]

24
Compilation

25
Nettoyage
• Cette étape peut s'appliquer dans le cas où vous avez déjà des 
sources compilées dans le dossier /usr/src/linux/.
• Elle s'utilise principalement lorsque vous avez modifié plusieurs fois 
votre configuration et que vous avez passé certains modules dans le 
kernel. 
• En effet, il peut être parfois utile de supprimer les fichiers compilés de 
l'arborescence des sources avant de commencer la procédure de 
compilation. 
• Il existe plusieurs commande pour effectuer cette étape de 
“nettoyage”.
26
Nettoyage
• Nettoyage des fichiers compilés (ne laisser que les sources) :
[root@linux /usr/src/linux]# make clean
• Pour supprimer également la configuraiton :
[root@linux /usr/src/linux]# make mrproper
• Uniquement pour les anciens noyaux (2.4.x) :
[root@linux /usr/src/linux]# make dep

27
Récupération de la configuration
• cd /usr/src/linux/
• cp /boot/config‐<version‐actuelle>    .config
• make oldconfig
Valeur par défaut à toutes les questions en fonction du contenu de votre fichier 
.config existant. Et poser des questions sur les nouveaux symboles de 
configuration.

28
Configuration
• Dans le répertoire des sources :
[root@linux /usr/src/linux]# make menuconfig
• Se déplacer dans les menus et activer les fonctionnalités voulues avec 
la touche “espace”
• * : fonctionnalité en dur
• M : fonctionnalité en module
• On sauvegarde la configuration en faisant « exit »

29
Configuration

30
Autres méthodes de configuration :
• Poser une question pour chaque fonctionnalité en mode texte :
[root@linux /usr/src/linux]# make config

propose une longue suite de questions‐réponses (y/n/m)

• Lancer un menu fonctionnant sous X :
[root@linux /usr/src/linux]# make xconfig
propose une configuration en mode graphique (Qt)
[root@linux /usr/src/linux]# make gconfig
propose une configuration en mode graphique (GTK)

31
Compilation

32
Compilation manuelle
• Passons à la compilation du noyau et des modules proprement dite.
• Soyez patient durant cette étape, la compilation du noyau peut 
prendre du temps, selon la configuration choisie et votre matériel.

• cd /usr/src/linux/
• make

33
Installation manuelle
• Maintenant, les modules compilés doivent être installés.
[root@linux /usr/src/linux]# make modules_install

• Après que le noyau soit compilé, il doit être installé pour que le 
système puisse booter dessus.
[root@linux /usr/src/linux]# make install

34

Vous aimerez peut-être aussi