kexec_file_load

KEXEC_LOAD(2)              Manuel du programmeur Linux             KEXEC_LOAD(2)



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