カーネルモジュール
Linuxカーネルモジュールの作成、インストール方法
※参考「Linuxデバイスドライバ 第3版」
カーネルモジュールの作成、インストール方法
Cソース(hello.c)
#include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_ALERT "Hello World\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "Good Bye\n"); } module_init(hello_init); module_exit(hello_exit);
初期化、終了時にそれぞれ実行される
hello_init(), hello_exit()関数でprintkを実行している。
printkの出力は/var/log/messagesに吐き出される。
obj-m := hello.o
メイクの仕組みはよく理解していない。
カーネルビルドの環境を利用しているらしい。
一旦カーネルビルド環境に入り、ターゲットのディレクトリに戻って処理をするらしい。なので(カーネルの環境を利用するので)このような見慣れない記述でビルドが出来るらしい。
シェルから以下のように入力
※ここで/usr/src/kernels/linux-3.6.6はカーネルソースのある
ディレクトリを指す。
$ make -C /usr/src/kernels/linux-3.6.6 M=`pwd` modules
$insmod hello.ko
にてカーネルにロードされる。
また、削除は
$rmmod hello.ko
と打つ。
/var/log/messagesにHello WorldおよびGood Byeと表示されていれば
このカーネルモジュールがロード、アンロードされたことがわかる。