Overblog Tous les blogs Top blogs Technologie & Science Tous les blogs Technologie & Science
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU
Publicité

Bonjour, je vous présente mon blog qui concerne le systeme d'exploitation GNU/LINUX. je vais traiter je l'éspère en detail certains paramètrages de LINUX . Je m'occupe aussi de l'administration system d'une association les pc's fonctionnent sous Ubuntu. Bonne lecture a toutes et tous.

compiler son noyau linux

Publié le 31 Janvier 2006 par Sébastien SOURBET in tuxmag

Pourquoi un Nième Howto compiler son noyau ?
Je vous propose ce document suite au constat que j'ai fait : Depuis la sortie du kernel-2.6, un certain nombre de guides (comme lea-linux) n'ont pas été mis à jour, et proposent donc toujours les "vielles" commandes vallables pour les noyaux précédents. Alors que le noyua 2.6 dispose d'améliorations qui permettent de faciliter notablement la compilation. D'autres guides (comme trustonme) proposent un genre de mix...

a) 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 :)
- Vous pensez améliorez les performances de votre système en compilant pour votre matériel (l'espoir fait vivre)
en fait La plupart du temps, vous n'avez pas réellement besoin de nouveau noyau.

Vous pouvez récupérer la dernière version du noyau (ainsi que toutes les autres) sur kernel.org, ou avec votre gestionnaire de paquetages.

b) Quelle est la version actuelle de votre noyau ?

C'est facile, il suffit de lancer uname -r pour avoir la réponse.

Note sur la numérotation des noyaux :

Les noyaux sont numérotés sur 3 nombres: x.y.z, qui indiquent :

- Versions stables : le nombre du milieu (y) est pair. Par exemple : 2.4.18.
- Versions de développement : le nombre du milieu (y) est impair, par exemple 2.5.x.
attention il n'est pas recommandé à des utilisateurs peu expérimentés d'utiliser un noyau d'une version de développement, car ces noyaux ne sont (à priori) pas stables.

Source : Jean-Christophe de lea-linux

Prérequis

Installer les sources du noyau qu'on va compiler :

  1. Avec le package (ici pour Mandrake) :
    urpmi kernel-source
    vérifier qu'il s'agit de la bonne version = la même que le noyau qu'on va compiler.
  2. Avec le tarball :
    tar zxvf kernel-source-[version].tar.gz
  3. On fait repointer le lien /usr/src/linux vers les sources du nouveau noyau :
    rm -f linux
    ln -s linux-2.x.x linux

    En général, /usr/src/linux représente un lien vers le répertoire courant contenant les sources
    Ce lien est nécessaire à la compilation du noyau et afin que les fichier d'entêtes (les "includes") du noyau soient disponibles pour des compilations futures d'application.

HOWTO RAPIDE pour intel/AMD :

Vous avez installé les sources

La liste des commandes rapide, sans ouatemille explications :

cd /usr/src/linux
cp ./.config /outuveux
--> sauvegarder la configuration initilale.
(make mrproper --> Pour nettoyer l'arborescence des sources (attentionremet à zéro ton .config).)

make xconfig --> Choisis les options qui te conviennent.

make
make modules
make modules_install
make install

(ou make && make modules_install && make install si vous avez des courses à faire)

et voila, une compilation propre, nickel, sans accro...

Source : forum.mandrakeclub.com

Ces commandes sont détaillées ci-dessous.

HowTo détaillé

Vous avez installé les sources (vi je sais mais j'insiste !)

1) CONFIGURATION
1.1) 3 commandes disponibles :

make xconfig (graphique, le plus clair mais oblige à être sous X) ou :
make menuconfig (mode texte semi-graphique avec menus) ou encore :
make config (mode texte intégral)

Là il va falloir choisir les options.
Si vous ne l'avez jamais fait, sachez qu'il y en a un paquet, alors prévoyez un bon petit moment (et prenez des notes avant) !
* Annexe lea-linux sur les options

1.2) Récupèrer la configuration actuelle de votre noyau ( à partir du kernel 2.6.x )

Une des nouveautés du kernel 2.6 est le pseudo fichier /proc/config.gz, il suffit donc de faire :
zcat /proc/config.gz > /usr/src/linux/.config et le tour est joué !

