Compiler un nouveau noyau

De ArchwikiFR


Cet article est une introduction à la méthode de compilation d'un noyau personnalisé à partir des sources de kernel.org. La suite décrit la méthode traditionnelle de compilation du noyau Linux qui s'applique à toutes les distributions.

Important :

Il est absolument exclu de procèder ainsi pour installer votre noyau personnalisé sous Arch (vous risquez de corrompre votre système et au minimum de laisser traîner des fichiers non gérables par pacman).

La bonne pratique consiste à créer le PKGBUILD et les fichiers d'installation qui conviendront à vos besoins. Pour ce faire, le plus simple est de repartir des sources du PKGBUILD du kernel linux ou linux-lts (accessibles sur https://projects.archlinux.org/svntogit/packages.git/tree/ ) et de les adapter (d'autres exemples existent sur AUR). Par conséquent si les étapes de configuration décrites ci-après peuvent donc parfaitement vous aider à isoler les options dont vous avez l'utilité, il est en revanche totalement exclu de compiler et d'installer directement le nouveau noyau: passer par votre nouveau PKGBUILD et les fichiers adaptés.

Obtenir les sources

  • Les sources sont disponibles sur http://www.kernel.org. Vous pouvez les télécharger avec des outils graphiques ou en ligne de commande qui font appel à : HTTP, FTP, RSYNC, ou Git.

Dans l'exemple ci-dessous nous utilisons wget via http:

$ wget -c https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.tar.xz
  • Il est recommandé de vérifier la signature d'une archive tar téléchargée. Reportez-vous à kernel.org/signature pour avoir des informations sur la manière de le faire.
  • Copiez les sources du noyau dans un dossier que vous réserverez à la compilation des noyaux, par exemple :
$ cp linux-3.18.tar.xz ~/kernelbuild/
  • Décompressez l'archive et entrez dans le dossier qui a été créé :
$ cd ~/kernelbuild|
$ tar -xvJf linux-3.18.tar.xz
$ cd linux-3.18

Préparez la compilation en lançant la commande de nettoyage suivante :

$ make mrproper

Ceci garantit que l'arbre du noyau est parfaitement propre. L'équipe du noyau Linux recommande de lancer cette commande avant toute compilation. Ne présupposez pas que l'arbre des sources du noyau est propre après la décompression.

Que dire de /usr/src/ ?

