▼Linuxカーネルを強制的にpanicさせる▼

$Keywords: panic.ko linux kernel module to force kernel panic $

カーネルが CONFIG_KEXEC つきでコンパイルされていれば

	# echo c > /proc/sysrq-trigger
で kernel panic を起こせますが、

sysrq-triggerが使えない場合は panic()を呼び出すカーネルモジュールをinsmodしてpanicさせます。

panic.tar.gz

何に使うの?

…panicしたあと、ちゃんと自動再起動する・しないを確認したり、 リブート後のcoreの抽出がうまくいくのか確認したり。

Linux はデフォルトでは自動再起動しません。 sysctl -w kernel.panic=10 (10秒後に再起動) とかする必要あり。

$Id: linux-panic.m4,v 1.2 2007/06/05 14:07:23 kabe Exp $


panic/panic.c
#include <linux/module.h>
#include <linux/kernel.h>

static char panic_msg_init[] __initdata = "invoked";
static char panic_msg_exit[] __exitdata = "exiting";

static int __init panic_init()
{
	printk(KERN_INFO "panic module: %s.\n", panic_msg_init);
	/* This will just cause oops */
	// *((char*)0x0c) = 0;
	panic("Panic Module has been insmod.");
	return 0;
}

static void __exit panic_exit()
{
	printk(KERN_INFO "panic module: %s.\n", panic_msg_exit);
}

module_init(panic_init);
module_exit(panic_exit);

panic/README.txt
This panic.ko module will force a panic on Linux kernel.

If the kernel is compiled with CONFIG_KEXEC,
# echo c > /proc/sysrq-trigger
should force panic; try that first.
References: /usr/share/doc/kernel*/Documentation/sysrq.txt

Compile:
	make
Panic:
	insmod ./panic.ko

To automatically reboot after panic:
	sysctl -w kernel.panic=10	#10 seconds

panic/Makefile
obj-m += panic.o
KDIR=/lib/modules/`uname -r`/build

all:
	$(MAKE) -C $(KDIR) M=$(PWD) modules

clean:
	$(MAKE) -C $(KDIR) M=$(PWD) clean

install:
	$(MAKE) -C $(KDIR) M=$(PWD) modules_install


かべ@sra-tohoku.co.jp