カーネルモジュールを作る際の、メモメモ
このサイトのソースコードをとりあえず丸写ししました。
"/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を作り、無事コンパイルできました。
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