2) COMPILATION DU NOYAU ET DES MODULES
Remarque : Si vous voulez juste recompiler le noyau, sans monter de version :

Déplacer le répertoire /lib/modules/2.x.x vers /lib/modules/old-2.x.x (par exemple), avant la phase de compilation.
Ce afin que l'installation des modules recrée ce répertoire et y place les nouveaux modules

Notez qu'il faut donc lancer make modules_install avant le "make install" du noyau.

Cela vous épargnera des problèmes si la nouvelle configuration du noyau a modifié celle des modules.
Si tout fonctionne correctement après le redémarrage, vous pourrez supprimer /lib/modules/old-2.x.x.

Les commandes :

à l'ancienne mode :

make dep && make clean && make bzImage pour compiler le noyau lui-même
make modules pour compiler les modules (i.e. les drivers).
Ne reste plus qu'à installer ces modules.

Avec les commandes modernes

Pour la plus part des logiciels, la commande make suffit à lancer la compilation, pour le noyau aussi !

  1. cd /usr/src/linux/
    make
  2. puis make modules ?????????
    make modules_install
  3. et enfin make install

Dans cet ordre, make install créé automatiquement les fichiers nécessaires dans le noyau.

=> Par exemple quand j'ai compilé le kernel-2.6.8.1-12mdk, make install créé dans /boot :
- config-2.6.8.1-12mdkcustom
- initrd-2.6.8.1-12mdkcustom.img
- System.map-2.6.8.1-12mdkcustom
- vmlinuz -> vmlinuz-2.6.8.1-12mdkcustom
- vmlinuz-2.6.8.1-12mdkcustom

make

Comme annoncé dans l'introduction, le make sert à générer un exécutable, pour ce faire il suit les indications contenues dans le .config.

Rappelons que la compilation est une traduction, au même titre que le passage de l'anglais au français. On passe d'un fichier ascii, contenant du code source C à un fichier binaire (contenant des 0 et des 1) appelé exécutable.

Si on lance "make install" maintenant, on obtient le message d'erreur :

make[1]: « arch/i386/kernel/asm-offsets.s » est à jour.
CHK include/asm-i386/asm_offsets.h
CHK include/linux/compile.h
Kernel: arch/i386/boot/bzImage is ready
sh /usr/src/linux-2.6.8.1-12mdkcustom/arch/i386/boot/install.sh 2.6.8.1-12mdkcustom arch/i386/boot/bzImage System.map ""
/lib/modules/2.6.8.1-12mdkcustom is not a directory.
mkinitrd failed:
(mkinitrd -v -f /boot/initrd-2.6.8.1-12mdkcustom.img --ifneeded 2.6.8.1-12mdkcustom)) at /usr/lib/libDrakX/boot loader.pm line 121.
make[1]: *** [install] Erreur 2
make: *** [install] Erreur 2

3) INSTALLATION DU NOUVAU NOYAU

Installation (les lignes suivantes sont à adapter à votre configuration, à la version du noyau...) :

3.1) Installer les modules dans le répertoire /lib/modules/2.x.x :

cd /usr/src/linux/
make modules_install

3.2) Installer le noyau :

make install le fait automatiquement. Sinon, on fait :

cd /usr/src/linux/
cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.7
cp System.map /boot/System.map-2.6.7

Ici j'installe un noyau 2.6.7, mais le nom n'a pas d'importance, évitez néanmoins de les appeler vmlinuz ou System.map tout court.
À ce stade votre noyau est installé, mais pour être totalement en règle avec la syntaxe Linux, exécutez également les commandes suivantes :

cd /boot
mv vmlinuz vmlinuz.old
ln -sf /boot/vmlinuz-2.6.7 vmlinuz
rm System.map
ln -s System.map-2.6.7 System.map

3.3) mkinitrd :

Fait automatiquement si on a respecté l'ordre donné ci-dessus :o))

Si votre distribution utilise un disque ram initial (initial ramdisk = initrd) pour démarrer, je pense à Mandrake et Fedora, tapez également :

mkinitrd -o /boot/initrd-2.6.7 /lib/modules/votre_nouveau_noyau
Nan, c'est plutot :
mkinitrd -f -v /boot/initrd-2.6.8.1-12mdkcustom.img 2.6.8.1-12mdkcustom (de : /lib/modules/nuvo_noyau )

3.4) Mise à jour du chargeur d'OS / Gestionnaire de boot :

