Compilation Noyau · 8 min read · Nov 09, 2025
Comment Compiler Un Noyau - La Méthode CentOS
Comment Compiler Un Noyau - La Méthode CentOS
Version 1.0
Auteur : Falko Timme
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 les systèmes CentOS. 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.
J’ai testé cela sur CentOS 4.4.
Je veux d’abord dire que ce n’est pas la seule façon de configurer un tel système. Il existe de nombreuses façons d’atteindre cet objectif, mais c’est la méthode que je choisis. Je ne donne aucune garantie que cela fonctionnera pour vous !
1 Remarque Préliminaire
Dans cet article, je vais décrire deux façons de construire un noyau pour les systèmes CentOS. La première vous donnera un paquet rpm de noyau que vous pouvez installer ou partager avec d’autres. La deuxième méthode est la même pour toutes les distributions Linux, mais vous ne finissez pas avec un paquet rpm.
2 Construction D’un Paquet Kernel rpm
Ce chapitre montre comment construire un noyau et finir avec un paquet rpm que vous pouvez installer et partager avec d’autres.
2.1 Télécharger Les Sources Du Noyau
Tout d’abord, 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.18.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.18.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.18.3.tar.bz2
ln -s linux-2.6.18.3 linux
cd /usr/src/linux
2.2 Modifier /etc/modprobe.conf
Maintenant, nous devons commenter le module mptscsi dans /etc/modprobe.conf, sinon nous obtiendrons une erreur comme ceci :
Aucun module mptscsi trouvé pour le noyau 2.6.18.3-default, abandon.lorsque nous essayons de créer un ramdisk pour notre nouveau noyau.
vi /etc/modprobe.conf| alias eth0 pcnet32 alias scsi_hostadapter mptbase # alias scsi_hostadapter1 mptscsi alias scsi_hostadapter2 mptfc alias scsi_hostadapter3 mptspi alias scsi_hostadapter4 mptsas alias scsi_hostadapter5 mptscsih |
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 de 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 !
Si vos patches sont compressés avec gzip (.gz) au lieu de bzip2 (.bz2), alors vous patcherez votre noyau comme suit :
gunzip -c /usr/src/patch.gz | patch -p1 –dry-run
gunzip -c /usr/src/patch.gz | patch -p1
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.19-rc6, mais que les sources complètes n’ont pas encore été publiées pour ce noyau. Au lieu de cela, un patch-2.6.19-rc6.bz2 est disponible. Vous pouvez appliquer ce patch aux sources du noyau 2.6.18, mais pas aux noyaux 2.6.18.1 ou 2.6.18.2 ou 2.6.18.3, 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 voulez compiler un noyau 2.6.19-rc6, vous devez télécharger les sources du noyau 2.6.18 ( http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2) à l’étape 2.1 au lieu du noyau 2.6.18.3 !
Voici comment vous appliquez le patch 2.6.19-rc6 au noyau 2.6.18 :
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.19-rc6.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.19-rc6.bz2 | patch -p1 –dry-run
bzip2 -dc /usr/src/patch-2.6.19-rc6.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 menuconfigce 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. Assurez-vous de spécifier une chaîne d’identification de version de noyau sous Configuration Générale —> () Version locale - ajouter à la version du noyau. J’utilise -default afin que notre paquet rpm de noyau soit nommé kernel-2.6.18.3default-1.i386.rpm. Vous pouvez laisser la chaîne vide ou spécifier une autre qui vous aide à identifier le noyau (par exemple, -custom ou ce que vous voulez).
Veuillez noter : Après avoir installé kernel-2.6.18.3default-1.i386.rpm et décidé de compiler un autre paquet rpm de noyau 2.6.18.3, il est important d’utiliser une chaîne de version différente, par exemple -default1, -default2, etc., car sinon vous ne pourrez pas installer votre nouveau noyau car rpm se plaint que kernel-2.6.18.3default-1.i386.rpm est déjà installé !




Lorsque vous avez terminé et sélectionnez Quitter, répondez à la question suivante (Souhaitez-vous enregistrer votre nouvelle configuration de noyau ?) par Oui :

