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つのファイルが生成されていたらビルド成功です。
ソースコードの解説は後から行います。
まずは、ひととおりのドライバ作成手順を見ていきます。