Un livre de Wikibooks.
Le système d'exploitation GNU-Linux/Le noyau Linux et les modules
Dans certains cas, on peut être amené à recompiler un noyau Linux :
- support d'un périphérique (driver)
- activation d'une option
- ...
Les sources du noyau Linux sont disponibles sur kernel.org dans le répertoire /pub/linux/kernel/v2.6/.
Les sources doivent être installées dans le répertoire /usr/src et il faut un lien linux vers la version du noyau que l'on désire compiler :
# cd /usr/src
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.9.tar.bz2
...
# tar xjf linux-2.6.23.9.tar.bz2
# ln -s linux-2.6.23.9 linux
# cd linux
Si on désire utiliser les mêmes options de compilation du noyau actuel, on copie le fichier /boot/config-2.6.18-5-686 dans le répertoire /usr/src/linux sous le nom .config :
# cp /boot/config-2.6.18-5-686 .config
Pour lancer la configuration (en mode texte) du noyau, on tape ensuite make menuconfig. Il faut avoir précédement installé la librairie de développement ncurses et de la commande make :
# apt-get install libncurses5-dev make
...
# make menuconfig
On configure le noyau, on quitte en enregistrant la configuration.
Debian fournit une méthode particulière pour lancer la compilation du noyau. il faut auparavant installer les packet kernel-package. Il faut aussi disposer du compilateur gcc :
# apt-get install kernel-package gcc
...
La procédure Debian consiste à fabriquer un fichier .DEB contenant le noyau et les modules compilés. L'avantage de cette méthode est de faciliter la mise à jour du noyau. De même, elle va automatiquement mettre à jour GRUB ou LILO pour démarrer sur le nouveau noyau.
# make-kpkg clean
# make-kpkg -rev custom.1 kernel_image
...
# dpkg -i ../linux-image-2.6.23.9_custom.1_i386.deb
On fabrique ensuite un initrd :
# mkinitramfs -o /boot/initrd.img-2.6.23.9 2.6.23.9
On le rajoute dans /boot/grub/menu.lst :
title Debian GNU/Linux, kernel 2.6.23.9
root (hd1,0)
kernel /vmlinuz-2.6.23.9 root=/dev/hdd2 ro
initrd /initrd.img-2.6.23.9
savedefault
Il ne reste plus qu'à rebooter pour démarrer sur le nouveau noyau.
Si tout c'est bien passé, le système va démarrer sur le nouveau noyau. Sinon, le noyau va s'arrêter sur un kernel panic et il faudra rebooter sur le noyau précédent, reprendre la configuration du noyau, le recompiler (avec un numéro de version différent, comme par exemple custom.2).
On vérifie que l'on a bien démarré sur notre nouveau noyau avec la commande uname :
# uname -r
2.6.23.9