カーネルモジュールことはじめ#2

なんか流行ってるみたいなんでのっかってみるぉ!

crash.c

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>

static int __init crash_init(void)
{
  printk("crashing kernel...\n");
  /* *((char *) 0) = 0; */
  panic("Hello, panic!");
  return 0;
}

static void __exit crash_exit(void)
{
  printk("crash_exit called. this module is now unloaded.\n");
  return;
}

module_init(crash_init);
module_exit(crash_exit);

MODULE_AUTHOR("Maintainer: hirose31");
MODULE_DESCRIPTION("crash module");
MODULE_LICENSE("GPL");

Makefile

TARGET = crash.ko

all: $(TARGET)

crash.ko: crash.c
	make -C /lib/modules/`uname -r`/build M=`pwd` modules

clean:
	make -C /lib/modules/`uname -r`/build M=`pwd` clean

obj-m += crash.o

実行結果

# make
# insmod ./crash.ko
crashing kernel...
Kernel panic - not syncing: Hello, panic!

crashdumpのテスツとかで便利す!