J'aimerais essayer d'utiliser un noyau autre que celui fourni par ma distro - soit d'ailleurs, ou comme personnalisé par moi. Est-ce difficile ou dangereux?
Où est-ce que je commence?
Construire un noyau sur mesure peut consommer du temps - principalement dans la configuration, car les ordinateurs modernes peuvent faire la construction en quelques minutes - mais ce n'est pas particulièrement dangereux si Vous gardez votre actuel, Le noyau de travail et assurez-vous de laisser cela comme une option via votre chargeur de démarrage (voir l'étape 6 ci-dessous). De cette façon, si votre nouveau ne fonctionne pas, vous pouvez simplement redémarrer l'ancien.
Dans les instructions suivantes, les chemins à l'intérieur de l'arborescence source prennent le formulaire [src]/whatever
, où [src]
est le répertoire que vous avez installé la source dans, par exemple. /usr/src/linux-3.13.3
. Vous voulez probablement faire ce genre de choses su root
Comme l'arborescence source doit rester sécurisé en termes d'autorisations d'écriture (il devrait appartenir à la racine).
Bien que certaines des étapes soient facultatives, vous devez les lire de toute façon, car ils contiennent des informations nécessaires pour comprendre le reste du processus.
Téléchargez et décompressez la boucle source.
Ceux-ci sont disponibles à partir de kernel.org . Les derniers sont énumérés sur la page d'accueil, mais si vous regardez à l'intérieur de l'/pub/
Répertoire, vous trouverez ne archive Aller jusqu'à la version 1.0. À moins que vous ayez une raison particulière à faire autrement, vous êtes le meilleur possible de choisir la "dernière stable". Au moment de cette rédaction, il s'agit d'un 74 Mo tar.xz
déposer.
Une fois que la Tarball est téléchargée, vous devez le déballer quelque part. L'endroit normal est en /usr/src
. Placez le fichier là-bas et:
tar -xJf linux-X.X.X.tar.xz
Notez que les distributions individuelles vous recommandent généralement d'utiliser l'un de leurs forfaits source au lieu de l'arbre de la vanille. Ceci contient des correctifs spécifiques à la distribution, qui peuvent ou peut ne pas vous importer. Il correspondra également au noyau incluez les en-têtes utilisés pour compiler des outils d'espace d'utilisateur, bien qu'ils soient probablement identiques de toute façon.
Dans plus de 15 ans de construction de noyaux sur mesure (principalement sur Fedora/Debian/Ubuntu), je n'ai jamais eu de problème avec la vanille1 la source. Cela ne fait pas vraiment beaucoup de différence, cependant, au-delà du fait que si vous voulez le dernier noyau absolu, votre distribution ne l'a probablement pas encore emballé. de sorte que la route la plus sûre reste à utiliser le package de distribution, qui devrait s'installer dans /usr/src
. Je préfère la dernière écurie afin que je puisse agir comme un cochon d'Inde avant qu'il soit déployé dans les distributions :)
Commencez par une configuration de base [facultatif].
Vous n'avez pas à faire cela - vous pouvez simplement plonger et créer une configuration à partir de zéro. Cependant, si vous n'avez jamais fait cela auparavant, attendez-vous beaucoup d'essais et d'erreurs. Cela signifie également avoir à lire la plupart des options (il y a des centaines). Un meilleur pari est d'utiliser votre configuration existante, si possible. Si vous avez utilisé un package source de distribution, il contient probablement déjà un [src]/.config
Fichier, vous pouvez donc l'utiliser. Sinon, vérifiez pour un /proc/config.gz
. Ceci est une fonctionnalité facultative ajoutée dans le 26 noyau. S'il existe, copiez cela dans le niveau supérieur de l'arborescence source et gunzip -c config.gz > .config
.
Si cela n'existe pas, c'est peut-être parce que cette option a été configurée en tant que module. Essayer Sudo modprobe configs
, alors vérifiez le /proc
répertoire pour config.gz
de nouveau.
La configuration Distro n'est pas très idéale en ce sens qu'il comprend presque tous les pilotes de matériel possible. Cela n'a pas d'importance pour la fonctionnalité du noyau, car ils sont des modules et la plupart d'entre eux ne seront jamais utilisés, mais il augmente de manière très significative le temps nécessaire à la construction. Il est également gênant en ce sens qu'elle nécessite un injusteur contenant certains modules de base (voir l'étape 4 ci-dessous). Cependant, c'est probablement un meilleur point de départ que la valeur par défaut.
Notez que les options de configuration décalmentez et changez d'une version du noyau à l'autre, et lorsque vous exécutez l'un des make config
programmes ci-dessous votre .config
sera d'abord analysé et mis à jour pour correspondre à la nouvelle version. Si la configuration provient d'une version très ancienne, cela peut entraîner des résultats étranges, alors faites attention lorsque vous effectuez la configuration. AFAIK, cela ne fonctionnera pas de toute l'inverse (en utilisant une configuration d'une version plus récente).
Créer un .config
uration.
[src]/.config
est un fichier texte utilisé pour configurer le noyau. Ne modifiez pas ce fichier directement. La modification des options n'est souvent pas une simple question de remplacement d'un Y
avec un N
, etc. Il existe généralement un ensemble d'interdépendances et de possibilités de ramification. Au lieu de cela, vous souhaitez utiliser l'une des cibles de configuration du makefile du noyau (sens, entrer make _____
sur la ligne de commande du répertoire source de niveau supérieur):
make config
est le plus fondamental mais probablement pas à la plupart des gens. C'est une séquence de questions - beaucoup de questions - et si vous changez d'avis, vous devez recommencer.
make oldconfig
est comme make config
Sauf si vous avez déjà un .config
À partir d'une version précédente, sautera des questions sauf celles relatives aux nouvelles options. Il en reste beaucoup de personnes et la plupart d'entre eux ne seront pas pertinents pour vous encore une fois, je ne le recommande pas.
make menuconfig
est mon (et je pense que la plupart des autres) la méthode préférée. Il construit et exécute une interface TUI (menus colorés qui fonctionneront sur un terminal). Cela nécessite que vous ayez le -dev
Paquet pour les ncurses installés. Il est assez explicite, à l'exception de la perche accessible via /
; L'option F1 "Aide" fournit une explication de l'option en cours. Il y a une version alternative, make nconfig
, avec quelques fonctionnalités supplémentaires, où F2 "Syminfo" est l'équivalent de la F1 de Menuconfig.
make xconfig
est une interface GUI complète. Cela nécessite qmake
et le -dev
Package pour QT être installé, de nouveau, c'est un programme compilé et construit. Si vous n'utilisiez pas ces personnes précédemment, cela peut être un téléchargement substantiel. La raison pour laquelle je préfère menuconfig
à la version de l'interface graphique est que les hiérarchies d'options sont présentées à l'aide d'écrans successifs dans l'ancien mais ouvert d'accordéon dans ce dernier.
L'une des premières choses que vous devriez (mais vous n'avez pas à) faire est d'ajouter une chaîne de "version locale" (sous Configuration générale). La raison de cela est mentionnée dans le n ° 5 ci-dessous.
"Labyrinthine" est un bon moyen de décrire la hiérarchie des options et de mettre en détail en détail qui dépasse bien la portée d'un Q & A comme celui-ci. Si vous voulez vous asseoir et passer à travers tout, mettez de côté heures. Greg Kroah-Hartman (Long Time Lead Dev pour le Kernel Linux) dispose d'un livre en ligne gratuit sur le noyau (voir les références ci-dessous) qui contient n chapitre sur la configuration , bien qu'il ait été écrit en 2006. Mon conseil est de commencer par une base raisonnable de votre noyau de distribution actuel (selon le n ° 2), puis passez-la et décochez toutes les choses que vous savez que vous n'avez pas besoin. Vous voudrez probablement changer certaines des options "Module" sur "intégrées", ce qui nous amène à mon prochain point ...
environ initramfs
[facultatif]
Un "initialRamfs" est un système de fichiers compressé intégré au noyau et/ou chargé au démarrage. Son objectif principal est d'inclure des modules que le noyau aura besoin avant d'accéder à ceux de /lib/modules
Sur le système de fichiers racine - par exemple, les pilotes de l'appareil contenant ce système de fichiers. Les distributions utilisent toujours ces éléments partiellement car les pilotes sont mutuellement incompatibles, et ne peuvent donc pas être construits dans le noyau. Au lieu de cela, ceux appropriés au système actuel sont sélectionnés dans l'intérieur du initramfs
.
Cela fonctionne bien et ne représente aucune sorte d'inconvénient, mais c'est probablement une complication inutile lors de la construction de votre propre noyau.2 La capture est, si vous n'utilisez pas d'injusteur, Vous devez vous assurer que les pilotes de votre système de fichiers racine (et le périphérique qu'il est activé) sont intégrés au noyau. dans menuconfig
, c'est la différence entre une option M
(= module) et a *
(= option intégrée). Si vous ne recevez pas ce droit, le système échouera tôt dans le processus de démarrage. Ainsi, par exemple, si vous avez un disque dur SATA et un système de fichiers racine EXT4, vous avez besoin de pilotes pour ceux intégrés. [Si quelqu'un peut penser à autre chose qui est indispensable, laissez un commentaire et que je vais intégrer cela ici].
Si vous souhaitez utiliser un initramfs
, vous devez sélectionner les options appropriées dans Configuration générale. Il y a un guide de squelette pour créer un intégré au noyau dans [src]/Documentation/filesystems/ramfs-rootfs-initramfs.txt
, mais notez que les distributions ne font pas cela; Ils utilisent un fichier CPIO gzippé externe. Cependant, que DOC contient une discussion sur ce qui devrait aller dans le initramfs
(voir "Contenu de InitiGraMFS").
Construisez et installez le noyau.
La prochaine étape est facile. Pour faire le noyau, il suffit de courir make
dans le [src]
répertoire. Si vous êtes sur un système multicœur, vous pouvez ajouter -j N
Pour accélérer les choses, où N
est le nombre de noyaux que vous souhaitez dédier + 1. Il n'y a pas test
ou check
. Une fois que c'est fait, vous pouvez make modules
. Sur une boîte rapide, tout cela devrait prendre <10 minutes.
Si tout va bien, make INSTALL_MOD_STRIP=1 modules_install
. Cela créera un répertoire dans /lib/modules
correspondant au numéro de version du noyau plus la chaîne "Version locale" mentionnée à l'étape 3, le cas échéant. Si vous n'avez pas utilisé de chaîne de "version locale", Soyez prudent si vous avez déjà un noyau de la même version que vous dépendez de, car ces modules remplaceront celles-ci.3INSTALL_MOD_STRIP=1
est facultatif, pour la signification voir ici .
Vous pouvez alors make install
Pour installer le noyau à un emplacement par défaut. Ma recommandation, cependant, est de le faire vous-même pour que aucun fichier existant soit écrasé. Regarder dans [src]/Arch/[Arch]/boot
pour un fichier nommé bzImage
4, où [Arch]
est x86
Si vous êtes sur une machine X86 ou X86-64 (et quelque chose d'autre si vous êtes sur autre chose). Copier cela dans /boot
et renommez-le à quelque chose de plus spécifique et informatif (peu importe quoi). Faire la même chose avec [src]/System.map
, mais renommez-le selon le schéma suivant:
System.map-[VERSION]
Ici, [VERSION]
est exactement le même que le nom du répertoire de /lib/modules
créé par make modules_install
, qui inclura la chaîne "Version locale", par exemple, System.map-3.13.3-mykernel
.
Configurez le GRUB 2 bootloader.
Si vous n'utilisez pas grub
(la majorité des utilisateurs de bureau Linux sont), cela ne vous concerne évidemment pas. Vous devriez avoir un /etc/grub.d/40_custom
Dossier avec pas beaucoup dedans. Sinon, créez-la possédée par root et chmod 755
(il doit être exécutable). À cet ajout:
menuentry 'My new kernel, or whatever' {
set root='hd0,1'
linux /boot/[name-of-kernel] root=/dev/sda1 [other kernel options]
}
Si vous utilisez un initramfs, vous devez également avoir une dernière ligne initrd /path/to/initramfs
. Méfiez-vous de set root=
ligne. L'exemple présume Grub a été installé sur la première partition du premier disque dur (HD0,1). Si vous avez plusieurs lecteurs, vous voudrez peut-être utiliser la partition UUID et remplacer cette ligne avec:
search --no-floppy --fs-uuid --set=root [the UUID of the partition]
À moins que GRUB ne soit pas sur votre système de fichiers racine, cela devrait également correspondre à la root=
directive sur la ligne linux
, qui indique votre système de fichiers racine (celui avec /sbin/init
et /lib/modules
). La version UUID de c'est root=UUID=[the UUID]
.
Vous pouvez regarder votre existant /boot/grub2/grub.cfg
Pour un indice sur le nom du périphérique. Voici n bref guide à tel sous Grub 2. Une fois que vous êtes heureux, courez grub2-mkconfig -o /boot/grub2/grub.cfg
(mais sauvegarder votre actuel grub.cfg
premier). Vous pouvez alors vouloir modifier ce fichier et déplacer votre entrée en haut. Il devrait toujours contenir une liste de votre ancien noyau (en cours d'exécution) et votre distro peut avoir un mécanisme qui dupliquait automatiquement une entrée pour le nouveau noyau (car il a été trouvé dans /boot
; Fedora fait cela, par conséquent, en utilisant un titre distinct avec menuentry
est une bonne idée). Vous pouvez supprimer cela plus tard si tout va bien.
Vous pouvez également insérer simplement le menuentry
dans grub.cfg
directement, mais certaines distributions vont écraser cela lorsque leur noyau est mis à jour (alors que l'utilisation de /etc/grub.d/
le gardera incorporé).
C'est ça. Tout ce que vous avez à faire maintenant, c'est redémarrer. Si cela ne fonctionne pas, essayez de déduire le problème de la sortie d'écran, redémarrez le choix d'un ancien noyau et revenir à l'étape 3 (sauf Utiliser le .config
Vous avez déjà et modifie cela). C'est peut-être une bonne idée de make clean
(ou make mrproper
) entre tentatives mais assurez-vous de copier [src]/.config
Pour une sauvegarde d'abord, car cela va être effacé. Cela aide à faire en sorte que les objets utilisés dans le processus de construction ne soient pas rassis.
En ce qui concerne les en-têtes du noyau et. al.
Une chose que vous devriez probablement faire est symbolique (ln -s -i
) /lib/modules/X.X.X/source
et /lib/modules/X.X.X/build
à la /usr/src
répertoire où l'arborescence source est (gardez cela). Cela est nécessaire pour que certains outils d'espace d'utilisateurs (et installateurs de pilotes tiers) puissent accéder à la source du noyau en cours d'exécution.
Un problème lié à cela est .h
Fichiers dans /usr/include
, etc. Ces changements sont très progressivement et sont compatible vers l'arrière . Vous avez deux choix:
Laissez ceux utilisés par votre distribution. Si vous mettez à jour régulièrement l'ensemble du système, la distribution en installera périodiquement de neufs périodiquement, il s'agit donc de l'option "la moins tracieuse".
Utilisation make headers_install
.
Comme ils sont en retard compatibles (ce qui signifie "un programme construit contre une bibliothèque C utilisant des en-têtes de noyau plus âgés devraient fonctionner sur un nouveau noyau"), vous n'avez pas besoin de vous faire trop de difficulté à ce sujet. Le seul problème potentiel serait si vous construisez un noyau personnalisé et de le conserver pendant un moment, au cours de laquelle la distribution met à jour le package "en-têtes de noyau" sur A plus récent version utilisée pour construire votre Kernel, et Il s'avère être une incompatibilité (qui s'appliquerait uniquement aux logiciels par la suite compilés de la source).
Voici quelques ressources:
[src]/README
comprend un bref guide pour la construction et l'installation.
Les [src]/Documentation
Le répertoire contient beaucoup d'informations pouvant être utiles dans la configuration.
Une grande partie du livre de Greg K-H Kernel Linux en une noisette (disponible gratuitement en tant que série de PDF) tourne autour de la construction du noyau.
Grub 2 a un Manuel en ligne .
1. "Vanilla" fait référence à la source officielle originale et non adlectricité telle que trouvée à Kernel.org. La plupart des distributions prennent cette source de vanille et ajoutent des personnalisations mineures.
2. Notez qu'il existe des circonstances qui nécessitent un injustRamfs car certains utilisateurs sont nécessaires pour monter le système de fichiers racine - par exemple, s'il est crypté ou réparti sur un tableau RAID complexe.
3. Il ne supprimera pas les modules déjà présents si vous ne les avez pas créés, ce qui signifie que vous pouvez ajouter un module plus tard en modifiant simplement votre configuration et en cours d'exécution make modules_install
de nouveau. Notez que la construction de certains modules peut nécessiter des modifications du noyau lui-même, auquel cas vous devez également remplacer le noyau. Vous serez capable de dire lorsque vous essayez d'utiliser modprobe
pour insérer le module.
4. Ce fichier peut être nommé quelque chose de différent si vous avez utilisé une option de compression non standard. Je ne suis pas sûr de quelles sont toutes les possibilités.