Provided by: manpages-fr-dev_4.13-4_all bug

NOM

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

SYNOPSIS

       #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.

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  remplis  de
          zéros.

       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 valable.

       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.

VERSIONS

       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.

CONFORMITÉ

       Ces appels système sont spécifiques à Linux.

NOTES

       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).

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.

COLOPHON

       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/.

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  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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 ⟨⟩.