HelloWorld作成
新しいプログラミング言語を覚えるとき、一番初めに書くプログラムは大抵「HelloWorld」だと思います。それはデバイスドライバ開発でも例外ではありません。
まずは新しいディレクトリを作成し、その中に、下記コードを記述した「hello.c」という名前のファイルを作成してください。
#include <linux/module.h> #include <linux/init.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_ALERT "driver loaded\n"); printk(KERN_ALERT "Hello World\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "driver unloaded\n"); } module_init(hello_init); module_exit(hello_exit);
次にMakefileを作成します。
obj-m := hello.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
これで、カレントディレクトリには「hello.c」と「Makefile」が存在していることになります。
# ls hello.c Makefile
あとは上記プログラムをビルドしてみましょう。
# make make -C /lib/modules/2.6.18-238.el5/build M=/root/Desktop/kernel modules make[1]: Entering directory `/usr/src/kernels/2.6.18-238.el5-i686' CC [M] /root/Desktop/kernel/hello.o Building modules, stage 2. MODPOST CC /root/Desktop/kernel/hello.mod.o LD [M] /root/Desktop/kernel/hello.ko make[1]: Leaving directory `/usr/src/kernels/2.6.18-238.el5-i686'
ビルド後、カレントディレクトリには、下記のようなファイルが作成されているはずです。
・Module.symvers
・hello.ko
・hello.mod.c
・hello.mod.o
・hello.o
# ls hello.c hello.mod.c hello.o Module.symvers hello.ko hello.mod.o Makefile
ビルド後、上記のように5つのファイルが生成されていたらビルド成功です。
ソースコードの解説は後から行います。
まずは、ひととおりのドライバ作成手順を見ていきます。