Améliorer sa configuration | Compilation du Noyau


 dernière mise à jour : 20-08-2000
Pages de manuel, Dico et correcteur Français Menu: Configurer et Améliorer son Système Index Linux Configurer les périphériques

Pourquoi recompiler le Noyau ?

A chaque fois que vous installez une nouvelle carte (Son ,Ethernet ,Scsi ..), un périphérique : Votre noyau n'est plus adapté . Soit vous reconfigurez avec les nouvelles options, soit vous changez de noyau pour une version plus récente : Dans les deux cas il faut RECOMPILER .!

Je vais commenter la recompilation effectuée sur une distribution RedHat et Slackware, mais cela s'applique aux autres distributions, c'est également valable pour un noyau version 2.0.0, 2.0.36, 2.2.14 ou 2.2.xx .
Depuis la version 2.2.15 il est possible, si l'anglais vous pose quelques problèmes de compréhension, d'obtenir une archive pour mettre à jour l'aide en ligne du menu de compilation du noyau vers une version Française :
Vous trouverez quelques adresses au bas de ce document .
En principe ce qui suit est suffisant pour vous permettre de recompiler le noyau, mais garder à portée de main le Kernel HOWTO.


1.1-Vérification

Avant de commencer , nous allons vérifier la présence de certains fichiers pour essayer de mieux comprendre ce que vous allez faire .
Ces vérifications peuvent etre éffectuées sous Xwindow ,cela évite les commandes à taper :
Sous X :
vous lancez votre gestionnaire de fichiers XFM, KFM ou un autre, dans la barre de chemin s'affichera le chemin complet du répertoire .
Répertoires :
Vous devez trouver dans /usr/src/linux/ :
les répertoires suivants : arch , include , lib , modules , scripts
mais aussi (certainement?) documentation/ , drivers/ , fs/ , init/ , ipc/ , kernel/ , net/ , mm/ , ....
Les fichiers suivants :
Makefile et votre noyau vmlinux ou vmlinuz que vous pouvez sauvegarder .
Vous devez avoir dans /usr/src/linux/scripts/ les fichiers : Makefile , Configure ,Menuconfig et patch-kernel (entre autre) .
En fait /usr/src/linux/ est un lien vers le répertoire de la version du noyau installé : Pour moi c'est /usr/src/linux-2.2.14/ .
Si vous avez une version antérieure à la 2.0.0 , vous devriez la mettre à jour en récupérant les sources sur un site FTP (voir chapitre suivant ).
Vérifions les liens symboliques des répertoires suivants :
/usr/src/linux   est un lien de  /usr/src/linux-2.2.14
Ce lien se construit avec la commande : ln -s /usr/src/linux-2.2.14 /usr/src/linux
/usr/include/linux  est un lien de  /usr/src/linux/include/linux
/usr/include/asm   est un lien de  /usr/src/linux/include/asm-i386
Et si vous avez une carte SCSI :
/usr/include/scsi   est un lien de  /usr/src/linux/include/scsi
C'est fini ,vous pouvez quittez Xwindow .
Evidemment tout ça peut ce faire à partir d'une console en tapant les commandes appropriées !??


1.2-Installer les sources

3 possibilités :
1)vous garder les sources déjà installées car votre noyau correspond à vos options .
2)vous le mettez à jour avec un patch ou des modules .
3)vous installez de nouvelles sources pour un noyau tout neuf .
A partir de là logez vous en "root" .

1)vous ne changez rien vous allez utiliser les mêmes sources :
  Passez au chapitre suivant

2)vous installez un patch:
 copier le fichier .gz dans /usr/src/ puis :
# cd /usr/src
# gzip -cd patchxx.gz | patch -p0
(remplacer les x par les chiffres de votre version)
2)vous installez des modules :
Copier le(s) module(s) dans /lib/modules/
Et suivez les instructions de recompilation du noyau en effectuant après make zImage un :
# make modules
# make modules_install

