Calculate kernel

Updated 21 Octobre 2021

Linux

Les versions de noyau

Le noyau Calculate Linux fait partie du package sys-kernel/Calculate-sources et a plusieurs versions et variantes, décrit par USE flags. Exemple :

eix calculate-sources

[I] sys-kernel/calculate-sources [1]
     Available versions:      
     (4.19.96) 4.19.96^bs
     (4.19.97) ~4.19.97^bs
     (5.4.12) 5.4.12^bs{tbz2}
     (5.4.13) ~5.4.13^bs
       {build desktop firmware fsync +grub minimal muqss pae symlink themes uksm +vmlinuz KERNEL="linux"}
     Installed versions:  5.4.12(5.4.12)^bs{tbz2}(02:38:06 18.01.2020)(desktop firmware fsync grub minimal symlink themes vmlinuz -build -muqss -pae -uksm KERNEL="linux")
     Home page:     http://www.calculate-linux.org
     Description:              Calculate Linux kernel image

[1] "calculate" /var/db/repos/calculate 

Pour les versions stables du noyau, et aussi pour plus la nouvelle version du noyau disponible des packages binaires pour le ordinateur et serveur. Quand cet article a été écrit les versions stables de noyau sont 5.4.12 et 4.19.96, et la version actuelle est 5.4.13.

Le noyau Calculate Linux est deux parties pour les ordinateurs et les serveurs par disponibilité USE-flag desktop. Voici la liste de tous les autres USE flags du noyau :

  • firmware - ajoute sys-kernel/linux-firmware ou sys-firmware/eth-firmware aux dépendances
  • fsync améliore les performances des jeux utilisant Proton (de Valve)
  • grub ajouter Grub aux dépendances
  • minimal fait que le code source n'est pas installé lors de l'installation du noyau
  • muqss ajoute le support de MuQSS
  • symlink crée un lien symbolique pointant vers les fichiers sources, /usr/src/linux
  • themes ajoute le thème Plymouth aux dépendances
  • uksm est une alternative à ksm, une technologie permettant de fusionner des pages de mémoire identiques en une seule.
  • vmlinuz compile et installe le noyau au moment de l'installation du paquet

Revenir à une version antérieure du noyau

En cas de problèmes causés par l'instabilité du système, ainsi que de problèmes liés au matériel ou à la prise en charge des pilotes, vous pouvez rétrograder le noyau. Pour passer à la version 4.19.x, exécutez :

cl-update --sync-only

echo ">sys-kernel/calculate-sources-5" >> /etc/portage/package.mask/custom

emerge -a sys-kernel/calculate-sources

Redémarrez votre ordinateur. Sélectionnez Options avancées dans le menu du chargeur de démarrage et sélectionnez la version du noyau 4.19. Une fois le système chargé, finalisez la procédure de mise à jour :

cl-update

Cl-update supprimera le noyau 5.4 et recompilera les paquets contenant les modules du noyau.

Installation à la dernière version du noyau

L'installation de la version la plus récente du noyau ne se justifie que si vous avez besoin d'une fonctionnalité qui n'est pas fournie par votre version actuelle du noyau, ou si vous avez besoin qu'un nouveau matériel soit pris en charge. Pour installer la dernière version des fichiers sources de Calculate, exécutez :

echo "sys-kernel/calculate-sources" >> /etc/portage/package.keywords/custom

cl-update

La dernière version du noyau sera installée, puis tous les modules seront mis à jour. L'un ou l'autre des paquets pourrait ne pas se compiler avec le nouveau noyau. S'il s'agit d'un module que vous n'utilisez pas, n'hésitez pas à supprimer le paquet défaillant.

Compiler votre propre noyau linux

Quand un noyau est compilé à partir du paquet sys-kernel/calculate-sources, il est configuré à l'aide des modèles Calculate Utilities qui s'appliquent. Vous pouvez créer votre modèle avec des paramètres adaptés, en toute simplicité. Votre modèle sera appliqué plus tard, au moment de recompiler le noyau.

Tout d'abord, il faut télécharger les fichiers sources du noyau. Pour ce faire, exécutez :

