kexec_load(2) System Calls Manual kexec_load(2) NOM kexec_load, kexec_file_load - Charger un nouveau noyau pour une execution ulterieure BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include /* Definition des constantes KEXEC_* */ #include /* Definition des constantes SYS_* */ #include 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 systeme, l'utilisation de syscall(2) est requise. DESCRIPTION L'appel systeme kexec_load() charge un nouveau noyau qui peut etre execute plus tard avec un reboot(2). Le parametre flags est un masque de bits qui controle l'operation de l'appel. Les valeurs suivantes peuvent etre specifiees dans flags : KEXEC_ON_CRASH (depuis Linux 2.6.13) Lancer automatiquement le nouveau noyau lors d'un plantage du systeme. Ce << crash kernel >> est charge dans une zone de la memoire reservee definie au moment de l'amorcage en utilisant le parametre crashkernel de la ligne de commande du noyau. L'emplacement de cette memoire reservee est envoye a l'espace utilisateur avec le fichier /proc/iomem, dans une entree << Crash kernel >>. Une application de l'espace utilisateur peut analyser ce fichier et preparer une liste de segments (voir ci-dessous) indiquant cette memoire reservee en tant que cible. Si ce parametre est indique, le noyau verifie que les segments cibles indiques dans segments tombent dans la region reservee. KEXEC_PRESERVE_CONTEXT (depuis Linux 2.6.27) Preserver le materiel systeme et les etats logiciels avant d'executer le nouveau noyau. Cela pourrait etre utilise pour la mise en veille prolongee du systeme. Cet attribut n'est disponible que si le noyau a ete configure 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'execution. Indiquez la constante KEXEC_ARCH_DEFAULT pour utiliser l'architecture actuelle, ou une ou plusieurs (en utilisant l'operateur 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 etre executee sur le processeur du systeme. Le parametre entry est l'adresse du point d'entree physique dans l'image noyau. Le parametre 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 parametre segments est un tableau de kexec_segment structures qui definissent 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 definie par segments est copiee du processus appelant dans le noyau, dans la memoire normale ou reservee (si KEXEC_ON_CRASH est positionne). Le noyau effectue d'abord divers tests de validite des informations passees a segments. Si ces tests reussissent, il copie les donnees du segment dans la memoire du noyau. Chaque segment indique dans segments est copie comme suit : - buf et bufsz identifient une region de la memoire dans l'espace d'adressage virtuel de l'appelant qui est la source de la copie. La valeur de bufsz ne peut pas exceder celle du champ memsz. - mem et memsz indiquent une plage d'adresses physiques cible de la copie. Les valeurs indiquees dans les deux champs doivent etre des multiples de la taille de page du systeme. - bufsz octets sont copies du tampon source vers le tampon du noyau cible. Si bufsz est inferieur a memsz, les octets excedentaires dans le tampon du noyau sont remis a zero. En cas de kexec normal (c'est-a-dire si l'attribut KEXEC_ON_CRASH n'est pas positionne), les donnees du segment sont chargees dans n'importe quelle memoire disponible et deplacees vers leur destination finale lors du redemarrage de kexec (par exemple quand la commande kexec(8) est executee avec l'option -e). En cas de kexec problematique (panic) (c'est-a-dire que l'attribut KEXEC_ON_CRASH est positionne), les donnees du segment sont chargees dans la memoire reservee au moment de l'appel et, apres un plantage, le mecanisme kexec donne simplement le controle a ce noyau. L'appel systeme kexec_load() n'est disponible que si le noyau a ete configure avec CONFIG_KEXEC. kexec_file_load() L'appel systeme kexec_file_load() est equivalent a kexec_load(), mais il prend un autre ensemble de parametres. Il lit le noyau a charger a partir du fichier auquel renvoie le descripteur de fichier kernel_fd et l'initrd (<< initial RAM disk >>) a charger a partir du fichier auquel renvoie le descripteur de fichier initrd_fd. Le parametre cmdline est un pointeur vers un tampon contenant la ligne de commande du nouveau noyau. Le parametre cmdline_len indique la taille du tampon. Le dernier octet du tampon doit etre un octet NULL ('\0'). Le parametre flags est un masque de bits qui modifie le comportement de l'appel. Les valeurs suivantes peuvent etre specifiees dans flags : KEXEC_FILE_UNLOAD Decharger le noyau actuellement charge. KEXEC_FILE_ON_CRASH Charger le nouveau noyau dans la region de memoire reservee au plantage de noyau (comme pour KEXEC_ON_CRASH). Ce noyau est demarre si le noyau en cours d'execution plante. KEXEC_FILE_NO_INITRAMFS Le chargement de initrd/initramfs est facultatif. Indiquez cet attribut si aucun initramfs ne doit etre charge. Si cet attribut est positionne, la valeur passee a initrd_fd est ignoree. L'appel systeme kexec_file_load() a ete ajoute pour prendre en charge les systemes ou le chargement de << kexec >> doit etre restreint aux noyaux signes. Cet appel systeme n'est disponible que si le noyau a ete configure avec CONFIG_KEXEC_FILE. VALEUR RENVOYEE S'ils reussissent, ces appels systeme renvoient 0. En cas d'erreur, ils renvoient -1 et remplissent errno avec l'erreur. ERREURS EADDRNOTAVAIL L'attribut KEXEC_ON_CRASH etait indique mais la region indiquee par les champs mem et memsz d'une des entrees de segments va au-dela de la memoire reservee au plantage de noyau. EADDRNOTAVAIL La valeur du champ mem ou memsz dans une des entrees de segments n'est pas un multiple de la taille de page du systeme. EBADF kernel_fd ou initrd_fd n'est pas un descripteur de fichier valable. EBUSY Un autre plantage du noyau est deja charge, ou un plantage du noyau est deja utilise. EINVAL flags n'est pas correct. EINVAL La valeur du champ bufsz dans une des entrees de segments depasse la valeur du champ memsz correspondant. EINVAL nr_segments depasse 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 zero). ENOEXEC kernel_fd ne renvoie pas a un fichier ouvert ou le noyau ne peut pas charger ce fichier. Actuellement, le fichier doit etre une bzImage et contenir un noyau x86 chargeable dans 4 Gio de memoire (voir le fichier Documentation/x86/boot.txt des sources du noyau). ENOMEM La memoire n'a pu etre allouee. EPERM L'appelant n'a pas la capacite 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 francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 kexec_load(2)