■使い方
(モジュールの読み込み)
# insmod moduletest.ko
(モジュールの取り外し)
# rmmod moduletest
■C コード
#include <linux/module.h>
#include <linux/kernel.h> // for printk
#include <linux/sched.h> // for jiffies
// insmod 時に呼ばれる
int init_module()
{
printk("module being installed at %lu\n", jiffies);
return 0; // 0 以外の値を返すと、insmod は成功しない
}
// rmmod 時に呼ばれる
void cleanup_module()
{
printk("module being removed at %lu\n", jiffies);
}
■Makefile
KERNEL_SRCDIR = /usr/src/linux
BUILD_DIR = $(shell pwd)
TARGET = moduletest
obj-m := $(TARGET).o
all:
make -C $(KERNEL_SRCDIR) M=$(BUILD_DIR) modules
■注1
カーネルのシンボルを使うので、カーネルのヘッダファイルが必要。
apt-get install linux-headers などを行う。
■注2
init_module, cleanup_module という名前を変えるためには、
module_init, module_exit などのマクロを使う。
static int __init modtest_module_init( void )
{
printk( KERN_INFO "modtest is loaded\n" );
return 0;
}
static void __exit modtest_module_exit( void )
{
printk( KERN_INFO "modtest is removed\n" );
}
module_init( modtest_module_init );
module_exit( modtest_module_exit );
デバッグ出力したいときは、printk を使う。出力は dmesg で確認する。
■注4
モジュールが insmod できたかどうかは lsmod で確認する。
■注4
モジュールが insmod できたかどうかは lsmod で確認する。
0 件のコメント:
コメントを投稿