monolithic kernel

Linuxのカーネルモジュールを書いてみる

June 10, 2011

    Linuxのカーネルモジュールを書いてみるメモ。ここで作るのはLoadable Kernel Module(LKM)と呼ばれるものです。

    なお、確認はUbuntu 11.04上で行っています。

    ヘッダのインストール

    カーネルモジュールのコンパイルに必要なヘッダをインストールします。

    sudo apt-get install linux-headers-`uname -r`

    何もしないカーネルモジュール

    読み込み時と終了時にメッセージを表示するだけで何もしないカーネルモジュールを書いてみます。

    vi hellolkm.cvi Makefile

    hellolkm.c

    #include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>static int on_init(void) {  printk("module_init\n");  return 0;}static void on_exit(void) {  printk("module_exit\n");}module_init(on_init);module_exit(on_exit);

    Makefile

    obj-m := hellolkm.oKDIR := /lib/modules/$(shell uname -r)/buildPWD := $(shell pwd)all:$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modulesclean:rm -rf *.o *.ko *.mod.c *~

    動作確認

    makeでモジュールを生成し、insmodで読み込み、rmmodで除去を行います。モジュール内でprintk関数を利用して出力した内容は/var/log/syslogで確認できます。

    makesudo insmod hellolkm.kosudo rmmod hellolkmsudo tail /var/log/syslog
    
    
    Jun 10 19:46:33 ubuntu-desktop64 kernel: [  363.989941] module_initJun 10 19:46:37 ubuntu-desktop64 kernel: [  368.370531] module_exit

    参考