dwww Home | Manual pages | Find package

kexec_load(2)                 System Calls Manual                kexec_load(2)

NOM
       kexec_load,  kexec_file_load - Charger un nouveau noyau pour une exécu-
       tion 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'empla-
              cement  de cette mémoire réservée est envoyé à l'espace utilisa-
              teur avec le fichier /proc/iomem, dans une entrée  « Crash  ker-
              nel ».  Une application de l'espace utilisateur peut analyser ce
              fichier et préparer une liste de segments (voir ci-dessous)  in-
              diquant  cette  mémoire  réservée  en  tant que cible. Si ce pa-
              ramè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 dispo-
              nible 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. In-
       diquez la constante KEXEC_ARCH_DEFAULT pour utiliser l'architecture ac-
       tuelle,  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 (ar-
       bitraire) 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  va-
              lable.

       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.

VERSIONS
       L'appel système kexec_load() est apparu dans Linux 2.6.13. L'appel sys-
       tème kexec_file_load() est apparu dans Linux 3.17.

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

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

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

TRADUCTION
       La traduction française de cette page de manuel a été créée par  Chris-
       tophe  Blaess  <https://www.blaess.fr/christophe/>, Stéphan Rafin <ste-
       phan.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.cou-
       lon@wanadoo.fr>,  Julien  Cristau <jcristau@debian.org>, Thomas Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François  <nicolas.francois@centra-
       liens.net>,  Florentin  Duneau <fduneau@gmail.com>, Simon Paillard <si-
       mon.paillard@resel.enst-bretagne.fr>,   Denis   Barbier    <barbier@de-
       bian.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⟩.

Pages du manuel de Linux 6.03   5 février 2023                   kexec_load(2)

Generated by dwww version 1.15 on Sat Jun 29 01:32:55 CEST 2024.