ブログ

カーネルパニックを発生させる方法

at_ito
2015年11月2日 5時37分

カーネルパニック発生時に自動的に再起動する方法等のテストを行う際に、カーネルパニックを簡単に発生させる方法を紹介します。

ドライバーの作成

まずはLinuxカーネルのpanic()関数を呼び出すドライバーを作成します。

ATDE上で、以下のpanic.cファイルを作成してください。

#include <linux/module.h>
#include <linux/init.h>
 
static int __init panic_init(void)
{
    panic("panic sample_module.");
    return 0;
}
 
static void __exit panic_exit(void)
{
}
 
module_init(panic_init);
module_exit(panic_exit);
 
MODULE_LICENSE("GPL");

ATDE上で、以下のMakefileファイルを作成してください。

BUILD_DIR := $(shell pwd)
 
MODULES = panic.o
 
obj-m := $(MODULES)
 
CROSS_COMPILE = arm-linux-gnueabi-
ARCH = arm
MAKEARCH = $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE)
 
all:
    $(MAKEARCH) -C $(KERNEL_SRC) SUBDIRS=$(BUILD_DIR) modules
 
clean:
    rm -f *.o
    rm -f *.ko
    rm -f *.mod.c
    rm -f *~
    rm -f Module.symvers modules.order
    rm -rf .tmp_versions
    rm -f .*.cmd

ドライバーのビルド

以下のコマンドを実行し、ドライバーをビルドしてください。

[ATDE ~]$ make KENREL_SRC=~/linux-3.14-at
  • ※1: 上記の「../linux-3.14-at」はお使いのLinuxカーネルのディレクトリに読み替えてください。
  • ※2: KERNEL_SRCに指定するLinuxカーネルは一度ビルドしておく必要があります。
  • ※3: armhfアーキテクチャの製品でお試しの場合は「CROSS_COMPILE」の値を変更してください。

カーネルパニックを発生させる

上記でドライバーのビルドを行うと「panic.ko」が作成されます。

「panic.ko」をArmadilloにコピーして、以下のコマンドを実行するとカーネルパニックが発生します。

[armadillo ~]# insmod panic.ko