KEXEC_LOAD(2)

名前
kexec_load - 新しいカーネルを後で実行するためにロードする

書式
#include <linux/kexec.h>
long kexec_load(unsigned long entry, unsigned long nr_segments,
struct kexec_segment *segments, unsigned long flags); 注: このシステムコールには glibc のラッパー関数は存在しない。「注意」の節を参照。

説明
kexec_load() システムコールは、新しいカーネルをロードし、 その後の reboot(2) で実行できるようにする。

flags 引き数はマスクビットで、 その上位ビットでシステムコールの呼び出しの動作を制御する。 flags には以下の値を指定できる。

KEXEC_ON_CRASH (Linux 2.6.13 以降)
    システムのクラッシュ時に、新しいカーネルを自動的に実行する。

KEXEC_PRESERVE_CONTEXT (since Linux 2.6.27)
    Preserve the system hardware and software states before executing the new kernel. This could be used for system suspend. This flag is available only if the kernel was configured with CONFIG_KEXEC_JUMP, and is effective only if nr_segments is greater than 0.

flags の下位ビットには、実行されるカーネルのアーキテクチャが入る。 現在のアーキテクチャを使うことを意味する定数 KEXEC_ARCH_DEFAULT か、 アーキテクチャ定数 KEXEC_ARCH_386, 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 の いずれか一つを (OR で) 指定する。指定するアーキテクチャは、 システムの CPU で実行可能なものでなければならない。 entry 引き数は、カーネルイメージの物理エントリーアドレスである。 nr_segments 引き数は、 segments ポインタが指すセグメントの 数である。 segments 引き数は kexec_segment 構造体の配列で、 この構造体によりカーネルの配置が定義される。
struct kexec_segment {
    void   *buf;        /* Buffer in user space */
    size_t  bufsz;      /* Buffer length in user space */
    void   *mem;        /* Physical address of kernel */
    size_t  memsz;      /* Physical address length */
};

segments で定義されたカーネルイメージは、 呼び出したプロセスから予約済みメモリにコピーされる。

返り値
成功すると、 kexec_load は 0 を返す。 エラーの場合、 -1 が返り、 errno にエラーを示す値が設定される。

エラー

EBUSY
    別のクラッシュカーネルがすでにロードされているか、 クラッシュカーネルがすでに使用されている。

EINVAL
    flags が無効である。 nr_segments が大きすぎる。

EPERM
    呼び出し側が CAP_SYS_BOOT ケーパビリティを持っていない。

バージョン
kexec_load() システムコールは Linux 2.6.13 で初めて登場した。

準拠
このシステムコールは Linux 固有である。

注意
現在のところ、 kexec_load() は glibc ではサポートされていない。 syscall(2) を使って呼び出すこと。

必要な定数は Linux カーネルのソースファイル linux/kexec.h で定義されている が、現在のところ glibc には公開されていない。 そのため、これらの定数は手動で定義しなければならない。 このシステムコールは、カーネルの設定で CONFIG_KEXEC が有効になって いる場合にのみ利用できる。

関連項目
reboot(2), syscall(2)

この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。