Quand vous aurez besoin de compiler votre propre noyau

Quand vous aurez besoin de compiler votre propre noyau

Donc, vous avez décidé d'essayer cette chose dont vous avez entendu parler d'autres, appelé «compilation d'un noyau personnalisé». Si vous essayez cela comme un passe-temps, ou parce que vous voulez apprendre très bien une nouvelle compétence - lisez la suite.

Cependant, avant de commencer, nous essaierons d'expliquer les situations lorsque cela se pose et comment y faire face. Notez qu'il s'agit d'un sujet étendu qui a besoin de beaucoup plus en termes d'espace que nous ne le fournirons ici. Vous apprendrez les bases, ce dont vous avez besoin, que faire et ce que vous réaliserez.

Pour plus d'informations, comme d'habitude, Google est votre ami; De plus, la documentation résidant dans l'arbre source du noyau répondra à de nombreuses questions. Alors, commençons par le début, avec une dernière note: si besoin se produit, nous publierons plus d'articles liés à la compilation du noyau concernant d'autres distros.

Quand vous aurez besoin de compiler votre propre noyau

La première situation serait lorsque vous avez besoin d'un noyau plus récent que votre distribution, surtout lorsque vous exécutez une distribution stable (E.g. Debian Stable, Centos), parce que votre noyau ne prend pas en charge une fonctionnalité / pilote dont vous avez besoin, ou simplement parce que vous sentez que vous voulez essayer le dernier et le meilleur.

Un avertissement, cependant: Si vous voulez exécuter un noyau de saignement, assurez-vous qu'il sera compatible avec d'autres composants clés de votre système (comme GLIBC), n'oubliez pas que plus récent signifie moins de tests et (probablement) plus d'instabilité; Les agents de noyau de votre distribution font généralement du bon travail en rétablissement de nouvelles fonctionnalités aux noyaux plus anciens et plus stables, alors assurez-vous que vous avez vraiment besoin de saignement. Notre conseil n'est pas d'utiliser ces noyaux (les grains à long terme feraient une exception ici) sur les systèmes de production. Comme dit, faites confiance aux mainteneurs de votre distribution.

La deuxième situation est que vous sentez que vous utilisez un noyau gonflé, avec beaucoup de composants inutiles. Alors que le noyau ne charge que des modules correspondant à un matériel existant, une empreinte mémoire plus petite du noyau aide généralement à la vitesse et au démarrage.

# lspci -vv # lsusb # hwinfo # cat / proc / cpuinfo 

Les commandes ci-dessus vous aident à mieux connaître votre matériel. Notez ce que vous avez trouvé et assurez-vous d'exécuter les commandes LS * ci-dessus comme racine, pour plus d'informations.

Une autre situation serait que vous voudrez aider à tester le noyau en exécutant les dernières dernières. Les mêmes avertissements que ci-dessus s'appliquent: faites-le sur les systèmes de test, restez en contact avec en amont au cas où vous trouverez un bug (LKML.L'organisation est la liste de diffusion principale du noyau - un trafic élevé) et essayez d'être aussi utile que possible lorsqu'on lui a demandé des informations.Cela ne peut pas être suffisamment stressé: lisez la documentation, soit parce que vous vous trouvez dans une situation désagréable, que vous souhaitez signaler un bug ou simplement avoir des questions.

Ensuite, vous voudrez peut-être être l'enfant cool sur le bloc et exécuter le dernier et le meilleur, peut-être en jetant un coup d'œil à la source (à condition que vous soyez dans ceci et que vous avez des connaissances C et ASM) et même soumettre des correctifs. Vous voudrez peut-être regarder d'abord si votre distribution n'offre pas déjà un package de noyau plus récent, par exemple, vous pouvez installer les noyaux de Debian Experimental sur un système de test, si vous modifiez vos sources.Liste en conséquence. Encore une fois, travaillez avec les responsables si vous tombez sur un bug.

Terminologie

