X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;ds=sidebyside;f=original%2Fman2%2Fkexec_load.2;h=9089f2ff382d26ef40cff621381dd8e93999129b;hb=4ea6bb24817f6f049d6bbc90ecd77a869876f9b0;hp=a4c0cc4620d1a957ab0a73283c0f9f1438c80649;hpb=07fa5605e0daad79b4953812940975c354154113;p=linuxjm%2FLDP_man-pages.git diff --git a/original/man2/kexec_load.2 b/original/man2/kexec_load.2 index a4c0cc46..9089f2ff 100644 --- a/original/man2/kexec_load.2 +++ b/original/man2/kexec_load.2 @@ -1,5 +1,6 @@ -.\" Copyright (C) 2010 Intel Corporation -.\" Author: Andi Kleen +.\" Copyright (C) 2010 Intel Corporation, Author: Andi Kleen +.\" and Copyright 2014, Vivek Goyal +.\" and Copyright (c) 2015, Michael Kerrisk .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this @@ -23,19 +24,26 @@ .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" -.TH KEXEC_LOAD 2 2014-08-19 "Linux" "Linux Programmer's Manual" +.TH KEXEC_LOAD 2 2015-02-01 "Linux" "Linux Programmer's Manual" .SH NAME -kexec_load \- load a new kernel for later execution +kexec_load, kexec_file_load \- load a new kernel for later execution .SH SYNOPSIS +.nf .B #include -.br + .BI "long kexec_load(unsigned long " entry ", unsigned long " nr_segments "," -.br .BI " struct kexec_segment *" segments \ ", unsigned long " flags ");" +.BI "long kexec_file_load(int " kernel_fd ", int " initrd_fd "," +.br +.BI " unsigned long " cmdline_len \ +", const char *" cmdline "," +.BI " unsigned long " flags ");" + +.fi .IR Note : -There is no glibc wrapper for this system call; see NOTES. +There are no glibc wrappers for these system calls; see NOTES. .SH DESCRIPTION The .BR kexec_load () @@ -50,7 +58,19 @@ The following values can be specified in .TP .BR KEXEC_ON_CRASH " (since Linux 2.6.13)" Execute the new kernel automatically on a system crash. -.\" FIXME Explain in more detail how KEXEC_ON_CRASH is actually used +This "crash kernel" is loaded into an area of reserved memory that +is determined at boot time using the +.I craskkernel +kernel command-line parameter. +The location of this reserved memory is exported to user space via the +.I /proc/iomem +file, in an entry labeled "Crash kernel". +A user-space application can parse this file and prepare a list of +segments (see below) that specify this reserved memory as destination. +If this flag is specified, the kernel checks that the +target segments specified in +.I segments +fall within the reserved region. .TP .BR KEXEC_PRESERVE_CONTEXT " (since Linux 2.6.27)" Preserve the system hardware and @@ -109,30 +129,197 @@ struct kexec_segment { .fi .in .PP -.\" FIXME Explain the details of how the kernel image defined by segments -.\" is copied from the calling process into previously reserved memory. The kernel image defined by .I segments -is copied from the calling process into previously reserved memory. -.SH RETURN VALUE -On success, +is copied from the calling process into +the kernel either in regular +memory or in reserved memory (if +.BR KEXEC_ON_CRASH +is set). +The kernel first performs various sanity checks on the +information passed in +.IR segments . +If these checks pass, the kernel copies the segment data to kernel memory. +Each segment specified in +.I segments +is copied as follows: +.IP * 3 +.I buf +and +.I bufsz +identify a memory region in the caller's virtual address space +that is the source of the copy. +The value in +.I bufsz +may not exceed the value in the +.I memsz +field. +.IP * +.I mem +and +.I memsz +specify a physical address range that is the target of the copy. +The values specified in both fields must be multiples of +the system page size. +.IP * +.I bufsz +bytes are copied from the source buffer to the target kernel buffer. +If +.I bufsz +is less than +.IR memsz , +then the excess bytes in the kernel buffer are zeroed out. +.PP +In case of a normal kexec (i.e., the +.BR KEXEC_ON_CRASH +flag is not set), the segment data is loaded in any available memory +and is moved to the final destination at kexec reboot time (e.g., when the +.BR kexec (8) +command is executed with the +.I \-e +option). + +In case of kexec on panic (i.e., the +.BR KEXEC_ON_CRASH +flag is set), the segment data is +loaded to reserved memory at the time of the call, and, after a crash, +the kexec mechanism simply passes control to that kernel. + +The .BR kexec_load () -returns 0. +system call is available only if the kernel was configured with +.BR CONFIG_KEXEC . +.SS kexec_file_load() +The +.BR kexec_file_load () +system call is similar to +.BR kexec_load (), +but it takes a different set of arguments. +It reads the kernel to be loaded from the file referred to by the descriptor +.IR kernel_fd , +and the initrd (initial RAM disk) +to be loaded from file referred to by the descriptor +.IR initrd_fd . +The +.IR cmdline +argument is a pointer to a buffer containing the command line +for the new kernel. +The +.IR cmdline_len +argument specifies size of the buffer. +The last byte in the buffer must be a null byte (\(aq\\0\(aq). + +The +.IR flags +argument is a bit mask which modifies the behavior of the call. +The following values can be specified in +.IR flags : +.TP +.BR KEXEC_FILE_UNLOAD +Unload the currently loaded kernel. +.TP +.BR KEXEC_FILE_ON_CRASH +Load the new kernel in the memory region reserved for the crash kernel +(as for +.BR KEXEC_ON_CRASH). +This kernel is booted if the currently running kernel crashes. +.TP +.BR KEXEC_FILE_NO_INITRAMFS +Loading initrd/initramfs is optional. +Specify this flag if no initramfs is being loaded. +If this flag is set, the value passed in +.IR initrd_fd +is ignored. +.PP +The +.BR kexec_file_load () +.\" See also http://lwn.net/Articles/603116/ +system call was added to provide support for systems +where "kexec" loading should be restricted to +only kernels that are signed. +This system call is available only if the kernel was configured with +.BR CONFIG_KEXEC_FILE . +.SH RETURN VALUE +On success, these system calls returns 0. On error, \-1 is returned and .I errno is set to indicate the error. .SH ERRORS .TP +.B EADDRNOTAVAIL +.\" See kernel/kexec.::sanity_check_segment_list in the 3.19 kernel source +The +.B KEXEC_ON_CRASH +flags was specified, but the region specified by the +.I mem +and +.I memsz +fields of one of the +.I segments +entries lies outside the range of memory reserved for the crash kernel. +.TP +.B EADDRNOTAVAIL +The value in a +.I mem +or +.I memsz +field in one of the +.I segments +entries is not a multiple of the system page size. +.TP +.B EBADF +.I kernel_fd +or +.I initrd_fd +is not a valid file descriptor. +.TP .B EBUSY Another crash kernel is already being loaded or a crash kernel is already in use. .TP .B EINVAL .I flags -is invalid; or +is invalid. +.TP +.B EINVAL +The value of a +.I bufsz +field in one of the +.I segments +entries exceeds the value in the corresponding +.I memsz +field. +.TP +.B EINVAL .IR nr_segments -is too large -.\" KEXEC_SEGMENT_MAX == 16 +exceeds +.BR KEXEC_SEGMENT_MAX +(16). +.TP +.B EINVAL +Two or more of the kernel target buffers overlap. +.TP +.B EINVAL +The value in +.I cmdline[cmdline_len-1] +is not \(aq\\0\(aq. +.TP +.B EINVAL +The file referred to by +.I kernel_fd +or +.I initrd_fd +is empty (length zero). +.TP +.B ENOMEM +Could not allocate memory. +.TP +.B ENOEXEC +.I kernel_fd +does not refer to an open file, or the kernel can't load this file. +Currently, the file must be a bzImage and contain an x86 kernel that +is loadable above 4GiB in memory (see the kernel source file +.IR Documentation/x86/boot.txt ). .TP .B EPERM The caller does not have the @@ -142,28 +329,26 @@ capability. The .BR kexec_load () system call first appeared in Linux 2.6.13. +The +.BR kexec_file_load () +system call first appeared in Linux 3.17. .SH CONFORMING TO -This system call is Linux-specific. +These system calls are Linux-specific. .SH NOTES -Currently, there is no glibc support for -.BR kexec_load (). -Call it using +Currently, there is no glibc support for these system calls. +Call them using .BR syscall (2). -.PP -The required constants are in the Linux kernel source file -.IR linux/kexec.h , -which is not currently exported to glibc. -.\" FIXME . Andi submitted a patch for this. -.\" Check if it got accepted later. -Therefore, these constants must be defined manually. - -This system call is available only if the kernel was configured with -.BR CONFIG_KEXEC . .SH SEE ALSO .BR reboot (2), -.BR syscall (2) +.BR syscall (2), +.BR kexec (8) + +The kernel source files +.IR Documentation/kdump/kdump.txt +and +.IR Documentation/kernel-parameters.txt . .SH COLOPHON -This page is part of release 3.78 of the Linux +This page is part of release 3.79 of the Linux .I man-pages project. A description of the project,