Sur cette page
- 1 note préliminaire
- 2 Construire un package Kernel .deb
- 2.1 Installer les packages requis pour la compilation du noyau
- 2.2 Télécharger les sources du noyau
- 2.3 Appliquer des correctifs aux sources du noyau (facultatif)
- 2.4 Configurer le noyau
- 2.5 Créer le noyau
- 2.6 Installer le nouveau noyau
- 3.1 Installer les packages requis pour la compilation du noyau
- 3.2 Télécharger les sources du noyau
- 3.3 Appliquer des correctifs aux sources du noyau (facultatif)
- 3.4 Configurer le noyau
- 3.5 Construire et installer le noyau
- 3.6 Étapes de post-installation
Chaque distribution dispose d'outils spécifiques pour créer un noyau personnalisé à partir des sources. Cet article concerne 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 vanille) afin que vous soyez indépendant des noyaux fournis par votre distribution. Il montre également comment corriger les sources du noyau si vous avez besoin de fonctionnalités qui n'y figurent pas.
Je n'émets aucune garantie que cela fonctionnera pour vous !
1 Remarque préliminaire
Je décrirai deux manières de compiler un nouveau noyau. En utilisant la première méthode, vous vous retrouverez avec un paquet noyau .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 manière "traditionnelle". Cette méthode fonctionne sur n'importe quelle distribution Linux, mais bien sûr, vous ne vous retrouvez pas avec un paquet noyau .deb.
2 Construire un paquet Kernel .deb
Ce chapitre montre comment construire un noyau et se retrouver avec un package .deb que vous pouvez installer et partager avec d'autres.
2.1 Installer les packages requis pour la compilation du noyau
Nous mettons d'abord à jour notre base de données de packages :
apt-get update
Ensuite, nous installons tous les packages nécessaires comme celui-ci :
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 le noyau souhaité dans /usr/src. Allez sur www.kernel.org et sélectionnez le noyau que vous souhaitez installer, par ex. 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 sur /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éballons 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 correctifs aux sources du noyau (facultatif)
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 d'une prise en charge des techniques de virtualisation ou d'une autre technologie de pointe qui n'a pas encore été intégrée au noyau. Dans tous ces cas, vous devez patcher les sources du noyau (à condition qu'un patch soit disponible...).
Supposons maintenant que vous ayez téléchargé le patch nécessaire (je l'appelle patch.bz2 dans cet exemple) sur /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 n'est qu'un test, elle ne fait rien à vos sources. S'il n'affiche pas d'erreurs, vous pouvez exécuter la deuxième commande qui applique réellement le correctif. Ne le faites pas si la première commande affiche des erreurs !
Vous pouvez également appliquer des précorrectifs de noyau à vos sources de noyau. Par exemple, si vous avez besoin d'une fonctionnalité disponible uniquement dans le noyau 2.6.22-rc3, mais que les sources complètes n'ont pas encore été publiées pour ce noyau. A la place, un patch-2.6.22-rc3.bz2 est disponible. Vous pouvez appliquer ce correctif aux sources du noyau 2.6.21, mais pas au noyau 2.6.21.1 ou 2.6.21.2, etc. Ceci est expliqué sur http://kernel.org/patchtypes/pre.html :
Les prépatchs 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 en 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.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 appliquer le correctif 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
C'est une bonne idée d'utiliser la configuration de votre noyau actuel comme base pour votre nouveau noyau. Nous copions donc la configuration existante dans /usr/src/linux :
make clean && make mrproper
cp /boot/config-`uname -r` ./.config
Puis nous courons
make menuconfig
qui affiche le menu de configuration du noyau. Accédez à Charger un fichier de configuration alternatif et choisissez .config (qui contient la configuration de votre noyau de travail actuel) comme fichier de configuration :
Parcourez ensuite 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 du noyau ?) par Oui :
2.5 Construire le noyau
Pour compiler 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 moins (-) et ne doit pas contenir d'espace.
Maintenant soyez patient, la compilation du noyau peut prendre quelques heures, selon la configuration de votre 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 packages .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 de noyau supplémentaires ultérieurement). 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 désormais même transférer les deux fichiers .deb vers d'autres systèmes Debian Etch et les y installer exactement de la même manière, ce qui signifie que vous n'avez pas à recompiler le noyau.)
C'est ça. Le fichier de configuration du chargeur de démarrage GRUB /boot/grub/menu.lst a été modifié automatiquement et un disque virtuel pour le nouveau noyau a été créé dans /boot.
Redémarrez maintenant le système :
shutdown -r now
À l'invite de démarrage, sélectionnez votre nouveau noyau (doit être sélectionné par défaut) :
Si tout se passe bien, il devrait arriver 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 à l'invite de démarrage. Vous pouvez maintenant réessayer de compiler un noyau fonctionnel. N'oubliez pas de supprimer la ou les strophes du noyau qui ne fonctionne pas dans /boot/grub/menu.lst.
3 Construire un noyau de manière traditionnelle
Ce chapitre décrit une approche différente qui peut être utilisée sur n'importe quel système Linux (à part des détails tels que la création d'un disque virtuel ou la mise à jour du chargeur de démarrage). Bien sûr, vous ne vous retrouverez pas avec un paquet noyau .deb.
3.1 Installer les packages requis pour la compilation du noyau
Nous mettons d'abord à jour notre base de données de packages :
apt-get update
Ensuite, nous installons tous les packages nécessaires comme celui-ci :
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 le noyau souhaité dans /usr/src. Allez sur www.kernel.org et sélectionnez le noyau que vous souhaitez installer, par ex. 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 sur /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éballons 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 correctifs aux sources du noyau (facultatif)
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 d'une prise en charge des techniques de virtualisation ou d'une autre technologie de pointe qui n'a pas encore été intégrée au noyau. Dans tous ces cas, vous devez patcher les sources du noyau (à condition qu'un patch soit disponible...).
Supposons maintenant que vous ayez téléchargé le patch nécessaire (je l'appelle patch.bz2 dans cet exemple) sur /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 n'est qu'un test, elle ne fait rien à vos sources. S'il n'affiche pas d'erreurs, vous pouvez exécuter la deuxième commande qui applique réellement le correctif. Ne le faites pas si la première commande affiche des erreurs !
Vous pouvez également appliquer des précorrectifs de noyau à vos sources de noyau. Par exemple, si vous avez besoin d'une fonctionnalité disponible uniquement dans le noyau 2.6.22-rc3, mais que les sources complètes n'ont pas encore été publiées pour ce noyau. A la place, un patch-2.6.22-rc3.bz2 est disponible. Vous pouvez appliquer ce correctif aux sources du noyau 2.6.21, mais pas au noyau 2.6.21.1 ou 2.6.21.2, etc. Ceci est expliqué sur http://kernel.org/patchtypes/pre.html :
Les prépatchs 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 en 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.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 appliquer le correctif 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
C'est une bonne idée d'utiliser la configuration de votre noyau actuel comme base pour votre nouveau noyau. Nous copions donc la configuration existante dans /usr/src/linux :
make clean && make mrproper
cp /boot/config-`uname -r` ./.config
Puis nous courons
make menuconfig
qui affiche le menu de configuration du noyau. Accédez à Charger un fichier de configuration alternatif et choisissez .config (qui contient la configuration de votre noyau de travail actuel) comme fichier de configuration :
Parcourez ensuite 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 du noyau ?) par Oui :
3.5 Construire et installer le noyau
Pour compiler 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 la configuration de votre noyau et la vitesse de votre processeur.
3.6 Étapes de post-installation
Le nouveau noyau est maintenant installé, mais nous avons toujours besoin d'un disque virtuel 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 procédons comme suit :
depmod 2.6.21.3
apt-get install yaird
Ensuite, nous créons un disque virtuel 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 de courir
update-grub
Cela détectera le nouveau noyau et le disque virtuel et mettra à jour /boot/grub/menu.lst pour nous.
Redémarrez maintenant le système :
shutdown -r now
À l'invite de démarrage, sélectionnez votre nouveau noyau (doit être sélectionné par défaut). Si tout se passe bien, il devrait arriver 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 à l'invite de démarrage. Vous pouvez maintenant réessayer de compiler un noyau fonctionnel. N'oubliez pas de supprimer la ou les strophes du noyau qui ne fonctionne pas dans /boot/grub/menu.lst.
4 liens
- Debian :http://www.debian.org
- Les archives du noyau Linux :http://www.kernel.org