Wiki Linux SMH

   

Flux RSS

Compilation Du Noyau

Cet article nécessite encore des ajouts/modifications.
N'hésitez pas à apporter votre contribution en complétant cet article.
  Fritz : compléter avec les infos de K. (cf mails)

1 - Préambule

Les nouvelles versions de noyau sortent régulièrement. N'hésitez pas à adapter vos lignes de commande en fonction des dernières versions de noyau afin de bénéficier des derniers drivers, et surtout des dernières mises à jour de sécurité.

Ceci est une note. La validité d'une note varie en fonction des évolutions de la distribution. Si cette information n'est plus valable, n'hésitez pas à la modifier ou à signaler le problème à l'adresse "contact (at) smhteam.info".

1.1 - Qu'est ce qu'un noyau (kernel en anglais)

Le noyau de Linux (ce qui est un abus de langage d'ailleurs, vu que Linux n'est que un noyau autour duquel sont greffées des applications), sert à initialiser le système et à charger en mémoire tout ce qu'il faut pour que le matériel soit géré.

Pour connaître la version du kernel (noyau) en cours d'utilisation :

$ uname -r

Exemple pour un noyau 2.6.16 :

$ uname -r 
2.6.16

Attention : ceci ne signifie pas que ce soit la seule version installée : il s'agit de la version utilisée actuellement. Pour avoir la liste des kernels installés, regardez la liste des fichiers vmlinuz-* dans /boot) :

$ ls /boot/vmlinuz-*

Exemple :

$ ls /boot/vmlinuz-*
/boot/vmlinuz-2.6.16  /boot/vmlinuz-2.6.17-2-k7  /boot/vmlinuz-2.6.17-fritz

Pour obtenir plus d'informations sur votre système :

$ uname -a

Exemple :

 $ uname -a 
 Linux LightStar 2.6.16 #1 Tue Oct 10 20:36:58 CEST 2006 i686 GNU/Linux

1.2 - Quel intérêt de (re)compiler son noyau ?

Un utilisateur de Linux peut se retrouver dans 3 cas de figure :

  • Tout son matériel n'est pas détecté par son noyau
  • Son matériel est détecté, mais il souhaite optimiser le noyau pour avoir un démarrage plus rapide, un jolli écran de boot, etc.
  • Son noyau lui convient parfaitement tel qu'il est et tout son matériel est détecté. Dans ce cas là, il n'y a rien à faire...

Comme vous venez de la voir, le noyau gère les périphériques. Un périphérique peut être géré de 2 manières : en dur ou en tant que module. Lorsque vous configurez votre noyau, il vous faudra donc choisir entre ces deux options...

1.3 - Les méthodes de compilation

On peut compiler un noyau de différentes manières :

  • La manière classique, en compilant avec make
  • La méthode de votre distribution, qui utilise des outils spécifiques à votre distribution

Dans le cas d'une compilation classique, prévoyez toujours d'avoir un noyau de secours dans votre chargeur de démarrage (lilo, grub, etc), sous peine d'être bloqué si vous avez mal compilé votre noyau !!

N'oubliez pas que compiler un noyau n'est pas inné, et qu'il ne faut pas oublier qu'on a une chance de bloquer le système lors du démarrage avec un noyau mal configuré.

2 - Solution 1: install d'une image (Méthode rapide Debian)

Note pour la suite : nous allons poser les hypothèses suivantes :

  • Notre machine est un Athon XP (k7)
  • Nous allons installer un noyau 2.6.17-2

Cette première solution permet d'obtenir rapidement et simplement une version récente d'un noyau avec de grandes chances d'avoir tout son matériel reconnu.

Pour obtenir la liste des images disponibles, nous allons utiliser la commande suivante :

# apt-cache search linux-image

Une fois que vous avez choisi votre image (dans notre cas la version 2.6.17-2-k7), vous pouvez l'installer :

# apt-get install linux-image-2.6.17-2-k7

Maintenant il reste à mettre à jour le Bootloader pour que votre nouveau noyau soit reconnu au démarrage.

Dans le cas de Grub, il suffit de lancer la commande :

# update-grub
  Explications concernant lilo

Il suffit ensuite de rebooter et on a un joli noyau tout neuf, pas optimisé, mais qui détecte une grande majorité des périphériques que l'on a sur uen configuration classique (dont carte tv, disques sata, stockage externe sur usb/ieee, etc)

3 - Solution 2: compil à partir des sources d'un noyau 2.6.x (Méthode Debian)

3.1 - Récupération et préparation des sources

