Provided by: manpages-fr-dev_4.26.0-1_all bug

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.

Pages du manuel de Linux 6.9.1                    15 juin 2024                                     kexec_load(2)