カーネルをpanicさせてみよう
この記事を理解できない場合は,マネしないでください.
Unix系OSには panic() というシステムを停止(クラッシュ)させる関数があります.
Linux で呼び出してみましょう.
panic() 関数
Un*x (Unix-like) OSのカーネルには,伝統的に panic() 関数があります.
これを呼び出すと,システム(カーネル)が停止(クラッシュ)します.
Windowsでいうブルースクリーンのような状態になります.
リセットボタンを押したり,電源を一度切って入れなおしたりしないとシステムは動きません.
OS(カーネル)が致命的なバグに遭遇したときなどに呼び出します.
システムを継続させられないときや,強制停止させた方がましな時に呼び出しますが,
安全な停止でないので行うとシステムが壊れるかもしれません.
カーネル内の関数で,カーネル空間で呼び出され,カーネル空間で実行されます.
panic()を呼び出すモジュール
以下のプログラムを作成して,コンパイル,実行(ロード)すると panic() が呼ばれ,システムが停止します.
非常に危険ですので,承知の上でおこなってください.
ローダブルモジュールの作成方法はこちらをご覧ください.
kernelpanic.c
#include <linux/module.h>
static int __init panic_init(void) {
panic("PANIC??");
return 0;
}
module_init(panic_init);
Makefile
obj-m := kernelpanic.o
コンパイルと実行
コンパイル
実行(ロード)
以下を行うと,panic()が呼ばれ,システムが停止します.
理解した上で実行してください.
実行後は、リセットボタン押すか、電源ボタンを長押しするか、PCを廃棄するか、などの対応をして下さい.
panic()後に自動的に再起動
コマンドラインから以下のように設定すれば,panic()が呼ばれた後に自動的に再起動します.
(太字がユーザの入力)
コマンドラインからpanicさせる
panicさせるインターフェイスが用意されており,
以下のコマンドを打つと,panicさせられます