Loadable Kernel Moduleの作り方
Rev.1を表示中。最新版はこちら。
LinuxのLoadable Kernel Moduleの作り方のHowTo。対象はバージョンは2.6。
1. SourceとMakefile
カーネルにLoad/Unloadできるだけの小モジュールを作ってみる。何処か適当なディレクトリに以下のようにソースとMakefileを作る。
xxxxxx/ Makefile - Makefile small.c - モジュールのソース
1.1 Source
モジュールのソースコードのサンプルを以下に示す。
最低限必要なのは、モジュールがLoadされた時に呼び出される初期化ルーチン(smallmod_init_module())とモジュールがUnloadされる時に呼び出される後処理用ルーチン(smallmod_init_module())。これらのルーチンは、それぞれmodule_init(),module_exit()マクロで指定する。
#include <linux/config.h> #include <linux/module.h> #include <linux/kernel.h> MODULE_DESCRIPTION("Small Test Module"); MODULE_AUTHOR("kztomita"); MODULE_LICENSE("GPL"); /* Moduleがロードされた時に呼び出される初期化ルーチン */ static int smallmod_init_module(void) { int error = 0; /* * 初期化処理を行なう */ printk("smallmod is loaded.\n"); /* エラーの場合 */ if (error) return -ENODEV; return 0; } /* Moduleがアンロードされたる時に呼び出される後処理 */ static void smallmod_cleanup_module(void) { printk("smallmod is unloaded.\n"); } module_init(smallmod_init_module); module_exit(smallmod_cleanup_module);
1.2 Makefile
Makefile
KERNELSRCDIR = /usr/src/linux BUILD_DIR := $(shell pwd) VERBOSE = 0 # モジュール名 obj-m := smallmod.o # <モジュール名>-objs にモジュールを構成するオブジェクトの一覧を列挙する smallmod-objs := small.o all: make -C $(KERNELSRCDIR) SUBDIRS=$(BUILD_DIR) KBUILD_VERBOSE=$(VERBOSE) modules clean: rm -f *.o rm -f *.ko rm -f *.mod.c rm -f *~
コンパイル
Load/Unload