名 前
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 が 有 効 に な っ て い る 場 合 に の み 利 用 で き る 。
関 連 項 目
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.78 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。