kexec_load.2: New page documenting kexec_load(2)

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
Andi Kleen 2010-10-31 06:56:47 +01:00 committed by Michael Kerrisk
parent 0a4f8b7bb4
commit 0bd8e0bf49
1 changed files with 94 additions and 0 deletions

94
man2/kexec_load.2 Normal file
View File

@ -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)