Man page - kexec_file_load(2)

Packages contains this manual

Available languages:

en fr ja ru

Manual

kexec_load

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
kexec_file_load()
VALEUR RENVOYÉE
ERREURS
STANDARDS
HISTORIQUE
VOIR AUSSI
TRADUCTION

NOM

kexec_load, kexec_file_load - Charger un nouveau noyau pour une exécution ultérieure

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <linux/kexec.h> /* Définition des constantes KEXEC_* */
#include <sys/syscall.h>
/* Définition des constantes SYS_* */
#include <unistd.h>

long syscall(SYS_kexec_load, unsigned long entry ,
unsigned long
nr_segments , struct kexec_segment * segments ,
unsigned long
flags );
long syscall(SYS_kexec_file_load, int
kernel_fd , int initrd_fd ,
unsigned long
cmdline_len , const char * cmdline ,
unsigned long
flags );

Note : la glibc ne fournit pas de fonction autour de cet appel systùme, l’utilisation de syscall (2) est requise.

DESCRIPTION

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 :
KEXEC_ON_CRASH
(depuis Linux 2.6.13)

Lancer automatiquement le nouveau noyau lors d’un plantage du systĂšme. Ce « crash kernel » est chargĂ© dans une zone de la mĂ©moire rĂ©servĂ©e dĂ©finie au moment de l’amorçage en utilisant le paramĂštre crashkernel de la ligne de commande du noyau. L’emplacement de cette mĂ©moire rĂ©servĂ©e est envoyĂ© Ă  l’espace utilisateur avec le fichier /proc/iomem , dans une entrĂ©e « Crash kernel ». Une application de l’espace utilisateur peut analyser ce fichier et prĂ©parer une liste de segments (voir ci-dessous) indiquant cette mĂ©moire rĂ©servĂ©e en tant que cible. Si ce paramĂštre est indiquĂ©, le noyau vĂ©rifie que les segments cibles indiquĂ©s dans segments tombent dans la rĂ©gion rĂ©servĂ©e.

KEXEC_PRESERVE_CONTEXT (depuis Linux 2.6.27)

PrĂ©server le matĂ©riel systĂšme et les Ă©tats logiciels avant d’exĂ©cuter le nouveau noyau. Cela pourrait ĂȘtre utilisĂ© pour la mise en veille prolongĂ©e du systĂšme. Cet attribut n’est disponible que si le noyau a Ă©tĂ© configurĂ© avec CONFIG_KEXEC_JUMP , et n’est effectif que si nr_segments est strictement positif.

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 :

-

buf et bufsz identifient une rĂ©gion de la mĂ©moire dans l’espace d’adressage virtuel de l’appelant qui est la source de la copie. La valeur de bufsz ne peut pas excĂ©der celle du champ memsz .

-

mem et memsz indiquent une plage d’adresses physiques cible de la copie. Les valeurs indiquĂ©es dans les deux champs doivent ĂȘtre des multiples de la taille de page du systĂšme.

-

bufsz octets sont copiés du tampon source vers le tampon du noyau cible. Si bufsz est inférieur à memsz , les octets excédentaires dans le tampon du noyau sont remis à zéro.

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 .

kexec_file_load()

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 :
KEXEC_FILE_UNLOAD

Décharger le noyau actuellement chargé.

KEXEC_FILE_ON_CRASH

Charger le nouveau noyau dans la rĂ©gion de mĂ©moire rĂ©servĂ©e au plantage de noyau (comme pour KEXEC_ON_CRASH ). Ce noyau est dĂ©marrĂ© si le noyau en cours d’exĂ©cution plante.

KEXEC_FILE_NO_INITRAMFS

Le chargement de initrd/initramfs est facultatif. Indiquez cet attribut si aucun initramfs ne doit ĂȘtre chargĂ©. Si cet attribut est positionnĂ©, la valeur passĂ©e Ă  initrd_fd est ignorĂ©e.

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 .

VALEUR RENVOYÉE

S’ils rĂ©ussissent, ces appels systĂšme renvoient 0 . En cas d’erreur, ils renvoient -1 et remplissent errno avec l’erreur.

ERREURS

EADDRNOTAVAIL

L’attribut KEXEC_ON_CRASH Ă©tait indiquĂ© mais la rĂ©gion indiquĂ©e par les champs mem et memsz d’une des entrĂ©es de segments va au-delĂ  de la mĂ©moire rĂ©servĂ©e au plantage de noyau.

EADDRNOTAVAIL

La valeur du champ mem ou memsz dans une des entrĂ©es de segments n’est pas un multiple de la taille de page du systĂšme.

EBADF

kernel_fd ou initrd_fd n’est pas un descripteur de fichier valable.

EBUSY

Un autre plantage du noyau est déjà chargé, ou un plantage du noyau est déjà utilisé.

EINVAL

flags n’est pas correct.

EINVAL

La valeur du champ bufsz dans une des entrées de segments dépasse la valeur du champ memsz correspondant.

EINVAL

nr_segments dépasse KEXEC_SEGMENT_MAX (16).

EINVAL

Deux ou plusieurs tampons cibles du noyau se chevauchent.

EINVAL

La valeur de cmdline[cmdline_len-1] n’est pas '\0'.

EINVAL

Le fichier auquel renvoie kernel_fd ou initrd_fd est vide (de longueur zéro).

ENOEXEC

kernel_fd ne renvoie pas Ă  un fichier ouvert ou le noyau ne peut pas charger ce fichier. Actuellement, le fichier doit ĂȘtre une bzImage et contenir un noyau x86 chargeable dans 4 Gio de mĂ©moire (voir le fichier Documentation/x86/boot.txt des sources du noyau).

ENOMEM

La mĂ©moire n’a pu ĂȘtre allouĂ©e.

EPERM

L’appelant n’a pas la capacitĂ© CAP_SYS_BOOT .

STANDARDS

Linux.

HISTORIQUE

kexec_load ()

Linux 2.6.13.

kexec_file_load ()

Linux 3.17.

VOIR AUSSI

reboot (2), syscall (2), kexec (8)

Les fichiers Documentation/kdump/kdump.txt et Documentation/admin-guide/kernel-parameters.txt des sources du noyau.

TRADUCTION

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 .