Maintenant que votre noyau est installé il vous reste à mettre à jour votre chargeur d'OS, il peut s'agir de lilo ou grub.

Si vous utilisez Lilo, éditez /etc/lilo.conf pour mettre à jour avec la nouvelle version ou ajouter une entrée, puis lancez lilo :
/sbin/lilo
Détails ci-dessous.

Si vous utilisez Grub : (???)
lancez grub root (hdC,P) setup (hd0), en remplaçant C par le numéro du disque (hda:C=0, hdb:C=1, etc.) et P par le numéro de partition sur ce disque (hdx1:P=0, hdx2:P=1, etc.)
Détails ci-dessous.

Détails LILO

Editez votre fichier /etc/lilo.conf, focalisez sur la zone qui démarre Linux (label=linux), chez moi elle ressemble à ce qui suit, il peut y avoir quelques variations chez vous, cela n'a aucune importance :

image = /boot/vmlinuz
root = /dev/hda4
append = "hdc=ide-scsi hdd=ide-scsi"
label = Linux
vga = 773
read-only

Vous devez la dédoubler et modifier chacun des deux blocs :
# Ancien noyau :
image = /boot/vmlinuz.old
root = /dev/hda4
append = "hdc=ide-scsi hdd=ide-scsi"
label = mylinux-old
vga = 773
read-only

# Nouveau noyau :
image = /boot/vmlinuz
root = /dev/hda4
label = Linux
vga = 773
read-only

Le reste doit rester inchangé. Si vous utilisez une distribution avec initrd, votre /etc/lilo.conf ressemblera plutôt à ceci :
image=/boot/vmlinuz
label=linux
root=/dev/hdc6
initrd=/boot/initrd.img
append="quiet devfs=mount"
vga=788
read-only

Vous devez la dédoubler et modifier chacun des deux blocs :
# Ancien noyau :
image=/boot/vmlinuz.old
label = mylinux-old
root=/dev/hdc6
initrd=/boot/initrd.img
append="quiet devfs=mount"
vga=788
read-only

# Nouveau noyau :
image=/boot/vmlinuz
label=Linux
root=/dev/hdc6
initrd=/boot/initrd-2.6.7
append="quiet devfs=mount"
vga=788
read-only

Le reste doit demeurer inchangé. Quand vous êtes satisfait, validez vos changements en tapant :
/sbin/lilo -v

Détails GRUB :

Pour grub c'est le fichier /boot/grub/menu.lst, qu'il faut éditer, la section linux (title Linux) ressemble à :
title Linux
root (hd0,3)
kernel /boot/vmlinuz root=/dev/hda4 hdc=ide-scsi hdd=ide-scsi vga=773

Vous devez la dédoubler et modifier chacun des deux blocs :
# Ancien noyau :
title mylinux-old
root (hd0,3)
kernel /boot/vmlinuz.old root=/dev/hda4 hdc=ide-scsi hdd=ide-scsi vga=773

# Nouveau noyau :
title Linux
root (hd0,3)
kernel /boot/vmlinuz root=/dev/hda4 vga=773

Le reste doit rester inchangé.
Si vous utilisez une distribution avec initrd, votre /boot/grub/menu.lst ressemblera plutôt à ceci :
title Linux
kernel (hd0,5)/boot/vmlinuz root=/dev/hdc6 quiet devfs=mount vga=788
initrd (hd0,5)/boot/initrd.img

Vous devez la dédoubler et modifier chacun des deux blocs
[NB : si initrd est un symlink, suffit de le changer sur le nuvo initrd.img] :
# Ancien noyau :
title mylinux-old
kernel (hd0,5)/boot/vmlinuz.old root=/dev/hdc6 quiet devfs=mount vga=788
initrd (hd0,5)/boot/initrd.img

# Nouveau noyau :
title Linux
kernel (hd0,5)/boot/vmlinuz root=/dev/hdc6 quiet devfs=mount vga=788
initrd (hd0,5)/boot/initrd-2.6.7

4) ON REDÉMARRE

Voilà vous pouvez redémarrer, au boot vous choisirez Linux, en cas de difficultés vous pourrez toujours revenir à l'ancienne version en choisissant mylinux-old et recommencer plus consciencieusement.

Publicité
Publicité
Commenter cet article
Publicité