Utiliser /usr/src/ pour compiler en tant que root, associé à la création du lien symbolique correspondant, a fait l'objet de nombreux débats.

  • Certains utilisateurs considèrent qu'il s'agit d'une bonne pratique et que la méthode la plus propre est d'utiliser votre dossier home (en tant qu'utilisateur ordinaire ) pour la configuration et la compilation du noyau, puis de l'installer en tant qu'utilisateur root.
  • D'autres utilisateurs expérimentés considèrent que exécuter le processus complet de compilation en tant qu'utilisateur root est parfaitement sûr, acceptable et même préférable.

Utilisez la méthode qui vous convient. Les instructions qui suivent sont valables pour l'une ou l'autre des méthodes.

Configuration de la compilation

Cette étape est la plus cruciale dans la personnalisation du noyau. Elle lui permettra de s'adapter au mieux aux spécificités de votre matériel. En définissant correctement les options dans le fichier .config, votre noyau et votre ordinateur fonctionneront plus efficacement.

Configurer votre noyau

Attention : si vous compilez le pilote radeon dans le noyau (>3.3.3), pour disposer d'un KMS précoce avec une nouvelle carte vidéo, vous devez inclure les fichiers du microcode (firmware) de votre carte. Si vous ne le faites pas, l'accélération sera perturbée. Voir cette page.
Attention : systemd requiert un certain nombre d'options de configuration pour un usage courant pour des cas d'usages spécifiques (par exemple: UEFI) et pour des fonctionnalités spécifiques de systemd (par exemple: bootchart). Si ces options ne sont pas satisfaisantes, le système pourra être dégradé voire inutilisable. La liste des options de configuration recommandées du noyau est disponible dans le fichier /usr/share/doc/systemd/README. Vérifiez les avant de compiler. Ces options peuvent aussi évoluer dans le temps. Comme Arch suppose que vous utilisez le noyau officiel, ces changements ne seront pas signalés. Avant d'installer une nouvelle version de systemd, consultez les notes de version pour vous assurez que le paramétrage de votre noyau répond à toute nouvelle exigence de systemd.
Astuce : Il est possible de configurer un noyau qui se passe d'initramfs dans des configurations simples. Assurez-vous que les modules requis pour la vidéo, les disques, les entrées et les systèmes de fichiers sont compilés dans le noyau, ainsi que, au grand minimum, la prise en charge de DEVTMPFS_MOUNT, TMPFS, AUTOFS4_FS. Dans le doute, renseignez-vous sur ces options et sur leur signification avant tout essai.

Pour ceux qui débutent

Deux actions faciliteront la vie aux débutants et leur feront gagner du temps :

  • Récupérer le fichier de configuration (.config) du noyau sur lequel le système tourne, pour démarrer avec les options par défaut d'Arch.
 $ zcat /proc/config.gz > .config
  • Utiliser localmodconfig. Depuis le noyau 2.6.32, ceci sélectionne seulement les options utilisées couramment.
  • Démarrer sur le noyau -ARCH, et brancher tous les périphériques que vous pensez utiliser sur le système.
  • Rendez-vous (cd) dans votre dossier source et exécutez :
$ make localmodconfig
  • La configuration résultante sera écrite dans .config. Vous pouvez alors recompiler et installer comme décrit ci-dessous.

La commande traditionnelle menuconfig

Une interface ncurses de configuration du noyau est disponible avec la commande

$ make menuconfig

En alternative, vous pouvez utiliser la commande plus moderne

$ make nconfig

Ceci démarrera avec un fichier .config tout frais, sauf s'il existe déjà (par exemple: après recopie). Les options déjà existantes sont automatiquement sélectionnées. Les nouvelles options (cas où vous reprenez un fichier de configuration correspondant à une ancienne version du noyau) ne seront pas automatiquement sélectionnées mais pourront néanmoins l'être.

Adaptez votre configuration et enregistrez votre nouvelle configuration. Il est conseillé d'en faire une copie en dehors de votre dossier des sources, car vous pouvez être conduit à réitérer le processus maintes et maintes fois avant d'avoir pleine satisfaction. En cas de doute, ne changez qu'un minimum d'option entre deux recompilations. Si vous ne parvenez pas à démarrer sur votre noyau nouvellement compilé, revoyez la liste des items de configuration nécessaires sur cette page. La commande lspci -k # lancée à partir du liveCD vous donne la liste des modules du noyau en utilisation. En priorité, vous devez conserver la prise en charge de CGROUPS; c'est absolument nécessaire à systemd.

Marques de version

Si vous compilez un noyau en utilisant votre fichier de configuration courant, n'oubliez pas de renommer la version de votre noyau, ou le noyau nouvellement compilé pourrait écraser le noyau existant par erreur.

$ make menuconfig
General setup  --->
 (-ARCH) Local version - append to kernel release '3.n.n-RCn'
Note : Ici, -ARCH pourrait être remplacé par Paul-00 si vous vous appelez Paul et qu'il s'agit de votre premier noyau. La prochaine fois, il vous faudrait utiliser Paul-01, et ainsi de suite.

Compilation et installation

Astuce : si vous voulez que gcc optimise en fonction du jeu d'instruction de votre CPU, éditez arch/x86/Makefile et regardez ce que vous avez choisi pour CONFIG_MK8,CONFIG_MPSC,CONFIG_MCORE2,CONFIG_MATOM,CONFIG_GENERIC_CPU dans la rubrique Processor type and features > Processor Family et modifiez l'option call de cc (call cc-option) en -march=native en celle que vous avez définie pour Processor Family. Par exemple: cflags-$(CONFIG_MK8) += $(call cc-option,-march=native). Il s'agit probablement de la meilleure manière de compiler avec -march=native
À améliorer: ceci n'est pas très clair et je manque d'expertise sur ce point.
Attention : Rappel: Compilation et installation décrites par la suite ne sont pas ce qu'il convient de faire sous Arch. Cette descritpion n'est ici que pour détailler les étapes d'une compilation et d'une installation manuelle mais sous Arch il convient de passer par un PKGBUILD adapté.

Compilation

Le temps de compilation peut aller de 15 minutes à plusieurs heures. Ceci dépend du nombre d'options/modules sélectionnés et des capacités du processeur. Voir Makeflags pour les détails.

Exécutez $ make .

Installation des modules

# make modules_install

Ceci copie les modules compilés dans un dossier /lib/modules/[kernel version + CONFIG_LOCALVERSION]. De cette manière, les modules sont gardés séparément de ceux utilisés par d'autres noyaux sur votre machine.

Copie du noyau dans le dossier /boot

# cp -v arch/x86/boot/bzImage /boot/vmlinuz-leNomDeVotreNoyau

Construire un disque virtuel de démarrage — initramfs

Si vous ignorez de quoi il s'agit, reportez-vous à Initramfs Wikipedia et à mkinitcpio.

# mkinitcpio -k NomCompletDuNoyau -c /etc/mkinitcpio.conf -g /boot/initramfs-NomCompletDuNoyau.img

Vous êtes libres de nommer les fichiers de /boot comme vous le voulez. Néanmoins, utiliser le nommage [kernel-major-minor-revision] aide à garder les choses claires si vous:

  • conservez plusieurs noyaux
  • utilisez souvent mkinitcpio
  • compilez des modules de tierces parties .
Astuce : Si vous recompilez fréquemment des images de noyaux, il peut être intéressant de créer un fichier de préréglage séparé et d'utiliser une commande du genre : mkinitcpio -p custom. Voir ici.


Si vous utilisez LILO et qu'il ne parvient pas à communiquer avec le pilote device-mapper du noyau, vous devez exécuter d'abord modprobe dm_mod.

Copie de System.map

Le fichier System.map n'est pas nécessaire pour démarrer Linux. C'est une sorte de répertoire téléphonique des fonctions dans une compilation particulière du noyau. Le fichier System.map contient la liste des symboles du noyau (par exemple le nom des fonctions, des variables, etc.) et les adresses correspondantes. Cette cartographie des symboles est utilisée par :

  • Des processus tels que klogd, ksymoops etc
  • Par l' OOPS handler lorsque les informations doivent être affichées à l'écran lors d'un crash du noyau (c.à.d. l'information sur la fonction qui a provoqué le crash).

