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