mirror of https://github.com/mkerrisk/man-pages
kexec_load.2: New page documenting kexec_load(2)
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
parent
0a4f8b7bb4
commit
0bd8e0bf49
|
@ -0,0 +1,94 @@
|
|||
.TH KEXEC_LOAD 2 2010-06-16 "Linux" "Linux Programmer's Manual"
|
||||
.SH NAME
|
||||
kexec_load \- Load a new kernel for later execution.
|
||||
.SH SYNOPSIS
|
||||
.b #include <linux/kexec.h>
|
||||
.br
|
||||
.BI "long kexec_load(unsigned long " entry ", unsigned long " nr_segments ","
|
||||
.br
|
||||
.BI "struct kexec_segment *" segments ", unsigned long " flags ");"
|
||||
.SH DESCRIPTION
|
||||
.BR kexec_load
|
||||
loads a new kernel that can be executed later
|
||||
by
|
||||
.I reboot(2).
|
||||
An alternative approach is to specify
|
||||
.B KEXEC_ON_CRASH
|
||||
in the
|
||||
.I flags
|
||||
argument and then the new kernel will be automatically executed on a
|
||||
system crash.
|
||||
.\" XXX figure out how this is really used
|
||||
With
|
||||
.B KEXEC_PRESERVE_CONTEXT
|
||||
specified in
|
||||
.I flags
|
||||
kexec will preserve the system hard and
|
||||
software state before executing the kexec kernel. This
|
||||
could be used for system suspend.
|
||||
|
||||
.I flags
|
||||
also contains the architecture of the executed kernel or
|
||||
be
|
||||
.I KEXEC_ARCH_DEFAULT
|
||||
for the current architecture.
|
||||
Valid architectures are
|
||||
.I KEXEC_ARCH_I386,
|
||||
.I KEXEC_ARCH_X86_64,
|
||||
.I KEXEC_ARCH_PPC,
|
||||
.I KEXEC_ARCH_PPC64,
|
||||
.I KEXEC_ARCH_IA_64,
|
||||
.I KEXEC_ARCH_ARM,
|
||||
.I KEXEC_ARCH_S390,
|
||||
.I KEXEC_ARCH_SH,
|
||||
.I KEXEC_ARCH_MIPS,
|
||||
.I KEXEC_ARCH_MIPS_LE.
|
||||
The architecture must be executable on the CPU of the system.
|
||||
|
||||
.I entry
|
||||
is the virtual entry address in the kernel image.
|
||||
.I nr_segments
|
||||
is the number of segments pointed to by the
|
||||
.I segments
|
||||
pointer.
|
||||
.I segments
|
||||
is an array of
|
||||
.I struct kexec_segment
|
||||
structures which define the kernel layout:
|
||||
.in +4n
|
||||
.nf
|
||||
|
||||
struct kexec_segment {
|
||||
void *buf; /* Buffer in user space */
|
||||
size_t bufsz; /* Buffer length in user space */
|
||||
void *mem; /* Virtual address of kernel */
|
||||
size_t memsz; /* Virtual address length */
|
||||
};
|
||||
.fi
|
||||
.in
|
||||
.PP
|
||||
.\" XXX elaborate on this
|
||||
The kernel image defined by
|
||||
.I segments
|
||||
is copied from the calling process into previously reserved memory.
|
||||
.SH CONFORMING TO
|
||||
This system call is Linux-specific.
|
||||
.SH NOTES
|
||||
kexec_load is currently not defined in glibc. To call it use:
|
||||
.in +4n
|
||||
.nf
|
||||
#define _GNU_SOURCE
|
||||
#include <syscall.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <linux/kexec.h>
|
||||
|
||||
ret = syscall(__NR_kexec_load, entry, nr_segments, segments, flags);
|
||||
.fi
|
||||
.in
|
||||
.PP
|
||||
.I linux/kexec.h as a exported header is only available in 2.6.38
|
||||
and later kernels, in earlier kernels the constants need to be copied
|
||||
out of the kernel source.
|
||||
.SH SEE ALSO
|
||||
.BR syscall (2),
|
||||
.BR reboot (2)
|
Loading…
Reference in New Issue