USE="-minimal -vmlinuz" emerge -a sys-kernel/calculate-sources

Pour modifier les paramètres et recompiler le noyau, exécutez :

cl-kernel

Le programme lancera Calculate Utilities pour établir les paramètres par défaut, puis exécutera make menuconfig pour invoquer l'interface de configuration. Une fois cette opération terminée, un modèle comprenant les modifications apportées sera créé, puis la compilation du noyau et son installation seront lancées :

Configuration du noyau Linux

Par défaut, ce sont les sources du noyau désignées par le lien symbolique /usr/src/linux qui seront utilisées. Si vous avez plusieurs versions de sys-kernel/calculate-sources installées sur votre système, ou d'autres paquets contenant le code source du noyau (comme sys-kernel/gentoo-sources, sys-kernel/vanilla-sources~, etc.), vous serez peut-être obligé(e) de préciser la version du noyau à compiler. Pour afficher les versions disponibles, exécutez :

cl-kernel --kver list

 * 4.19.97-gentoo
 * 4.19.96-calculate *
 

Ci-dessous, un exemple d'indication de version :

cl-kernel --kver 4.19.96-calculate

Si vous ne voulez pas que le noyau reconfiguré soit recompilé, utilisez l'option --skip-build.

Il vous faudra peut-être mettre à jour les modules du noyau une fois que vous aurez mis à jour le noyau lui-même. Vérifiez que le lien symbolique /usr/src/linux pointe vers la bonne version du noyau, puis exécutez :

emerge @module-rebuild

Vous pouvez relancer la configuration pour vérifier si vos modifications ont bien été enregistrées. Le résultat est enregistré dans le répertoire des modèles personnalisés, /var/calculate/templates, dans le sous-répertoire kernel.

tree -a /var/calculate/templates

/var/calculate/templates
└── kernel
    ├── 10-calculate-x86_64-4.19
    └── .calculate_directory

1 directory, 2 files

Pour utiliser la nouvelle configuration ultérieurement lors de l'installation de nouvelles versions du noyau, vous devez installer sys-kernel/calculate-sources en format non binaire. Vous pouvez activer le drapeau USE -minimal pour calculate-sources :

echo "sys-kernel/calculate-sources -minimal" >> /etc/portage/package.use/custom

Désormais, lorsque vous installerez le paquet, le noyau sera compilé en tenant compte de vos modifications :

emerge -a sys-kernel/calculate-sources

Changer de noyau

Comme mentionné plus haut, cl-kernel permet de compiler et d'installer facilement sys-kernel/calculate-sources, ainsi que tout autre noyau tel que sys-kernel/gentoo-sources, sys-kernel/vanilla-sources, etc.

Par exemple, installons la dernière version de sys-kernel/vanilla-sources depuis la source originale, sans correctifs tiers :

echo sys-kernel/vanilla-sources >> /etc/portage/package.keywords/custom

emerge -a sys-kernel/vanilla-sources

Vous pouvez consulter la liste des noyaux disponibles :

cl-kernel --kver list

 * 5.4.15
 * 5.4.12-calculate *

À noter que 5.4.12-calculate est indiqué en rouge. Cela veut dire qu'il ne contient pas de code source, puisque sys-kernel/calculate-sources est installé par défaut avec l'option désactivée minimal USE.

Pour configurer, compiler et installer n'importe quel noyau, il suffit d'exécuter une commande similaire à celle-ci :

cl-kernel --kver 5.4.15

Il est évident que la compilation d'un noyau à partir de zéro est une opération très chronophage, et de toute façon, vous avez probablement déjà votre fichier de configuration .config personnalisé. Si c'est le cas, vous pouvez le copier dans le répertoire des sources du noyau, /usr/src/linux-5.4.15/.config, avant de passer à la compilation du noyau. Vous pouvez valider les paramètres courants du noyau :

cl-kernel --kver 5.4.15 --convert

Dans ce cas, s'il n'y a pas de .config dans le répertoire contenant les sources du noyau, les paramètres seront récupérés depuis le noyau effectif. Ensuite, la commande "make oldconfig" sera exécutée pour définir les valeurs des nouveaux paramètres, suivie par "make menuconfig" pour configurer le noyau. Lorsque le processus de configuration est terminé, le noyau sera compilé et installé sur votre système. Un modèle de configuration du noyau sera créé :

