Gcolpart.com by reg

Compiler un noyau Linux

Cette documentation est désormais rendue obsolète par une version plus récente : http://www.evolix.fr/linux/compilation.html

Sommaire

Les bases

Pour connaitre la version du noyau animant le système :
uname -r

On remarque la présence à la racine d'un lien de vmlinuz vers /boot/vmlinuz-2.x.x (où 2.x.x est la version du noyau)
Le noyau en lui même se trouve donc dans /boot
Dans /boot, on trouve :
vmlinuz-2.x.x et System.map-2.x.x
Dans /lib/modules, on trouve :
Les modules regroupés dans un rep 2.x.x
Dans /usr/src, on trouve :
Les sources (si le noyau a déjà été recompilé) sous forme de répertoires kernel-source-2.x.x (ou linux-2.x.x) et les entêtes sous forme de répertoire kernel-headers-2.x.x
Un lien symbolique linux pointe vers les sources les plus récentes kernel-source-2.x.x
Pour recupérer les dernières sources, il faut les récupérer sur www.kernel.org et les mettre dans /tmp par exemple, les désarchiver dans /usr/src et changer le lien linux vers ces dernières sources:
cd /usr/src
tar zxvf /tmp/linux-2.x.x.tar.gz
ln -s linux-2.x.xx linux
Ou bien, si vous utilisez Debian, vous pouvez aussi utiliser les sources Debian (un brin patchée) en faisant:
apt-cache search kernel-source
apt-get install kernel-source-2.x.x
cd /usr/src
tar xvfj kernel-source-2.x.xx.tar.bz2
ln -s kernel-source-2.x.xx linux

Le choix des options du noyau

Commençons :
cd /usr/src/linux
make xconfig
Voici ce que l'on obtient avec un noyau 2.4.x:

kernel

Voici ce que l'on obtient avec un noyau 2.6.x:

kernel

On peut choisir les options en mode console par
make menuconfig
Voici ce que l'on obtient:

kernel2

Ou encore tout simplement
make config
Voici ce que l'on obtient:

kernel3


Attention l'installation de paquets spécifiques peut-être nécessaire, notamment :
kernel-package bin86 dpkg-dev libncurses5-dev gcc make libc6-dev binutils debianutils modutils debhelper tcl8.4 tk8.4 perl perl-modules
Pour l'interface graphique xconfig des versions 2.6.x, on aura besoin de libqt3-dev et pour les modules, on aura besoin (sous Debian) du paquet module-init-tools

Les options du noyau sont contenues dans le fichier .config
Pour deux compilations successives, il suffit donc de changer les éléments différents de la compilation précédentes et non de tout reconfigurer.
Voici les options classiques, légérèment commentées, pour un noyau 2.4.x:
options d'un noyau 2.4.x

À titre d'exemple, voici le .config (2.4.22) correspondant à l'un de mes postes de travail
Et voici le .config (2.6.0) correspondant à la même machine

Une fois le choix des options terminés, on obtient souvent un message:
end of Linux kernel configuration. Check the top-level Makefile for additional configuration. Next, you must run 'make dep'.
Il faut donc maintenant compiler ce noyau. Choisissez la méthode classique, ou la méthode Debian si vous avez une Debian.

Compilation classique

make dep vérifie les dépendances
make clean fait un peu le ménage
make bzImage compile le noyau
make modules compile les modules
makes modules_install
(Eventuellement make bzlilo mais le faire à la main est plus conseillé, voir la procédure ci-dessous)

cp arch/i386/boot/bzImage /boot/vmlinuz-new

Editer lilo.conf et ajouter :
image=/boot/vmlinuz-new
label=new
root=/dev/hdan où hdan est votre partition racine
read-only

puis faire :
#lilo

Compilation "à la sauce debian"

cd /usr/src/linux
make config
Apres avoir installé le paquet kernel-package contenant les outils debian,
la compilation est assez aisée, car on vérifie les dépendances et compile notre noyau puis dépose un paquet .deb dans le /usr/src avec la commande :
make-kpkg clean
make-kpkg kernel_image
Il nous suffit ensuite d'installer ce paquet kernel_image:
dpkg -i kernel-image-2.x.x.xxx_i386.deb
Ce qui va installer le noyau vmlinuz-2.x.x dans /boot, mais aussi le System.map-2.x.x, sauvegarder le .config utilisé dans /boot/config-2.x.x, installer les modules dans le répertoires /lib/modules/2.x.x, vous proposer de créer une disquette de boot, créer le lien symbolique /vmlinuz qui pointe vers votre noyau, modifier le lien /vmliz.old si il existe vers le noyau actuel et enfin vous proposer d'exécuter lilo.

Afin de pouvoir rebooter avec son noyau actuel en cas de pépins ;) je vous conseille de bien vous assurez de la présence de vmlinuz.old et d'une section le concernant dans lilo.conf, vous pouvez ensuite rebooter.
À noter que l'on peut passer en l'argument --append-to-version=machinchose lors de la compilation du kernel :
make-kpkg --append-to-version=mon_ptit_noyau kernel_image
Une fois l'installation terminée, vérifiez bien que votre ancien noyau est présent dans lilo pour rebooter dessus en cas de pépin. L'un des avantages de la méthode Debian est que l'on peut désinstaller le noyau comme un paquet Debian:
apt-get remove --purge kernel-image-2.x.xx


Vous pouvez générer d'autres paquets intéressants:
Un paquet contenant les entêtes du noyau par:
make-kpkg kernel_headers
Un paquet contenant les sources du noyau par:
make-kpkg kernel_source
Un paquet contenant la documentation du noyau par:
make-kpkg kernel_doc
Puis vous pouvez installer ces paquets Debian par 'dpkg -i'
Il est recommandé d'installer au moins les entêtes du noyau.

Pour recompiler à nouveau ce noyau, pas de problèmes car le .config a gardé toutes vos options en mémoire, il suffit donc de modifier les options que vous voulez par la commande
make xconfig
Il faudra ensuite faire:
make-kpkg clean
make-kpkg --revision mon_ptit_noyau kernel_image
Si vous n'avez pas mis l'argument --revision lors de la première compilation, remplacer mon_ptit_noyau par 10.00.Custom

Lorsque l'on a déjà compilé un noyau, et que l'on change de version. Il suffit de télécharger les nouvelles sources du noyau, de les décompresser puis de placer l'ancien .config que l'on trouvera souvent dans /boot, par exemple:
# cp /boot/config-2.4.22 /usr/src/linux-2.4.23/.config
# make oldconfig
Cela va poser des questions pour les nouveaux paramètres du noyau, ce qui permet de gagner du temps. On pourra toujours aller revérifier les options par make config/menuconfig/xconfig..

À noter, la commande magique qui fait tout tout seul est:
make-kpkg buildpackage
A savoir :
make-kpkg clean
make-kpkg --revision 10.00.Custom kernel_image
make-kpkg kernel_doc
make-kpkg kernel_source
make-kpkg kernel_headers

powered by Apache     powered by Debian     Valid XHTML 1.1     Valid CSS     ecrit avec Vim    
Copyright (c) 2002-2014 Gregory Colpart. Infogerance serveur