[PATCH] kexec_load manpage
Eric W. Biederman
ebiederm at xmission.com
Sat Jun 19 15:18:52 EDT 2010
Andi Kleen <andi at firstfloor.org> writes:
> Here are the beginnings of a kexec_load manpage.
>
> Probably needs some more review from Eric and may need some additional
> information.
>
> The syscall is actually only usable with a kernel patch to export
> the header I just sent separately.
The syscall has been used for years with a separate non-kernel header.
Eric
> Also added the kexec subcall to reboot(2)
>
> -Andi
>
> diff --git a/man2/kexec_load.2 b/man2/kexec_load.2
> new file mode 100644
> index 0000000..f486641
> --- /dev/null
> +++ b/man2/kexec_load.2
> @@ -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.
Physical.
> +.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 */
There are again physical addresses.
There is an expectation that at hand off from sys_kexec that
virtual and physical addresses will be identity mapped. But
this isn't the old Alpha booting convention where you have
a virtual address and then you have to parse the page table
to figure out where your kernel was actually loaded.
> +};
> +.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)
> diff --git a/man2/reboot.2 b/man2/reboot.2
> index 253bd34..87204b1 100644
> --- a/man2/reboot.2
> +++ b/man2/reboot.2
> @@ -139,6 +139,11 @@ For the i386 architecture, the additional argument does not do
> anything at present (2.1.122), but the type of reboot can be
> determined by kernel command-line arguments ("reboot=...") to be
> either warm or cold, and either hard or through the BIOS.
> +.TP
> +.B LINUX_REBOOT_KEXEC
> +executes a kernel that has been loaded earlier
> +with
> +.I kexec_load(2).
> .SH "RETURN VALUE"
> For the values of
> .I cmd
> @@ -177,4 +182,5 @@ and should not be used in programs intended to be portable.
> .BR capabilities (7),
> .BR ctrlaltdel (8),
> .BR halt (8),
> -.BR reboot (8)
> +.BR reboot (8),
> +.BR kexec_load (2)
More information about the kexec
mailing list