head -1 /var/calculate/templates/kernel/10-vanilla-x86_64-5.4

# Calculate format=kernel name=.config os_install_arch_machine==x86_64&&merge(sys-kernel/vanilla-sources)>=5.4

Lors de l'installation de sys-kernel/vanilla-sources, ce modèle sera utilisé pour créer un fichier .config.

Compiler le noyau linux sans initramfs

Le fichier initramfs est utilisé pour charger les modules du noyau au début du démarrage système. Après le premier démarrage du système installé, initramfs sera optimisé et les modules qui n'avaient pas été chargés en mémoire seront supprimés, réduisant ainsi le temps de démarrage du noyau. Le fait de ne pas utiliser initramfs peut accélérer encore davantage le démarrage du noyau, améliorant sensiblement le temps de démarrage du système tout entier.

Pour pouvoir recompiler votre noyau sans initramfs, deux conditions doivent être remplies : vous devez désactiver la création d'initramfs dans les paramètres du noyau puis activer l'inclusion des pilotes relatifs au système de fichiers et au matériel dans le noyau.

Lancez la configuration du noyau :

cl-kernel

Rendez-vous à la section General setup pour désactiver le +Initial RAM filesystem and RAM disk (initramfs/initrd) support.

Capture d'écran

Initial RAM filesystem and RAM disk (initramfs/initrd) support

Il faut inclure le système de fichiers racine dans le noyau. Pour savoir quel système de fichiers est utilisé :

findmnt /
TARGET SOURCE         FSTYPE OPTIONS
/      /dev/nvme0n1p2 btrfs  rw,noatime,ssd,discard,space_cache,subvolid=5,subvol=/

Rendez-vous dans la section Systèmes de fichiers et mettez Y contre votre système de fichiers.

Capture d'écran

Btrfs filesystem support

Cela doit être suffisant pour un ordinateur de bureau fonctionnant sur un disque dur M.2. Si vous utilisez un contrôleur SATA/SAS ou SCSI, un volume RAID, etc., il se peut que vous deviez compiler des pilotes supplémentaires dans le noyau pour que votre périphérique soit pris en charge. Une fois la configuration terminée, quittez le logiciel. La compilation du noyau va commencer.

Ajout des patches

Les correctifs du noyau peuvent ajouter une prise en charge matérielle ou encore améliorer la réactivité du système, sinon apporter d'autres améliorations. Pour l'ajouter, sauvegardez le correctif dans /var/calculate/templates et ajoutez l'en-tête du modèle en tant que première ligne du fichier pour le convertir en modèle :

/var/calculate/templates/file_patch

# Calculate format=diff env=install ac_install_patch==on&&merge(sys-kernel/calculate-sources)>=4.19
...

L'en-tête contient le format diff, la condition d'application du correctif et la vérification de la version du paquet à installer.

Un exemple d'ajout d'un patch

