カーネルモジュールを作る際の、メモメモ

このサイトのソースコードをとりあえず丸写ししました。

5.1. The /proc File System

"/proc/helloworld"を作成し、"cat /proc/helloworld"すると、"HelloWorld"が返ってくるようにしています。

そして、以下の感じでコンパイルしようとすると、

$ gcc -c -Wall -D __KERNEL__ -DMODULE procfs.c
  src/procfs.c:1:26: 致命的エラー: linux/module.h: そのようなファイルやディレクトリはありません
  コンパイルを停止しました。

なるほど。。。色々調べていると以下のサイトにたどり着きました。

error compiling: linux/module.h: No such file or directory

カーネルモジュールのコンパイルには、"make"を使うほうが良いらしい、ということで、以下のサイトを参考にMakefileを作り、無事コンパイルできました。

LKM カーネルモジュールを作成方法メモ

obj-m += procfs.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

"-C"オプションでmakeする前に指定したディレクトリに移動することができるらしく、移動した先の/lib/modules/$(shell uname -r)/build/Makefileを利用して、コンパイルするようです。

コンパイルが終わると、"hogehoge.ko"みたいな奴ができているので、以下のコマンドでモジュールをロード、アンロードします。

# ロード
$ insmod <module>
# アンロード
$ rmmod <module>

ちなみに、"rmmod"した後も、"/proc/helloworld"が残っていたので、"cat"してみるとPCが落ちました。。orz