LINUXカーネルモジュールを作ってみる。
カーネルモジュールを作ってみる。
Makefile作る
$ echo "obj-m := mymod.o" >Makefile
モジュール作る
$ vi mymod.c
内容
#include #include #includestatic int sec=5; module_param(sec, int, S_IRUGO|S_IWUSR); MODULE_PARM_DESC(sec,"Set the interval."); static void mymod_timer(unsigned long data); static DEFINE_TIMER(timer,mymod_timer,0,0); static void mymod_timer(unsigned long data) { printk(KERN_INFO "mymod: timer\n"); mod_timer(&timer,jiffies + sec * HZ); } static int mymod_init(void) { printk(KERN_INFO "mymod: init\n"); if (sec
makeする
$ make -C /lib/modules/`uname -r`/build M=`pwd`
モジュール情報を参照する
$ modinfo mymod.ko filename: mymod.ko description: My module license: GPL author: testauther srcversion: 50B6B0B23BAEBE637023B86 depends: vermagic: 3.0.0-24-generic-pae SMP mod_unload modversions 686 parm: sec:Set the interval. (int)
モジュールを組み込む
$ sudo insmod mymod.ko
dmesgにモジュールの実行結果が出力されている!
$ dmesg | tail [ 7154.226058] mymod: init
/sysにディレクトリできてる
$ ls /sys/module/mymod holders initstate notes parameters refcnt sections srcversion
パラメータ情報を取得
$ cat /sys/module/mymod/parameters/sec 5