Cette méthode va nous permettre d'obtenir un package Debian à installer (il installera le noyau). Ceci implique que si vous avez plusieurs machines identiques, il vous suffit de créer votre package sur une seule machine, et d'ensuite l'installer sur toutes les autres (ce qui permet de gagner un temps précieux).
Cela permet également d'avoir une "sauvegarde" rapidement installable de votre noyau.

Tout d'abord, sur la machine de compilation, il faut installer trois packages :

# apt-get install kernel-package fakeroot libncurses5-dev

Ensuite, on va récupérer les sources :

# apt-get install kernel-source-2.6.17-2-k7
  Note comme quoi /usr/src/linux est un abus et non une obligation

On décompresse les sources du noyau dans /usr/src/:

# cd /usr/src
# tar xvjf kernel-source-2.6.17-2-k7.tar.bz2

On crée un lien symbolique vers les sources du noyau :

# ln -s kernel-source-2.6.17-2 linux

3.2 - Configuration du noyau

Les 2 commandes qui suivent est facultative. Elle consiste à récupérer le fichier /boot/config-2.6.x... afin de l'utiliser comme base de départ. En effet, ce fichier contient la façon dont le noyau que vous utilisez est configuré.

# cp /boot/config-2.6.17-2-k7 /usr/src/linux/.config

Maintenant on va pouvoir attaquer le vif du sujet en lançant le menu de configuration du noyau

# cd /usr/src/linux
# make menuconfig
  explication du choix des paquets

3.3 - Génération du package Debian

Maintenant que vous avez configuré le noyau, il faut le compiler.

# fakeroot make-kpkg clean
# fakeroot make-kpkg --revision <nom_que_vous_desirez_donner_au_noyau> kernel-image
  warning comme quoi la compilation, c'est lent
  options pour compiler avec multi core, hyperhreading

Une fois le noyau compilé (et le paquet créé), vous devez obtenir un fichier /usr/src/linux-image-2.6.17-fritz.deb. Pensez à copier ce paquet dans un endroit sûr.

3.4 - Installation du noyau

Maintenant, il va falloir installer ce paquet :

# dpkg -i linux-image-2.6.17-fritz.deb

Nous allons créer un initrd. Pour ceci vous allez utiliser l'utilitaire initrd-tools. Si vous ne l'avez pas :

# apt-get install initrd-tool

L'initrd est un fichier chargé en RAM par le bootloader avant de lancer le kernel. Cela permet de mettre en module des composants qui ne pourraient autrement être compilé qu'en dur (ex : le support du système de fichier de la partition racine, pour monter la partition il faut le module, lui-même stocké sur la partition...)

La commande suivante n'est pas valable actellement (noyau 2.6.17) mais devrait l'être lors du passage de Etch en stable. A vérifier ! En attendant la stabilisation de Etch ou une future version de mkinitrd, nous allons utiliser yaird :

# apt-get install yaird

Et nous allons créer un fichier initrd :

# mkinitrd.yaird -o /boot/initrd.img-2.6.17-2-k7
Ceci est une note. La validité d'une note varie en fonction des évolutions de la distribution. Si cette information n'est plus valable, n'hésitez pas à la modifier ou à signaler le problème à l'adresse "contact (at) smhteam.info".

Pour créer l'initrd :

# mkinitrd -o /boot/initrd.img-2.6.17-2-k7

Maintenant il reste à mettre à jour le Bootloader pour que votre nouveau noyau soit reconnu au démarrage.

Dans le cas de Grub, il suffit de lancer la commande :

# update-grub
  cas de lilo

Maintenant rebootez votre machine.

4 - Problèmes courants

4.1 - Exemple n°1
Kernel Panic not syncing: VFS: Unable to mount root fs on unknown block...
  mkinitrd -o /boot/linux-image-2.6.17....
4.2 - Exemple n°2
mount: unknown filesystem type 'devfs'
umount: devfs: not mounted
mount: unknown filesystem type 'devfs'
umount: devfs: not mounted
pivot_root: No such file or directory
/sbin/init: 432: cannot open dev/console: No such file
Kernel panic - not syncing: Attempted to kill init!

Le problème est du à l'abandon de devfs pour passer à udev. Le fichier initrd utilisé au boot utilise devfs au lieu de udev. Il faut donc le remplacer.

Pour celà nous allons utiliser yaird :

# apt-get install yaird

Et nous allons créer un fichier initrd (ici pour un noyau 2.6.17) :

# mkinitrd.yaird -o /boot/initrd.img-2.6.17

5 - Documentation

Vous êtes : 38.107.191.86 Dernière modification : 20/01/07 14:20 Propriétaire : cse35-1-82-236-141-197.fbx.proxad.net Modifié par : thialme

Commentaires

Afficher les commentaires
Il n'y a aucun commentaire sur cette page