2.5 Construire Le Noyau
Pour construire le noyau, exécutez simplement cette commande :
make rpmMaintenant, 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, un src.rpm et un paquet rpm ont été créés. Le paquet src.rpm peut être trouvé dans le répertoire /usr/src/redhat/SRPMS/, vous pouvez découvrir son nom en exécutant
ls -l /usr/src/redhat/SRPMS/Sur mon système, il s’appelait kernel-2.6.18.3default-1.src.rpm.
Le paquet rpm peut être trouvé dans /usr/src/redhat/RPMS/i386/, /usr/src/redhat/RPMS/i586/, /usr/src/redhat/RPMS/i686/, /usr/src/redhat/RPMS/x86_64/, etc., selon votre architecture. Sur mon système, il était situé dans /usr/src/redhat/RPMS/i386/, et en exécutant
ls -l /usr/src/redhat/RPMS/i386/J’ai découvert que son nom était kernel-2.6.18.3default-1.i386.rpm.
Maintenant, nous pouvons installer notre paquet rpm de noyau comme ceci :
cd /usr/src/redhat/RPMS/i386/
rpm -ivh –nodeps kernel-2.6.18.3default-1.i386.rpm
Veuillez noter le commutateur –nodeps : si vous ne l’utilisez pas, vous verrez une erreur comme ceci :
error: Échecs de dépendances :
kernel >= 2.6.10 entre en conflit avec lksctp-tools-1.0.2-6.4E.1.i386
J’ai constaté qu’ignorer cette dépendance ne causait aucun problème sur mon système.
Vous pouvez maintenant même transférer le paquet rpm de noyau vers d’autres systèmes CentOS et l’installer là-bas exactement de la même manière, ce qui signifie que vous n’avez pas à compiler le noyau à nouveau là-bas.
Ensuite, nous créons un ramdisk pour notre nouveau noyau, sinon le système ne démarrera probablement pas notre nouveau noyau :
mkinitrd /boot/initrd-2.6.18.3-default.img 2.6.18.3-default2.7 Configurer Le Chargeur De Démarrage GRUB
Maintenant, nous devons configurer notre chargeur de démarrage GRUB afin que nos nouveaux noyaux soient démarrés lorsque nous redémarrons le système.
Exécutez
ls -l /bootpour découvrir votre nouveau noyau (commence généralement par vmlinuz, par exemple vmlinuz-2.6.18.3-default) et ramdisk (commence généralement par initrd, par exemple initrd-2.6.18.3-default.img).
Ensuite, éditez /boot/grub/menu.lst. Jetez un œil à vos strophes de noyau existantes (fonctionnelles) et prenez-en une comme échantillon pour votre nouvelle strophe et remplacez le noyau et le ramdisk, puis ajoutez la strophe au-dessus de toutes les autres strophes.
vi /boot/grub/menu.lstPar exemple, mon menu.lst ressemble à ceci avant que j’ajoute la nouvelle strophe :
| # grub.conf généré par anaconda # # Notez que vous n'avez pas besoin de relancer grub après avoir apporté des modifications à ce fichier # AVIS : Vous avez une partition /boot. Cela signifie que # tous les chemins de noyau et initrd sont relatifs à /boot/, par exemple. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00 # initrd /initrd-version.img #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.9-42.0.3.EL) root (hd0,0) kernel /vmlinuz-2.6.9-42.0.3.EL ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.9-42.0.3.EL.img title CentOS-4 i386 (2.6.9-42.EL) root (hd0,0) kernel /vmlinuz-2.6.9-42.EL ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.9-42.EL.img |
et comme ceci après :
| # grub.conf généré par anaconda # # Notez que vous n'avez pas besoin de relancer grub après avoir apporté des modifications à ce fichier # AVIS : Vous avez une partition /boot. Cela signifie que # tous les chemins de noyau et initrd sont relatifs à /boot/, par exemple. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00 # initrd /initrd-version.img #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.18.3-default) root (hd0,0) kernel /vmlinuz-2.6.18.3-default ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.18.3-default.img title CentOS (2.6.9-42.0.3.EL) root (hd0,0) kernel /vmlinuz-2.6.9-42.0.3.EL ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.9-42.0.3.EL.img title CentOS-4 i386 (2.6.9-42.EL) root (hd0,0) kernel /vmlinuz-2.6.9-42.EL ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.9-42.EL.img |
Maintenant, redémarrez le système :
shutdown -r nowSi 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 -rCela devrait afficher quelque chose comme
2.6.18.3-defaultSi le système ne démarre pas, redémarrez-le, et lorsque vous voyez ceci :
 appuyez sur n’importe quelle touche pour entrer dans le menu GRUB :
Sélectionnez votre ancien noyau et démarrez le système. Vous pouvez maintenant essayer à nouveau de compiler un noyau fonctionnel. N’oubliez pas de supprimer la strophe du noyau non fonctionnel de /boot/grub/menu.lst.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.