Comment compiler le noyau Linux Vanilla de Source sur Fedora

Comment compiler le noyau Linux Vanilla de Source sur Fedora

Le noyau est le composant le plus important d'un système d'exploitation: entre autres choses, il prend en charge les différents types de matériel et gère les allocations de ressources.

Linux est un noyau monolithique: bien que ses fonctionnalités puissent être incluses statiquement ou construites et chargées comme séparées modules, Il fonctionne toujours comme une «pièce unique» dans le même espace d'adressage. Dans ce tutoriel, nous verrons comment télécharger, compiler et installer un noyau Linux Vanilla. Les instructions fournies doivent fonctionner sur toutes les distributions Linux, mais ce guide est axé sur la compilation du noyau sur un système Fedora.

Dans ce tutoriel, vous apprendrez:

  • Comment configurer, compiler et installer un noyau Linux à la vanille
  • Comment emballer le noyau compilé et ses modules


Le menu de configuration basé sur les ncurses pour le noyau Linux

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Feutre
Logiciel
  • GCC
  • fléchir
  • faire
  • bison
  • OpenSSL-Devel
  • elfutils-libelf-devel
  • NCurses-Devel (nécessaire pour utiliser le menu basé sur les NCurses pour configurer le noyau)
  • QT-Devel (nécessaire pour utiliser l'interface graphique QT pour configurer le noyau)
  • RPM-Build (nécessaire pour emballer le noyau au format RPM)
Autre Permissions racinaires pour installer les dépendances nécessaires et le noyau compilé
Conventions # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier

Installation des dépendances

Pour pouvoir compiler le noyau Linux à partir de la source, nous devons installer certains packages dans notre système:

$ sudo dnf installer gcc flex faire du bison openssl-devel elfutils-libelf-devel


Ceux ci-dessus ne sont que les packages «noyau» dont nous avons besoin. Pour invoquer des cibles de configuration spécifiques, certains packages supplémentaires doivent être installés: le ncurses-devel et QT Les packages, par exemple, sont nécessaires pour configurer respectivement l'utilisation du noyau, de l'interface graphique basée sur les NCurses et QT, tandis que la rpm-build un package est nécessaire pour construire un régime contenant le noyau compilé.

Télécharger la source Tarball

En première chose, nous devons obtenir le tarball contenant les dernières sources de noyau Linux stables. Nous pouvons télécharger et extraire le tarball avec une seule commande:

$ curl https: // cdn.noyau.org / pub / linux / noyau / v5.x / linux-5.1.5.le goudron.XZ | TAR -XJ

À la fin du processus de téléchargement, dans notre répertoire de travail actuel, nous devrions trouver un nouveau le dossier contenant le code source du noyau. Nous devons y entrer, dans ce cas:

$ CD Linux-5.1.5

À ce stade, nous pouvons configurer le noyau. Dans le paragraphe suivant, nous examinerons les cibles de configuration les plus courantes utilisées pour accomplir la tâche.

Configuration du noyau

Il existe différentes façons de configurer le noyau, et ils correspondent à différents cibles de configuration. Lorsqu'une cible de configuration est invoquée, si un fichier nommé .configurer contenant une configuration de noyau valide se trouve dans le répertoire des sources, il est utilisé comme point de départ pour la configuration. Cela rend la possibilité de mettre à jour ou de modifier une configuration déjà existante, peut-être celle qui est livrée avec le noyau installé par défaut dans notre distribution (il peut être trouvé à l'intérieur du /botte Répertoire, nommé d'après le noyau utilisé).

Si le fichier n'est pas trouvé, la configuration commencera à partir de zéro et .configurer Le fichier sera généré une fois que nous enregistrons notre configuration. Voyons une partie du cibles de configuration on peut utiliser:

configurer

Si cette cible est invoquée, l'utilisateur est invité à configurer le noyau en répondant à une série de questions, de la manière suivante:

* * Linux / x86 5.1.5 Configuration du noyau * * * Compiler: GCC (GCC) 9.1.1 20190503 (Red Hat 9.1.1-1) * * * Configuration générale * Compiler également les pilotes qui ne se chargeront pas (compile_test) [n / y /?]] 

menuconfig

Cette cible utilise une belle et conviviale ncurses Interface pour nous permettre de générer ou de mettre à jour la configuration du noyau. Comme dit précédemment, pour pouvoir utiliser cette interface ncurses-devel Le package doit être installé dans le système.



La configuration basée sur les ncurses

En utilisant cette interface, nous pouvons appuyer sur le H Clé lors de la mise en évidence d'une option spécifique pour obtenir des informations et des suggestions à ce sujet:



L'obtention d'informations sur une option n'est qu'une question de sélection et appuyez sur la touche H en appuyant sur Y sur une option l'inclura statiquement dans le noyau (l'option sera marquée avec un *), pressant N l'excluera et appuyera sur le M La clé l'inclura en tant que module (l'option sera marquée d'un M). Pour rechercher une option spécifique, nous pouvons utiliser le / / clé et fournissez la chaîne ou l'expulsion pour rechercher:

