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.kodmesgコマンドでログを確認し、printkの内容が出力されていることをチェックしましょう。
$ dmesgモジュールのアンロードはrmmodを使います。
$ sudo rmmod hello.ko
広告
お問い合わせは sweng.tips@gmail.com まで。