kexec_load(2) System Calls Manual kexec_load(2) kexec_load, kexec_file_load - LIBRARY Standard C library (libc, -lc) #include /* KEXEC_* */ #include /* 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: glibc provides no wrappers for these system calls, necessitating the use of syscall(2). kexec_load() , reboot(2). flags , . flags : KEXEC_ON_CRASH ( Linux 2.6.13) . << >> , crashkernel. /proc/iomem, <>. ( ), . , , segments, . KEXEC_PRESERVE_CONTEXT ( Linux 2.6.27) . (suspend). , CONFIG_KEXEC_JUMP, , nr_segments 0. ( 0xffff0000) flags , . ( OR) KEXEC_ARCH_DEFAULT ; , : 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 KEXEC_ARCH_MIPS_LE. . entry . nr_segments , segments; () 16 . segments kexec_segment, : struct kexec_segment { void *buf; /* */ size_t bufsz; /* */ void *mem; /* */ size_t memsz; /* */ }; , segments, ( KEXEC_ON_CRASH). , segments. , . , segments, : o buf bufsz , . bufsz memsz. o mem memsz -- . , , . o bufsz . bufsz memsz, . kexec (. ., KEXEC_ON_CRASH) kexec (, kexec(8) -e). kexec (. ., KEXEC_ON_CRASH ) , , (crash), kexec . kexec_load() , CONFIG_KEXEC. kexec_file_load() The kexec_file_load() system call is similar to kexec_load(), but it takes a different set of arguments. It reads the kernel to be loaded from the file referred to by the file descriptor kernel_fd, and the initrd (initial RAM disk) to be loaded from file referred to by the file descriptor initrd_fd. The cmdline argument is a pointer to a buffer containing the command line for the new kernel. The cmdline_len argument specifies size of the buffer. The last byte in the buffer must be a null byte ('\0'). flags , . flags : KEXEC_FILE_UNLOAD . KEXEC_FILE_ON_CRASH ( KEXEC_ON_CRASH). , . KEXEC_FILE_NO_INITRAMFS initrd/initramfs . , initramfs. , , initrd_fd . kexec_file_load() , <> . , CONFIG_KEXEC_FILE. 0. -1, errno . EADDRNOTAVAIL KEXEC_ON_CRASH, , mem memsz segments, , . EADDRNOTAVAIL mem memsz segments . EBADF kernel_fd initrd_fd . EBUSY . EINVAL flags . EINVAL bufsz segments memsz. EINVAL nr_segments KEXEC_SEGMENT_MAX (16). EINVAL . EINVAL The value in cmdline[cmdline_len-1] is not '\0'. EINVAL , kernel_fd initrd_fd, ( ). ENOEXEC kernel_fd , . , x86, 4 ( Documentation/x86/boot.txt). ENOMEM . EPERM CAP_SYS_BOOT. Linux. kexec_load() Linux 2.6.13. kexec_file_load() Linux 3.17. . reboot(2), syscall(2), kexec(8) Documentation/kdump/kdump.txt Documentation/admin-guide/kernel-parameters.txt Alex Nik , Azamat Hackimov , Yuri Kozlov ; GNU 3 , . . , , . Linux man-pages 6.06 31 2023 . kexec_load(2)