Linux全般 > カーネルモジュールを作成する方法

更新日 2015-02-11
広告
カーネルモジュールを作成する方法を紹介します。

単純な例

以下のモジュールは、モジュールをロードしたときと、アンロードしたときに、printkで文字列を出力するだけのモジュールです。
#include <linux/module.h>
#include <linux/kernel.h>

int init_module(void)
{
    printk(KERN_INFO "Hello my kernel module !!\n");
    return 0;
}

void cleanup_module(void)
{
    printk(KERN_INFO "Goodbye kernel !!\n");
}

init_module関数は、モジュールをロードしたときに呼び出されます。 cleanup_module関数は、アンロードしたときに呼び出されます。

上記のサンプルをhello.cというファイルに保存したとします。 これを普通にgccでコンパイルすると、以下のエラーが出ます。

fatal error: asm/linkage.h: No such file or directory
カーネルモジュールをビルドする際は、以下のようなMakefileを用意すると楽です。
obj-m += hello.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
これでmakeを実行すると、hello.koが作成されます。 モジュールのロードはinsmodコマンドを使います。
$ sudo insmod hello.ko
dmesgコマンドでログを確認し、printkの内容が出力されていることをチェックしましょう。
$ dmesg
モジュールのアンロードはrmmodを使います。
$ sudo rmmod hello.ko
広告
お問い合わせは sweng.tips@gmail.com まで。
inserted by FC2 system