Avant de plonger davantage dans ce sujet quelque peu arcanique, nous devons clairement dire clairement des termes de base; Ceci est essentiel pour comprendre les parties clés des tests et de la compilation du noyau.

  • noyau - Le cœur du système d'exploitation, responsable de la gestion des ressources matérielles (E / S, réseau, CPU, mémoire…). Fondamentalement, c'est la partie essentielle du système d'exploitation responsable de tout le sale boulot. Les programmes d'utilisateurs communiquent avec le noyau, en demandant le temps du processeur ou d'autres ressources par des bibliothèques système qui agissent comme des intermédiaires entre l'utilisateur (voir ci-dessous) et le noyau / matériel. Les grains peuvent être monolithiques et microkernels (pour plus d'informations, si vous êtes intéressé, consultez les approches de conception à l'échelle du noyau à Wikipedia.org . Les microkernels (comme Minix) utilisent un schéma de conception qui divise le noyau du reste du noyau, et ce repos est divisé en composants, chacun faisant quelque chose de spécifique: E / S, réseautage, etc. Les grains monolithiques (Linux, BSD, Solaris), comme son nom l'indique, comprend la plupart du noyau dans une unité, ayant des fonctionnalités supplémentaires (E.g. conducteurs) fournis par des modules. Il y a aussi des noyaux hybrides, une combinaison entre les deux, un bon exemple étant le noyau Windows.
  • terres utilisateur - Tout dans un système d'exploitation qui ne fait pas partie du noyau (bibliothèques, applications) ferait partie de l'utilisateur. Le nom est aussi évident.
  • module - Comme indiqué précédemment, un module de noyau est un logiciel binaire qui «enseigne» au noyau comment «parler» avec un matériel ou fournir des fonctionnalités (e.g. NFS)
  • compilateur - Le compilateur est une application qui prend essentiellement le code écrit, tel que téléchargé par vous à partir du noyau.org, et le transforme en binaires. Le compilateur trouvé dans Linux Distributions est appelé «GCC», et qui signifie GNU Compiler Collection, qui a également besoin de composants essentiels pour créer des logiciels: utilitaires trouvés dans des binutilles comme l'assembleur (AS) ou la bibliothèque Archiver (AR) .Sur Debian Systems, ou Ubuntu, on peut trouver le package auquel appartient un fichier en installant et en exécutant APT-FILE. En parlant de cela, voyons quels packages nous devons installer pour une construction de noyau réussie.
  • noyau de vanille - Ceci est le nom utilisé pour le noyau en amont, comme trouvé sur le noyau.org, donc sans correctifs spécifiques à la distribution.

Veuillez noter que chaque fois que vous voyez une commande dans ce document en commençant par l'invite '$' Cela signifie que la commande devra être exécutée comme un utilisateur normal et quotidien; Chaque fois que vous voyez le '#' Invite, cela signifie que la commande doit être exécutée comme racine (nous utilisons sudo, mais ce n'est pas obligatoire). Le répertoire actuel, sauf indication contraire, est celui qui maintient votre arbre source, dans ce cas, Linux-2.6.

Ce que vous devez installer

  • GCC - Bien sûr, le compilateur est essentiel
  • Binutils - Ce package contient la liaison, l'assembleur et les autres utilitaires essentiels à la compilation de programmes écrits en C.
  • GCC-DOC - Les pages manuelles et d'informations pour GCC. Utile si vous voulez vous salir et modifier certains drapeaux de compilation. Utile de toute façon si vous voulez écrire ou compiler les packages C.
  • GDB - Le débogueur GNU. Pas obligatoire mais utile si quelque chose ne va pas. GDB-DOC aidera également.
  • Libreadline5-Dev - pour utiliser l'interface basée sur la configuration du noyau. Vous pouvez utiliser d'autres interfaces (voir ci-dessous).
  • faire - sera installé comme dépendance, mais peu de mots sont en ordre. Consultez le manuel ou les livres, car ce n'est pas un sujet à expliquer légèrement dans un si court espace. Faire est un utilitaire utilisé lors de la compilation des programmes C / C ++, et ce qu'il fait, c'est qu'il ressemble dans un makefile, contenant des règles sur la façon et dans quel ordre la construction devrait se produire, et essaie d'exécuter ces directives. Lisez les Makefiles dans l'arbre source pour avoir un aperçu.
  • Git - Git est un VCS (système de contrôle des versions), faisant ce que fait CVS ou Subversion, à savoir vous garder à jour avec le dernier arbre de noyau.

Obtenir la source du noyau

Si vous souhaitez installer la source à partir de votre distribution, utilisez

# apt-get install linux-sourcece-

où peut être rassemblé de l'émission:

uname -r 

Utilisez-le si vous souhaitez modifier votre noyau existant (ajout de conducteurs, tailleur, etc. ). Sinon, tu veux le noyau de vanille. Vous pouvez l'obtenir à partir de www.noyau.org (nous suggérons WGET ou CURL ici en tant que gestionnaires de téléchargement) ou, si vous voulez le dernier, vous utiliserez Git. Nous vous recommandons de stocker la source dans le répertoire personnel de votre utilisateur et la commande pour obtenir le dernier arbre principal est (voir Man Git):

$ git clone git: // git.noyau.org / pub / scm / linux / noyau / git / torvalds / linux-2.6.git linux-2.6 

Dans le passé, nous avons trouvé le mini-Howto à http: // Linux.yyz.États-Unis / Git-Howto.HTML pour être utile; Découvrez également KernelNewbies.org . La commande ci-dessus créera un dossier dans votre répertoire actuel nommé Linux-2.6, qui peut être mis à jour plus tard par CD à lui et en émettant un simple

faire propre; tirage git 

Maintenant, après avoir la source, nous devrons configurer le noyau .

Configuration et construction

Si vous avez un existant .Fichier de configuration (le fichier qui contient les options de construction du noyau - ce qui se passe et ce qui ne le fait pas), copiez-le dans Linux-2.6 (From / boot / config- or / proc / config.GZ - la configuration actuelle). Si vous ne souhaitez pas modifier le .config, il suffit de problème

$ make oldconfig 

Sinon, lisez la suite. Si vous souhaitez modifier la configuration existante, émettez

$ faire menuconfig 

(Recommandation: vous pouvez utiliser Make Config pour de nombreuses questions sur les options dans le noyau, ou faire XConfig, qui nécessite des bibliothèques QT, pour un menu plus agréable et graphique), et sélectionnez «Chargez un fichier de configuration alternatif» et appuyez sur Entrée .config, le nom par défaut du fichier de configuration, ou saisissez un autre nom de fichier déjà enregistré dans Linux-2.6.

Après cela, commencez à parcourir les menus pour faire des modifications nécessaires à la règle de base ici est «Si vous ne savez pas ce que c'est, ne le plaisante pas», du moins jusqu'à ce que vous ayez une expérience. À la fin, dans le menu supérieur, sélectionnez «Enregistrer un fichier de configuration alternatif», appuyez sur Entrée pour le nom par défaut (.config - recommandé) puis «sortir» d'en bas. Si vous voulez commencer à zéro, oubliez l'étape «Chargez un fichier de configuration alternatif» et continuez. Lors de votre prochaine compilation du noyau, après avoir nettoyé et mis à jour l'arborescence, utilisez `` Making OldConfig 'comme ci-dessus pour utiliser l'ancienne configuration. Ok, maintenant nous avons la configuration adaptée à nos besoins qui attend juste pour être construite. La construction d'un noyau est aussi simple que de la configurer (!). Just Type Kak et la sortie devrait ressembler ci-dessous:

$ faire des scripts hostcc / Basic / fixdep hostcc scripts / kconfig / confre.o scripts expédiés / kconfig / zconf.languette.c Scripts expédiés / kconfig / zconf.lex.c Scripts expédiés / kconfig / zconf.hacher.c hostcc scripts / kconfig / zconf.languette.o hostld scripts / kconfig / conf chk include / linux / version.h upd include / linux / version.h chk incluent / généré / utsrelease.h upd inclut / généré / utsrelease.H CC Noyau / limites.S Gen Inclut / généré / Bounds.H CC Arch / x86 / Kernel / ASM-Offsets.s… 

Et, après un certain temps, selon la configuration de votre machine et du noyau, cela sera fait. Si vous voulez accélérer un peu les choses, utilisez le drapeau -jn pour faire, où n est le nombre de processeurs / cœurs + 1. Soyez prudent cependant, cela peut exposer des bogues dans le noyau ou construire une infrastructure, donc si quelque chose ne va pas, essayez à nouveau en utilisant simplement la marque sans drapeau. Si après avoir lu le manuel du GCC (et si vous êtes toujours sain d'esprit), vous vous sentez aventureux et souhaitez modifier certains indicateurs spécifiques au matériel ou vous sentez que l'optimisation du code, utilisez la page manuelle de Make pour savoir comment (principalement les coptes et les CFLAGS ). Cependant, les optimisations plus grandes que -O2 sont risquées.

Soyez prudent et attendez-vous à une rupture, le noyau peut se compiler sans problème, mais il peut agir bizarre. N'oubliez pas de taper toutes les commandes comme utilisateur normal. Pas besoin de construire en tant que racine et les développeurs du noyau froncent les sourcils sur l'idée.

Installation

Installons maintenant les modules: cela doit être fait en tant que racine, car les modules sont installés dans / lib, et l'utilisateur normal n'a pas d'accès en écriture là-bas. Donc,

# faire modules_install 

fait exactement cela, et cela doit être fait avant d'installer le noyau afin que les modules et le noyau installé soient synchronisés. Utiliser

# faire l'installation 

Pour installer le noyau sur / démarrer, puis

# depmod 

et se préparer à créer un INITRAMFS (Système de fichiers RAM initial), qui est un système de fichiers temporaire chargé en RAM dans les premières étapes de démarrage, et est utilisé pour fournir des pilotes de base et d'autres installations afin que le système de fichiers racine soit monté. Plus d'informations peuvent être trouvées dans la page Initrd de Wikipedia. La commande nécessaire pour la tâche est la mise à jour-Initramfs (ceci est également invoqué chaque fois qu'un nouveau noyau est installé, déclenché par le gestionnaire de packages) qui peut créer un initRamfs (-c) ou mettre à jour un existant (-u) . La commande complète est

# Update-Initramfs -C -K 

La version est celle que vous verrez après les finitions «Making modules_install» (la dernière ligne de sa sortie sera «Depmod»).Si vous souhaitez avoir le numéro de version exact et plus long, afin que vous puissiez dire aux développeurs quel «moment git» que vous avez utilisé, sélectionnez «Configuration générale» → «Ajouter automatiquement les informations de version à la chaîne de version» après avoir émis Menuconfig. La sortie sur mon système Ubuntu ressemble à ainsi de suite:

Mise à jour-Initramfs: génération / démarrage / initrd.IMG-3.1.0-RC3 +… 

Mettez à jour votre plan pour que cela remarque votre nouveau noyau avec

# Update-Grub 

Sur ma machine de test Debian, la sortie ressemble à ceci:

Générer de la planche.CFG… Image d'arrière-plan trouvée: / usr / share / images / base de bureau / bourse de bureau.PNG Found Linux Image: / boot / vmLinUz-3.0.0-1-AMD64 Found initrd image: / boot / initrd.IMG-3.0.0-1-amd64 Found Linux Image: / boot / vmLinUz-3.0.0-RC6-AMD64 Found initrd image: / boot / initrd.IMG-3.0.0-RC6-AMD64 Found Linux Image: / boot / vmLinUz-2.6.39-07727-gbd1bfe4 Found initrd image: / boot / initrd.img-2.6.39-07727-gbd1bfe4 Found Linux Image: / boot / vmLinUz-2.6.39-2-AMD64 Found initrd image: / boot / initrd.img-2.6.39-2-AMD64 Found Linux Image: / boot / vmLinUz-2.6.39-RC7-AMD64 Found initrd image: / boot / initrd.img-2.6.39-RC7-AMD64 Found Linux Image: / boot / vmLinUz-2.6.38.5 Found initrd image: / boot / initrd.img-2.6.38.5 Image Linux trouvée: / boot / vmlinuz-2.6.38.4-00001-GFAA8EE7 Found initrd image: / boot / initrd.img-2.6.38.4-00001-GFAA8EE7 Found Linux Image: / boot / vmLinUz-2.6.38.4 Found initrd Image: / boot / initrd.img-2.6.38.4 Found Linux Image: / boot / vmLinUz-2.6.38-2-AMD64 Found initrd image: / boot / initrd.img-2.6.38-2-AMD64 Found Linux Image: / boot / vmLinUz-2.6.32-5-AMD64 Found initrd image: / boot / initrd.img-2.6.32-5-AMD64 Found memtest86 + image: / memtest86+.Bin Found Memtest86 + Image multiboot: / memtest86 + _multiboot.poubelle faite 

Bien sûr, votre sortie ne sera pas exactement la même, mais le contour devrait être le même; Enfin, n'oubliez pas: si vous le souhaitez, modifiez / etc / par défaut / grub pour modifier certaines options avant la mise à jour et, avec les doigts croisés, redémarrez votre machine pour tester le nouveau noyau.

Si quelque chose ne va pas

Les situations les plus habituelles lorsque votre nouveau noyau est inutilisable est que vous ne pouvez pas le démarrer en premier lieu, ou qu'il bottise et qu'il n'a pas de pilote essentiel (par exemple les pilotes de réseautage). Habituellement, Update-Grub fait un bon travail en écrivant le fichier de menu Grub, mais vous voudrez peut-être le vérifier de toute façon. Si vous passez de la planche, il est probable que vous soyez trop zélé et que vous vous êtes épousé un pilote essentiel pour le système, comme les pièces liées au disque (ATA, SATA, SCSI…), ou peut-être NFS, si vous avez une racine montée sur NFS. Démarrez un noyau de travail et reconfigurez-le, en utilisant Google et d'autres sources possibles, comme l'IRC .

Il y a de fortes chances que quelqu'un tombe déjà sur votre problème dans le passé et vous avez des chances de trouver une réponse. Si le problème est plus sérieux et que vous êtes convaincu que vous lisez sur la netiquette et comment publier sur la liste de diffusion du noyau, demandez bien. Il y a beaucoup de gens gentils et serviables là-bas, mais ils ont tendance à ne pas être si nice lorsque vous n'avez pas fait vos devoirs et / ou perdre leur temps. Si vous avez un séparé / démarrage, gardez à l'esprit qu'il n'est généralement pas très grand et qu'il pourrait se remplir rapidement des grains. Aussi / lib / modules ont tendance à accumuler beaucoup d'espace dans /, alors assurez-vous de faire du nettoyage de temps en temps. N'oubliez pas que le noyau est un logiciel complexe et que de nombreuses causes peuvent être à l'origine de vos problèmes. Si vous n'avez eu aucun problème à suivre ce guide, vous êtes prêt pour une configuration de noyau Linux plus avancé.

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
  • Ubuntu 20.04 Guide
  • Comment supprimer les vieux noyaux sur Ubuntu
  • Choses à faire après l'installation d'Ubuntu 22.04 Jammy Jellyfish…
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?
  • Système linux hung? Comment s'échapper vers la ligne de commande et…
  • Choses à installer sur Ubuntu 22.04
  • Installez Arch Linux dans VMware Workstation