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

Linux                                              6 mars 2019                                     KEXEC_LOAD(2)