Compilation Noyau · 10 min read · Nov 27, 2025

Comment Compiler Un Noyau - La Méthode Debian

Chaque distribution a des outils spécifiques pour construire un noyau personnalisé à partir des sources. Cet article traite de la compilation d’un noyau sur un système Debian (Etch). Il décrit comment construire un noyau personnalisé en utilisant les dernières sources de noyau non modifiées de www.kernel.org (noyau vanilla) afin que vous soyez indépendant des noyaux fournis par votre distribution. Il montre également comment patcher les sources du noyau si vous avez besoin de fonctionnalités qui ne sont pas présentes.

Je ne donne aucune garantie que cela fonctionnera pour vous !

1 Remarque Préliminaire

Je vais décrire deux façons de compiler un nouveau noyau. En utilisant la première méthode, vous obtiendrez un paquet kernel.deb qui peut être installé sur le système, et que vous pouvez partager avec d’autres et installer sur d’autres systèmes Debian Etch.

La deuxième méthode consiste à compiler un noyau de la manière “traditionnelle”. Cette méthode fonctionne sur n’importe quelle distribution Linux, mais bien sûr, vous n’obtenez pas de paquet kernel.deb.

2 Construction D’un Paquet Kernel .deb

Ce chapitre montre comment construire un noyau et obtenir un paquet .deb que vous pouvez installer et partager avec d’autres.

2.1 Installer Les Paquets Requis Pour La Compilation Du Noyau

Tout d’abord, nous mettons à jour notre base de données de paquets :

apt-get update

Ensuite, nous installons tous les paquets nécessaires comme ceci :

apt-get install kernel-package ncurses-dev fakeroot wget bzip2 build-essential

2.2 Télécharger Les Sources Du Noyau