Ci-dessous, en guise d'exemple, l'ajout du [kernel_gcc_patch] (https://github.com/graysky2/kernel_gcc_patch), correctif qui permet d'assurer l'optimisation du noyau pour un plus grand nombre de processeurs. Il faut d'abord récupérer le contenu du dépôt :

git clone https://github.com/graysky2/kernel_gcc_patch.git

Copiez le fichier correctif dans le répertoire du modèle de noyau :

cp kernel_gcc_patch/enable_additional_cpu_optimizations_for_gcc_v9.1+_kernel_v4.13+.patch /var/calculate/templates/kernel_gcc_patch

Ajoutez l'en-tête du modèle au correctif :

/var/calculate/templates/kernel_gcc_patch

# Calculate format=diff env=install ac_install_patch==on&&merge(sys-kernel/calculate-sources)>=4.19
...

Installez le code source du noyau. --jobs=1 lancera l'installation en un seul processus. Vous pouvez consulter le journal pour voir si l'application du correctif a réussi :

USE="-vmlinuz -minimal" emerge -a --jobs=1 sys-kernel/calculate-sources
...
>>> Source configurée.
* Application des correctifs Calculate avec les outils pour calculate-sources ...
* Application du correctif enable_additional_cpu_optimizations_for_gcc_v9.1+_kernel_v4.13+.patch
* Fichiers modifiés par les Utilitaires Calculate :
 * .config
 * arch/x86/Kconfig.cpu
 * arch/x86/Makefile
 * arch/x86/Makefile_32.cpu
 * arch/x86/include/asm/module.h
>>> Compilation des sources dans /var/calculate/tmp/portage/sys-kernel/calculate-sources-5.4.12/work/linux-5.4.12-calculate ...
...

Configurez le noyau en sélectionnant votre processeur dans la nouvelle liste :

cl-kernel

Rendez-vous dans Processor type and features ---> Processor family (Generic-x86-64). Vous verrez une liste beaucoup plus longue de processeurs disponibles.

Capture d'écran

Configuration du noyau Linux/x86

Une fois le processus de configuration terminé, la compilation du nouveau noyau va démarrer. Le correctif et les paramètres actualisés du noyau seront également utilisés lors de la compilation de sys-kernel/calculate-sources+.

Modules du noyau

Un module est un objet contenant du code qui fournit des fonctionnalités supplémentaires au noyau en cours d'exécution. Exécutez lsmod pour visualiser les modules chargés en temps réel. Pour obtenir des informations complètes sur un module, exécutez modinfo <nom_du_module>. Pour qu'un module du noyau se charge automatiquement au démarrage du système, créez un fichier avec l'extension .conf dans /etc/modules-load.d. Dans ce répertoire, vous pouvez énumérer des modules sur mesure, indiquant, si nécessaire, leurs paramètres séparés par un retour à la ligne. Exemple :

/etc/modprobe.d/custom.conf

options [HTML_REMOVED] [HTML_REMOVED]=[HTML_REMOVED]

Utilisez modinfo pour afficher les options de module disponibles. Voilà comment visualiser les paramètres disponibles pour un module (snd-intel8x0 dans cet exemple) :

modinfo -p snd-intel8x0

index:Index value for Intel i8x0 soundcard. (int)
id:ID string for Intel i8x0 soundcard. (charp)
ac97_clock:AC'97 codec clock (0 = whitelist + auto-detect, 1 = force autodetect). (int)
ac97_quirk:AC'97 workaround for strange hardware. (charp)
buggy_semaphore:Enable workaround for hardwares with problematic codec semaphores. (bool)
buggy_irq:Enable workaround for buggy interrupts on some motherboards. (bint)
xbox:Set to 1 for Xbox, if you have problems with the AC'97 codec detection. (bool)
spdif_aclink:S/PDIF over AC-link. (int)
inside_vm:KVM/Parallels optimization. (bint)
enable: (bool)
joystick: (int)

Par exemple, voilà comment charger snd-intel8x0 avec la valeur ac97_clock :

/etc/modprobe.d/snd-intel8x0.conf

options snd-intel8x0 ac97_clock=48000

Vous pouvez ajouter des modules à blacklist.conf pour les désactiver. Par exemple, pour désactiver le module usblp :

/etc/modprobe.d/blacklist.conf

blacklist usblp

Supprimer un noyau

Si vous supprimez sys-kernel/calculate-sources, le noyau Calculate et tous ses modules seront supprimés de votre système. Si un noyau ( Calculate ou non) a été compilé avec cl-kernel, il sera supprimé avec ses modules si ce paquet est supprimé.

Si vous voulez éviter que la suppression d'un paquet de noyau ne supprime /boot et ses modules, procédez comme suit :

/etc/calculate/ini.env

[system]
remove_old_kernel = off

Note

Quand vous mettez à jour les paquets avec cl-update, l'ancien noyau ne sera pas supprimé si le système tourne dessus.

Accélérer la compilation du noyau

Utilisez ccache pour compiler votre noyau beaucoup plus rapidement :

emerge -a dev-util/ccache

Avec ccache, le noyau 5.4.12 se compile sur un PC de test AMD Ryzen 5 3600 non pas en 10 min 24s, mais en 1min 25s.