3)Vous installez les sources :
Vous pouvez recupérer les sources (Modules et Patches) sur un site FTP . En principe les sources se trouve dans le répertoire /pub/linux/kernel/sources/ . Ne prenez pas la version avec le plus grand chiffre ,cela peut-être une version en cours de développement , prenez celle qui à un chiffre paire en deuxième position celui là est une version stable.
A l'installation les sources vont créer un répertoire /usr/src/linux : Donc avant l'installation il ne doit pas exister !... Il va falloir le supprimer (pas exactement) s'il existe .
Il serait téméraire (voir imprudent ) de suprimer simplement ce répertoire "linux" :
Nous allons le déplacer en lui donnant le nom du numéro de sa version : Si vous avez déjà recompiler votre noyau vous avez un répertoire /linux-x.x.x/ , dans le cas contraire il vous faut récupérer les sources pour recompiler votre noyau .
Il est possibe que vous ayez déjà un répertoire portant ce nom(avec numéro) ...Alors !
La vérification que vous avez éffectuer en premier vous dit qu'un répertoire "linux" et "linux-2.2.13" existe dans /usr/src/ ?
_vérifiez la version de votre noyau actuel : # uname -r
cela donne par exemple : # 2.2.13
_Votre répertoire /usr/src/linux-2.2.13/ contient bien les sources du noyau actuel !
_Si vous n'avez pas de répertoire /usr/src/linux-2.2.13/ : Alors déplaçez "linux" vers "linux-2.2.13" :
# cd /usr/src
# mv linux linux-2.2.13
Vérifiez qu'il n'y a plus de répertoire "linux" avant de décompresser les sources .
copier le fichier source .tar.gz dans /usr/src/ puis :
# cd /usr/src
# gzip -cd linux-2.x.x.tar.gz | tar xfv-
ou avec # tar zxpvf linux-2.x.x.tar.gz
si vous n'avez pas l'extension .gz : # tar xvf linux-2.x.x.tar
_Vérifiez que vous avez (à nouveau) un répertoire "linux" contenant les sources .
_Et surtout si vous installez des sources d'une autre distribution que la Slackware ,allez dans ce répertoire /linux/ et lisez la section Installing the Kernel du fichier README : Suivez les instructions.

1.3-Comment Pourquoi ?!

Avant de recompiler votre noyau , lisez attentivement ce qui suit cela vous permettra peut-être d'obtenir un noyau super adapté à vos besoin.
Attention aux commandes , vous devez toujours savoir ce que doit faire l'instruction que vous passez : si non en cas de problème il vous sera difficile d'y remédier !!!

Le noyau évolue constament et intègre des options permettant l'utilisation d'une plus grande variété de périphériques : Le numéro indiquant sa version change en tenant compte de la maturité du noyau : une version 2.1.0 peut-être une version Alpha , 2.1.2 peut-être une Beta mais la version stable de cette mouture sera 2.2.x .
La version 2.0.x a modifié l'installation du noyau par rapport aux versions 1.0.x précédentes aussi , dans /linux/documentation/changes , vous trouverez des indications sur cette mise à jour .
La version 2.2.x apporte une prise en charge supplémentaire, des périphériques et pilotes, fort appréciable :
Alors lisez la doc qui l'accompagne !

Les Modules et les Patches suivent l'évolution du noyau :
_Vous les trouverez sur un site FTP dans /v2.0 pour un noyau 2.0.x
Regardez cette page pour plus d'info sur l'installation des patches .

Il est possible à fin de réduire le volume du noyau d'utiliser des modules chargeables .
Les modules sont des fichiers objets se terminant par " .o" que l'on peut charger ou retirer à volonté .
Pour savoir si vous devez utiliser les modules regardez cette introduction aux modules .
Pour une meilleur compréhension je vous conseille en plus de Kernel HOWTO(section Modules) , de lire (c'est d'une limpidité) l'article de Eric Dumas :Les Modules chargeables , avant de prendre une décision sur la version du noyau et le type de gestion des modules que vous allez installer .
Pour indiquer ces Options au noyau il faut le configurer ..!

Trois possibilités (encore) :
make config est un script, en mode console, très simple mais efficace .
make menuconfig c'est celui que j'utilise est un menu en couleur très facile à utiliser .
make xconfig c'est un menu sous X à condition d'avoir installé "Tcl/Tk"
.

1.4-Nettoyage

Commence dans un premier temps , avec les liens symboliques et avant de configurer le noyau .
# cd /usr/include
# rm -rf linux
# rm -rf asm
# ln -s /usr/src/linux/include/linux linux
# ln -s /usr/src/linux/include/asm-i386 asm
Si ces liens étaient inexistants ou différents .
suivi de :
# cd /usr/src/linux
# make mrproper
Et après avoir créer les dépendances, faites : # make clean
.

2.1-Configurer le Noyau

Attachez une attention toute particulière à cette phase .
C'est certainement la plus délicate si vous ne comprenez pas les questions qui y sont posées !
Vous devez pour la plupart répondre par "y" ou "n" ,dans le doute laisser la réponse par défaut .
Je ne vais pas détailler ici les options du menu , aidez-vous de Kernel HOWTO.
Pour connaitre les options de votre noyau actuel :
# dmesg > conf_noyau   Editez ce fichier conf_noyau .
Vous pouvez l'imprimer et y noter les modifications que vous allez y apporter .
Vous également imprimer /boot/config ce fichier est le résultat de make menuconfig : Surtout ne l'éditez pas pour éviter les erreurs , mais copiez le sous un autre nom et éditez la copie .
Le menu va necessité des réponse du genre "y" pour activer et "n" pour enlever et "m" pour mettre en module .
Par exemple dans la section Network device support , pour le gestionnaire permettant d'attribuer 2 adresses à la même machine :
CONFIG_DUMMY = j'écris "n" si je n'en veut pas , "y" si je veux l'avtiver et "m" si je l'utilise comme module
dans la section Kernel hacking , CONFIG_PROFILE n'a d'intéret que pour une version Alpha ou Beta du noyau , si vous répondez "y" vous aurez un noyau plus gros et plus lent voir instable .

