KEXEC_LOAD
Section: Linux Programmer's Manual (2)
Updated: 2014-08-19
Index
JM Home Page
roff page
名前
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 (Linux 2.6.27 以降)
-
新しいカーネルを実行する前に、
システムのハードウェアとソフトウェアの状態を保存する。
システムの中断時 (suspend) などで使用できる。
このフラグは、カーネルの設定で CONFIG_KEXEC_JUMP が有効の場合のみ
利用可能であり、 nr_segments が 0 より大きい場合のみ効果がある。
flags の上位ビット (マスク 0xffff0000 に対応) には、
実行されるカーネルのアーキテクチャーが入る。
現在のアーキテクチャーを使うことを意味する定数 KEXEC_ARCH_DEFAULT か、
アーキテクチャー定数 KEXEC_ARCH_386, KEXEC_ARCH_68K, 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
ポインターが指すセグメントの数である。 なお、セグメント数には、カーネルにより 16 という (強制的な) 上限が課される。 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.78 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/ に書かれている。
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- バージョン
-
- 準拠
-
- 注意
-
- 関連項目
-
- この文書について
-
This document was created by
man2html,
using the manual pages.
Time: 16:46:41 GMT, November 24, 2023