GNU/Linux >> Tutoriels Linux >  >> Debian

Comment compiler un noyau - à la manière Debian

Sur cette page

  1. 1 note préliminaire
  2. 2 Construire un package Kernel .deb
    1. 2.1 Installer les packages requis pour la compilation du noyau
    2. 2.2 Télécharger les sources du noyau
    3. 2.3 Appliquer des correctifs aux sources du noyau (facultatif)
    4. 2.4 Configurer le noyau
    5. 2.5 Créer le noyau
    6. 2.6 Installer le nouveau noyau
  • 3 Construire un noyau de manière traditionnelle
    1. 3.1 Installer les packages requis pour la compilation du noyau
    2. 3.2 Télécharger les sources du noyau
    3. 3.3 Appliquer des correctifs aux sources du noyau (facultatif)
    4. 3.4 Configurer le noyau
    5. 3.5 Construire et installer le noyau
    6. 3.6 Étapes de post-installation
  • 4 liens
  • 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.

    • Debian :http://www.debian.org
    • Les archives du noyau Linux :http://www.kernel.org

    Debian
    1. Comment compiler un noyau Linux au 21e siècle

    2. Construire des noyaux Linux à la manière de Debian

    3. Comment changer l'image de profil dans Debian 10

    4. La meilleure façon de compiler un noyau pour un processeur I7 ?

    5. Comment vérifier HZ dans le terminal?

    Comment installer l'alternative Winamp Qmmp sur Debian 10

    Comment changer le nom d'hôte dans Debian 10

    Comment éditer le fichier hosts sur Debian

    Comment installer le dernier noyau sur Debian 11 et dérivés

    Comment installer le dernier MySQL 8 sur Debian 11

    Comment installer le noyau Linux 5.15 sur Debian 11