2.2-Compiler le Noyau

Après avoir créer les dépendances avec "make dep" ,vous allez réaliser une image "zImage" Vous tapez :
# make zImage
Si vous voulez seulement tester le nouveau noyau en le créant sur une disquette , à la place de make zImage ,tapez :
# make Zdisk
Suivant la puissance de votre processeur le temps de compilation peut varier de 10 mn à + 1 heure : D'où l'importance de passer un peu de temps sur la configuration du noyau pour vous éviter de devoir recommencer la recompilation en cas d'erreur et surtout si vous avez un 386 sx16 ?!.
Bon ! normalement cette image doit être créée dans /usr/src/linux/arch/i386/zImage
Mais votre noyau ? :
# make zlilo
Si vous utilisez LInux LOader , cette commande installera le noyau sous le nom de vmlinuz ou vmlinux (suivant la version) dans le répertoire /usr/src/linux/ ou à la racine ou encore pour RedHat dans /boot/
Pour une image de "boot" sur disquette, servez vous de /usr/src/linux/arch/i386/boot/zImage , que vous pouvez utiliser en la copiant en vmlinuz, à la racine ou dans /boot/ suivant votre distribution, au lieu d'utiliser make zlilo ou make boot pour RedHat .
Ensuite suivant, votre distribution, la version du noyau et surtout si vous avez installé une carte SCSI, il vous faudra recréer une image initrd avec la commande(pour RedHat) : mkinitrd /boot/initrd.img 2.0.36 , 2.0.36 étant la version du noyau et le nom du répertoire contenant les modules(dans /lib/modules/) :Pour cela le périphérique "loopback" doit etre disponible !

3 -En bref , la procédure !

_Récupérer les sources .
_Installer les sources .
_Vérifier les liens .
_Et on commence :
# cd /usr/src/linux
# make mrproper On fait un gros nettoyage
# make menuconfig On configure son noyau
# make dep Création des dépendances
# make clean Renettoyage des répertoires
# make zImage Compilation du noyau ,vous pouvez prendre un café ...
# make zlilo Installation du noyau et de LILO
# make modules si vous avez des modules , et un autre café ...
# make modules_install Installation de vos modules

Avec les versions 2.2.xx , le noyau est plus volumineux et vous pouvez recevoir un message d'erreur vous signalant de réduire votre noyau en utilisant make bzImage à la place de make zImage, suivez ce conseil .

Précaution :

Avant de relancer le système , il est recommandé de modifier /etc/lilo.conf pour pouvoir accéder à l'ancien noyau :
Renommer votre ancien noyau (que vous avez sauvegardé) par exemple en vmlinuz-2.2.xx (ou vmlinuz-2.0.xx) et éditez lilo.conf pour que celui-ci vous donne la possibilté de démarrer avec l'ancien noyau (avec la touche 'tab') .
Voici un exemple de ce que peut contenir /etc/lilo.conf :
#/etc/lilo.conf
#
#remplacer /dev/hda2 par votre partition linux ,
# le repertoire et le nom du noyau /boot/vmlinuz .

# boot=/dev/hda  #si LILO dans le MBR
boot=/dev/hda2	 # LILO sur la partition Linux
map=/boot/map
install=/boot/boot.b
keytable=/boot/fr-latin1.ktl
prompt
timeout=50
image=/boot/vmlinuz
	label=linux
	initrd=/boot/initrd
	root=/dev/hda2
	read-only
image=/boot/vmlinuz-2.2.xx
	label=old
	initrd=/boot/initrd
	root=/dev/hda2
	read-only
other=/dev/hda1
	table=/dev/hda
	label=dos
En cas de problème avec le nouveau noyau , au démarrage de LILO , appuyez sur [tab] et ceci apparait :
linux old dos
tapez old et vous retrouverez votre ancien système.

Pour ceux qui utilise une carte SCSI , il vous faudra recréer un fichier initrd.img avec la commande :
mkinitrd /boot/initrd.img 2.2.xx
Consultez la doc de votre distribution et des sources /usr/src/linux/drivers/scsi/


4 -Des adresses utiles :

www.kernel.org les sources du noyau, site officiel.
ftp.kernel.org les sources du noyau sur FTP
ftp.lip6.fr/pub/linux/kernel/sources/ les sources sur un mirroir FTP
www.traduc.org/kernelfr Documentation FR pour le menu de compilation du noyau.


haut de page