Copiez System.map dans /boot, en ajoutant le nom de votre noyau au fichier de destination. Ensuite, créez un lien symbolique /boot/System.map qui pointe vers /boot/System.map-VotreNomDuNoyau.

# cp System.map /boot/System.map-VotreNomDuNoyau
# ln -sf /boot/System.map-VotreNomDuNoyau /boot/System.map

Une fois les étapes précédentes franchies, vous devriez avoir les trois fichiers suivants et un lien symbolique dans votre dossier /boot à côté des fichiers existant précédemment :

  • Kernel: vmlinuz-VotreNomDuNoyau
  • Initramfs-VotreNomDuNoyau.img
  • System Map: System.map-VotreNomDuNoyau
  • System Map symlink: System.map

Configuration du chargeur de démarrage

Ajoutez une entrée pour votre nouveau noyau dans le fichier de configuration de votre chargeur de démarrage.

Astuce : Les sources du noyau contiennent un script pour automatiser le processus pour LILO: arch/x86/boot/install.sh. Pensez à taper lilo en tant qu'utilisateur root à l'invite de commande pour le mettre à jour.

Utilisation du pilote vidéo NVIDIA pour votre nouveau noyau

Pour utiliser le pilote NVIDIA avec votre nouveau noyau, reportez-vous à : cette page. Vous pouvez aussi installer ce pilote depuis AUR.