無料Wikiサービス | デモページ
Linuxなどのメモ書き
検索

Adsense

Loadable Kernel Moduleの作り方


Rev.2を表示中。最新版はこちら

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()マクロで指定する。

初期化ルーチンの返り値はint型で、正常に処理が終了した場合は0を返す。

インクルードファイルはmodule_init,exit()用にmodule.hが必要。あと、カーネルのconfigが必要な場合はconfig.hをインクルードする。以下ではprintk()でメッセージを出力しているのでkernel.hもインクルードしている。

MODULE_DESCRIPTION,MODULE_AUTHOR,MODULE_LICENSEもちゃんと書いておくとよい。これらの情報はモジュール(*.ko)の.modinfoセクションに書き込まれる。


small.c
#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のサンプルを以下に示す。このMakefileはsmall.cをコンパイルしてモジュールsmallmod.koを作成する。


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



最終更新 2006/09/02 16:15:57 - kztomita
(2006/09/02 16:08:52 作成)