ユーザープログラムです。0x318のデータを読み込み、0x318に、 0x32というデータを書き込みます。foo_sample.c
デバイスドライバーの本体です。カーネルにリンクされます。foo_sample.h
foo_sample.cにインクルードされるファイルです。以下が作成手順です。
1)カーネルソースの展開 #cp linux-2.0.35.tar.gz /usr/src #cd /usr/src #tar xvfz linux-2.0.35.tar.gz 2)foo_sample.c のコピー /usr/src/linux/drivers/charへコピーします。 3)foo_sample.h のコピー /usr/src/linux/include/linuxへコピーします。 4)リンク等の設定 #cd /usr/src/linux #make menuconfig #make dep; make clean この操作によって、/usr/src/linux/include/asmなどのリンク が設定されます。 5)メジャーナンバーの設定 /usr/src/linux/include/linux/major.h に、 #define FOO_SAMPLE_MAJOR 62 を加えます。 6)デバイスの作成 #mknod -m og+rw /dev/foo_sample c 62 0 7)/usr/src/linux/drivers/char/mem.c の編集 下記の3行を加えます。 #ifdef CONFIG_FOO_SAMPLE foo_sample_init(); #endif 8)/usr/src/linux/drivers/char/Config.in の編集 下記の1行を加えます。 bool 'sample device driver Apr/03/98' CONFIG_FOO_SAMPLE 9)/usr/src/linux/drivers/char/Makefile の編集 下記の3行を加えます。 ifeq ($(CONFIG_FOO_SAMPLE),y) L_OBJS += foo_sample.o endif 10)テストコンパイル #cd /usr/src/linux/drivers/char #gcc -c foo_sample.c -Wall -D__KERNEL__ エラーも警告も出ないことを確認します。 foo_sample.o を除去します。 #rm -f foo_sample.o 11)カーネルの再コンパイル #cd /usr/src/linux #make menuconfig ここで、character devices ---> の項目で、 [*] sample device driver Apr/03/98 と設定します。 #make dep; make clean #make zlilo #make modules #make modules_install 必要に応じて、/etc/lilo.confの編集後、 #/sbin/lilo 12)リブート 13)dmesg | more とやって、 FOO_SAMPLE CHECK AAA *** Apr/06/98 *** P.M. 15:52 *** FOO_SAMPLE CHECK BBB. FOO_SAMPLE CHECK CCC. | | | FOO_SAMPLE: driver initialized with major 62 というメッセージが出ていることを確認して下さい。 14)サンプルプログラム(footest_sample.C)のコンパイル $c++ -o footest_sample footest_sample.o 15)サンプルプログラムの実行 $ footest_sample *** footest_sample *** Apr/06/98 PM 15:45 *** check bbb In_data = 8d check ddd *** footest_sample *** End ***
1998年7月28日改訂