Manpages

名 前

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/ に 書 か れ て い る 。