L'interface ncurses pour rechercher une option spécifique

xconfig

En invoquant cette cible de marque, il est possible de configurer le noyau via une interface graphique basée sur le QT Toolkit si le QT le package est installé dans le système.



L'interface de configuration basée sur QT

OldConfig

Cette cible est utile lorsque nous voulons utiliser une configuration du noyau déjà existante comme point de départ. Lorsque nous invoquons cette cible, nous sommes invités à ne configurer que les fonctionnalités disponibles dans le noyau que nous configurons mais non incluses dans le fichier de configuration d'origine.

localmodconfig

L'invocation de cette cible générera ou mettra à jour un nouveau fichier de configuration du noyau sur la base des modules actuellement chargés sur le système. Seuls eux seront inclus dans la configuration, les autres seront désactivés. Cela peut être utilisé comme un moyen rapide d'obtenir un noyau sur mesure basé sur l'état actuel d'une machine.

locyesconfig

Cette cible fonctionne de manière similaire à localmodconfig Avec une grande différence: les fonctionnalités fournies par les modules actuellement chargés dans le système seront statiques incluses dans le noyau.

Compilation et installation du noyau

Une fois que nous avons terminé la configuration du noyau, nous pouvons compiler le code source. Tout ce que nous avons à faire est de courir:

$ faire


L'opération peut prendre un certain temps, selon les fonctionnalités que nous avons décidé d'inclure dans le noyau. Pour accélérer le processus que nous pouvons exécuter faire avec le -J Option et spécifiez le nombre de travaux à exécuter simultanément: une valeur souvent utilisée pour cette option est le nombre de cœurs de processeur logiques + 1. Sur une machine avec 4 cœurs logiques, nous courions donc:

$ make -j5

Une fois compilé, pour installer le noyau, nous pouvons simplement exécuter:

$ sudo faire l'installation

Les fichiers de noyau du noyau seront copiés à l'intérieur du /botte annuaire. Pour compiler et installer les modules du noyau, nous pouvons plutôt s'exécuter:

$ sudo faire modules_install

Les modules de noyau seront installés dans un répertoire sous / lib / modules Nommé d'après la version du noyau. Enfin, pour que le nouveau noyau soit disponible et sélectionnable au démarrage, nous devons régénérer la configuration de Grub:

$ sudo grub2-mkconfig -o / boot / grub2 / grub.CFG

Emballage du noyau

Au lieu d'installer directement le noyau compilé comme nous l'avons fait ci-dessus, afin de pouvoir gérer son installation et son retrait via le gestionnaire de package système, nous pouvons créer un Package RPM. Pour accomplir la tâche, nous devons en utiliser un entre le RPM-PKG et binrpm-pkg cibles. Le premier construira à la fois les packages RPM source et binaire, le second seul le binaire. Pour que cette cible fonctionne correctement, le rpm-build Le package doit être installé. Pour construire uniquement le package de RPM binaire, nous courions:

$ faire binrpm-pkg

Si les opérations sont effectuées sans erreurs, le rpmbuild L'arbre d'annuaire sera créé dans notre répertoire domestique. Le package RPM construit sera disponible dans un sous-répertoire de ~ / RPMBUILD / RPMS Nommé d'après l'architecture du système.

Une autre option consiste à emballer le noyau et ses modules à l'intérieur d'un tarball comprimé, en utilisant un entre le targz-pkg, tarbz2-pkg et tarxz-pkg cibles, selon la compression que nous voulons utiliser. Le tarball sera créé à l'intérieur du répertoire source du noyau.



Conclusions

Dans ce tutoriel, nous avons appris à savoir pourquoi Linux est appelé noyau monolithique et comment ses composants peuvent être configurés statiquement ou comme modules. Nous avons vu comment télécharger un noyau de vanille et les différentes méthodes que nous pouvons utiliser pour la configurer. Enfin, nous avons vu comment le compiler, l'emballer et l'installer dans notre système. Un dernier conseil: si vous décidez de recompiler le noyau, c'est toujours une bonne idée d'invoquer l'un des cibles de nettoyage avant de procéder:

  • faire le ménage: Supprime les fichiers les plus générés mais gardez la configuration et suffisamment de support de construction pour créer des modules externes
  • mrproper: Supprime tous les fichiers générés + config + divers fichiers de sauvegarde
  • distclean: Exécute MRProper et supprime également les fichiers de sauvegarde et de correctif de l'éditeur

Tutoriels Linux connexes:

  • Choses à installer sur Ubuntu 20.04
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Téléchargement Linux
  • Fichiers de configuration Linux: 30 premiers
  • Choses à faire après l'installation d'Ubuntu 22.04 Jammy Jellyfish…
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?
  • Linux peut-il obtenir des virus? Exploration de la vulnérabilité de Linux…
  • Choses à installer sur Ubuntu 22.04
  • Comment doubler Kali Linux et Windows 10