KEXEC_LOAD(2) | Manuel du programmeur Linux | KEXEC_LOAD(2) |
kexec_load, kexec_file_load - Charger un nouveau noyau pour une exécution ultérieure
#include <linux/kexec.h>
long kexec_load(unsigned long entry, unsigned long nr_segments, struct kexec_segment *segments, unsigned long flags);
long kexec_file_load(int kernel_fd, int initrd_fd, unsigned long cmdline_len, const char *cmdline, unsigned long flags);
Remarque : il n'existe pas de fonctions glibc autour de ces appels système ; consultez NOTES.
L'appel système kexec_load() charge un nouveau noyau qui peut être exécuté plus tard avec un reboot(2).
Le paramètre flags est un masque de bits qui contrôle l'opération de l'appel. Les valeurs suivantes peuvent être spécifiées dans flags :
Les bits de poids fort (correspondant au masque 0xffff0000) de flags contiennent l'architecture du noyau qui est en attente d'exécution. Indiquez la constante KEXEC_ARCH_DEFAULT pour utiliser l'architecture actuelle, ou une ou plusieurs (en utilisant l'opérateur OU) des constantes d'architecture suivantes : KEXEC_ARCH_386, KEXEC_ARCH_68K, KEXEC_ARCH_X86_64, KEXEC_ARCH_PPC, KEXEC_ARCH_PPC64, KEXEC_ARCH_IA_64, KEXEC_ARCH_ARM, KEXEC_ARCH_S390, KEXEC_ARCH_SH, KEXEC_ARCH_MIPS et KEXEC_ARCH_MIPS_LE. L'architecture doit pouvoir être exécutée sur le processeur du système.
Le paramètre entry est l'adresse du point d'entrée physique dans l'image noyau. Le paramètre nr_segments est le nombre de segments vers lesquels pointe le pointeur segments ; le noyau impose une limite (arbitraire) de 16 quant au nombre de segments. Le paramètre segments est un tableau de kexec_segment structures qui définissent la disposition du noyau :
struct kexec_segment {
void *buf; /* Tampon dans l'espace utilisateur */
size_t bufsz; /* Taille du tampon */
void *mem; /* Adresse physique du noyau */
size_t memsz; /* Taille de l'adresse physique */ };
L'image noyau définie par segments est copiée du processus appelant dans le noyau, dans la mémoire normale ou réservée (si KEXEC_ON_CRASH est positionné). Le noyau effectue d'abord divers tests de validité des informations passées à segments. Si ces tests réussissent, il copie les données du segment dans la mémoire du noyau. Chaque segment indiqué dans segments est copié comme suit :
En cas de kexec normal (c'est-à-dire si l'attribut KEXEC_ON_CRASH n'est pas positionné), les données du segment sont chargées dans n'importe quelle mémoire disponible et déplacées vers leur destination finale lors du redémarrage de kexec (par exemple quand la commande kexec(8) est exécutée avec l'option -e).
En cas de kexec problématique (panic) (c'est-à-dire que l'attribut KEXEC_ON_CRASH est positionné), les données du segment sont chargées dans la mémoire réservée au moment de l'appel et, après un plantage, le mécanisme kexec donne simplement le contrôle à ce noyau.
L'appel système kexec_load() n'est disponible que si le noyau a été configuré avec CONFIG_KEXEC.
L'appel système kexec_file_load() est équivalent à kexec_load(), mais il prend un autre ensemble de paramètres. Il lit le noyau à charger à partir du fichier auquel renvoie le descripteur de fichier kernel_fd et l'initrd (« initial RAM disk ») à charger à partir du fichier auquel renvoie le descripteur de fichier initrd_fd. Le paramètre cmdline est un pointeur vers un tampon contenant la ligne de commande du nouveau noyau. Le paramètre cmdline_len indique la taille du tampon. Le dernier octet du tampon doit être un octet NULL ('\0').
Le paramètre flags est un masque de bits qui modifie le comportement de l'appel. Les valeurs suivantes peuvent être spécifiées dans flags :
L'appel système kexec_file_load() a été ajouté pour prendre en charge les systèmes où le chargement de « kexec » doit être restreint aux noyaux signés. Cet appel système n'est disponible que si le noyau a été configuré avec CONFIG_KEXEC_FILE.
S'ils réussissent, ces appels système renvoient 0. En cas d'erreur, ils renvoient -1 et remplissent errno avec l'erreur.
L'appel système kexec_load() est apparu dans Linux 2.6.13. L'appel système kexec_file_load() est apparu dans Linux 3.17.
Ces appels système sont spécifiques à Linux.
Actuellement, il n'y a pas de prise en charge de ces appels système dans la glibc. Il faut les appeler avec syscall(2).
reboot(2), syscall(2), kexec(8)
Les fichiers Documentation/kdump/kdump.txt et Documentation/admin-guide/kernel-parameters.txt des sources du noyau.
Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Philippe MENGUAL <jpmengual@debian.org>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.
6 mars 2019 | Linux |