Ensuite, nous téléchargeons notre noyau désiré dans /usr/src. Allez sur www.kernel.org et sélectionnez le noyau que vous souhaitez installer, par exemple linux-2.6.21.3.tar.bz2 (vous pouvez trouver tous les noyaux 2.6 ici : http://www.kernel.org/pub/linux/kernel/v2.6/). Ensuite, vous pouvez le télécharger dans /usr/src comme ceci :

cd /usr/src  
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2

Ensuite, nous décompressons les sources du noyau et créons un lien symbolique linux vers le répertoire des sources du noyau :

tar xjf linux-2.6.21.3.tar.bz2  
ln -s linux-2.6.21.3 linux  
cd /usr/src/linux

2.3 Appliquer Des Patches Aux Sources Du Noyau (Optionnel)

Parfois, vous avez besoin de pilotes pour du matériel qui n’est pas pris en charge par le nouveau noyau par défaut, ou vous avez besoin de support pour des techniques de virtualisation ou d’autres technologies de pointe qui n’ont pas encore été intégrées au noyau. Dans tous ces cas, vous devez patcher les sources du noyau (à condition qu’un patch soit disponible…).

Maintenant, supposons que vous avez téléchargé le patch nécessaire (je l’appelle patch.bz2 dans cet exemple) dans /usr/src. Voici comment vous l’appliquez à vos sources du noyau (vous devez toujours être dans le répertoire /usr/src/linux) :

bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run  
bzip2 -dc /usr/src/patch.bz2 | patch -p1

La première commande est juste un test, elle ne fait rien à vos sources. Si elle ne montre pas d’erreurs, vous pouvez exécuter la deuxième commande qui applique réellement le patch. Ne le faites pas si la première commande montre des erreurs !

Vous pouvez également appliquer des prépatches de noyau à vos sources de noyau. Par exemple, si vous avez besoin d’une fonctionnalité qui n’est disponible que dans le noyau 2.6.22-rc3, mais que les sources complètes n’ont pas encore été publiées pour ce noyau. Au lieu de cela, un patch-2.6.22-rc3.bz2 est disponible. Vous pouvez appliquer ce patch aux sources du noyau 2.6.21, mais pas aux noyaux 2.6.21.1 ou 2.6.21.2, etc. Cela est expliqué sur http://kernel.org/patchtypes/pre.html :

Les prépatches sont l’équivalent des versions alpha pour Linux ; ils vivent dans les répertoires de test dans les archives. Ils doivent être appliqués à l’aide de l’utilitaire patch(1) au code source de la version complète précédente avec un numéro de version à 3 parties (par exemple, le prépatch 2.6.12-rc4 doit être appliqué aux sources du noyau 2.6.11, pas, par exemple, 2.6.11.10.)

Donc, si vous souhaitez compiler un noyau 2.6.22-rc3, vous devez télécharger les sources du noyau 2.6.21 ( http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2) à l’étape 3 au lieu du noyau 2.6.21.3 !

Voici comment vous appliquez le patch 2.6.22-rc3 au noyau 2.6.21 :

cd /usr/src   
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2  
cd /usr/src/linux  
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run  
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1

2.4 Configurer Le Noyau

Il est judicieux d’utiliser la configuration de votre noyau de travail actuel comme base pour votre nouveau noyau. Par conséquent, nous copions la configuration existante dans /usr/src/linux :

make clean && make mrproper  
cp /boot/config-`uname -r` ./.config

Ensuite, nous exécutons

make menuconfig

ce qui fait apparaître le menu de configuration du noyau. Allez à Charger un Fichier de Configuration Alternatif et choisissez .config (qui contient la configuration de votre noyau de travail actuel) comme fichier de configuration :

Configurer le Noyau

Enregistrer en tant que fichier .config

Ensuite, parcourez le menu de configuration du noyau et faites vos choix. Lorsque vous avez terminé et sélectionnez Quitter, répondez à la question suivante (Souhaitez-vous enregistrer votre nouvelle configuration de noyau ?) par Oui :

Enregistrer la nouvelle configuration du Noyau

2.5 Construire Le Noyau

Pour construire le noyau, exécutez ces deux commandes :

make-kpkg clean  
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

Après –append-to-version= vous pouvez écrire n’importe quelle chaîne qui vous aide à identifier le noyau, mais elle doit commencer par un tiret (-) et ne doit pas contenir d’espaces.

Maintenant, soyez patient, la compilation du noyau peut prendre quelques heures, selon votre configuration de noyau et la vitesse de votre processeur.

2.6 Installer Le Nouveau Noyau

Après la construction réussie du noyau, vous pouvez trouver deux paquets .deb dans le répertoire /usr/src.

cd /usr/src  
ls -l

Sur mon système de test, ils s’appelaient linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb (qui contient le noyau réel) et linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb (qui contient les fichiers nécessaires si vous souhaitez compiler des modules supplémentaires du noyau plus tard). Je les installe comme ceci :

dpkg -i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb  
dpkg -i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb

(Vous pouvez maintenant même transférer les deux fichiers .deb vers d’autres systèmes Debian Etch et les installer là-bas exactement de la même manière, ce qui signifie que vous n’avez pas à compiler le noyau là-bas à nouveau.)

C’est tout. Le fichier de configuration du chargeur de démarrage GRUB /boot/grub/menu.lst a été modifié automatiquement, et un ramdisk pour le nouveau noyau a été créé dans /boot.

Maintenant, redémarrez le système :

shutdown -r now

Au prompt de démarrage, sélectionnez votre nouveau noyau (devrait être sélectionné par défaut) :

Démarrer avec le Nouveau Noyau

Si tout se passe bien, il devrait démarrer avec le nouveau noyau. Vous pouvez vérifier s’il utilise vraiment votre nouveau noyau en exécutant

uname -r

Cela devrait afficher quelque chose comme

2.6.21.3-custom

Si le système ne démarre pas, redémarrez-le et sélectionnez votre ancien noyau au prompt de démarrage. Vous pouvez maintenant essayer à nouveau de compiler un noyau fonctionnel. N’oubliez pas de supprimer la ou les strophes du noyau non fonctionnel de /boot/grub/menu.lst.

3 Construction D’un Noyau De La Manière Traditionnelle

Ce chapitre décrit une approche différente qui peut être utilisée sur n’importe quel système Linux (à part les détails tels que la création d’un ramdisk ou la mise à jour du chargeur de démarrage). Bien sûr, vous ne finirez pas avec un paquet kernel.deb.

3.1 Installer Les Paquets Requis Pour La Compilation Du Noyau

Tout d’abord, nous mettons à jour notre base de données de paquets :

apt-get update

Ensuite, nous installons tous les paquets nécessaires comme ceci :

apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential

3.2 Télécharger Les Sources Du Noyau

Ensuite, nous téléchargeons notre noyau désiré dans /usr/src. Allez sur www.kernel.org et sélectionnez le noyau que vous souhaitez installer, par exemple linux-2.6.21.3.tar.bz2 (vous pouvez trouver tous les noyaux 2.6 ici : http://www.kernel.org/pub/linux/kernel/v2.6/). Ensuite, vous pouvez le télécharger dans /usr/src comme ceci :

cd /usr/src  
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2

Ensuite, nous décompressons les sources du noyau et créons un lien symbolique linux vers le répertoire des sources du noyau :

tar xjf linux-2.6.21.3.tar.bz2  
ln -s linux-2.6.21.3 linux  
cd /usr/src/linux

3.3 Appliquer Des Patches Aux Sources Du Noyau (Optionnel)

Parfois, vous avez besoin de pilotes pour du matériel qui n’est pas pris en charge par le nouveau noyau par défaut, ou vous avez besoin de support pour des techniques de virtualisation ou d’autres technologies de pointe qui n’ont pas encore été intégrées au noyau. Dans tous ces cas, vous devez patcher les sources du noyau (à condition qu’un patch soit disponible…).

Maintenant, supposons que vous avez téléchargé le patch nécessaire (je l’appelle patch.bz2 dans cet exemple) dans /usr/src. Voici comment vous l’appliquez à vos sources du noyau (vous devez toujours être dans le répertoire /usr/src/linux) :

bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run  
bzip2 -dc /usr/src/patch.bz2 | patch -p1

La première commande est juste un test, elle ne fait rien à vos sources. Si elle ne montre pas d’erreurs, vous pouvez exécuter la deuxième commande qui applique réellement le patch. Ne le faites pas si la première commande montre des erreurs !

Vous pouvez également appliquer des prépatches de noyau à vos sources de noyau. Par exemple, si vous avez besoin d’une fonctionnalité qui n’est disponible que dans le noyau 2.6.22-rc3, mais que les sources complètes n’ont pas encore été publiées pour ce noyau. Au lieu de cela, un patch-2.6.22-rc3.bz2 est disponible. Vous pouvez appliquer ce patch aux sources du noyau 2.6.21, mais pas aux noyaux 2.6.21.1 ou 2.6.21.2, etc. Cela est expliqué sur http://kernel.org/patchtypes/pre.html :

Les prépatches sont l’équivalent des versions alpha pour Linux ; ils vivent dans les répertoires de test dans les archives. Ils doivent être appliqués à l’aide de l’utilitaire patch(1) au code source de la version complète précédente avec un numéro de version à 3 parties (par exemple, le prépatch 2.6.12-rc4 doit être appliqué aux sources du noyau 2.6.11, pas, par exemple, 2.6.11.10.)

Donc, si vous souhaitez compiler un noyau 2.6.22-rc3, vous devez télécharger les sources du noyau 2.6.21 ( http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2) à l’étape 3 au lieu du noyau 2.6.21.3 !

Voici comment vous appliquez le patch 2.6.22-rc3 au noyau 2.6.21 :

cd /usr/src   
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2  
cd /usr/src/linux  
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run  
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1

3.4 Configurer Le Noyau

Il est judicieux d’utiliser la configuration de votre noyau de travail actuel comme base pour votre nouveau noyau. Par conséquent, nous copions la configuration existante dans /usr/src/linux :

make clean && make mrproper  
cp /boot/config-`uname -r` ./.config

Ensuite, nous exécutons

make menuconfig

ce qui fait apparaître le menu de configuration du noyau. Allez à Charger un Fichier de Configuration Alternatif et choisissez .config (qui contient la configuration de votre noyau de travail actuel) comme fichier de configuration :

Ensuite, parcourez le menu de configuration du noyau et faites vos choix. Lorsque vous avez terminé et sélectionnez Quitter, répondez à la question suivante (Souhaitez-vous enregistrer votre nouvelle configuration de noyau ?) par Oui :

3.5 Construire Et Installer Le Noyau

Pour construire le noyau, exécutez ces commandes :

make all  
make modules_install  
make install

Maintenant, soyez patient, la compilation du noyau peut prendre quelques heures, selon votre configuration de noyau et la vitesse de votre processeur.

3.6 Étapes Post-Installation

Le nouveau noyau est maintenant installé, mais nous avons encore besoin d’un ramdisk pour notre nouveau noyau (sinon le système ne démarrera probablement pas !), et nous devons informer le chargeur de démarrage GRUB de notre nouveau noyau.

Tout d’abord, nous faisons ceci :

depmod 2.6.21.3  
apt-get install yaird

Ensuite, nous créons un ramdisk avec la commande suivante :

mkinitrd.yaird -o /boot/initrd.img-2.6.21.3 2.6.21.3

La configuration de GRUB est très simple sur Debian Etch. Tout ce que nous avons à faire est d’exécuter

update-grub

Cela détectera le nouveau noyau et le ramdisk et mettra à jour /boot/grub/menu.lst pour nous.

Maintenant, redémarrez le système :

shutdown -r now

Au prompt de démarrage, sélectionnez votre nouveau noyau (devrait être sélectionné par défaut). Si tout se passe bien, il devrait démarrer avec le nouveau noyau. Vous pouvez vérifier s’il utilise vraiment votre nouveau noyau en exécutant

uname -r

Cela devrait afficher quelque chose comme

2.6.21.3

Si le système ne démarre pas, redémarrez-le et sélectionnez votre ancien noyau au prompt de démarrage. Vous pouvez maintenant essayer à nouveau de compiler un noyau fonctionnel. N’oubliez pas de supprimer la ou les strophes du noyau non fonctionnel de /boot/grub/menu.lst.

4 Liens

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.