実験の失敗に備えて情報システム実験(10)で作成したデバイスドライバと アプリケーションのテストプログラムとMakefileを次のようにディレクト リLab10に保存しておくこと。
今回の実験では実験(9)で作成したdio_drv.c
を機能拡張する。
実験(10)で作成したdio_drv.c
はデバイスノードのマイナー番号を利用し
たドライバであり、ioctlのコマンド番号に準じた判別法を使っているの
で、今回の実験では使用しない。
最初にioctlのコマンドと引数構造体を定義したヘッダファイルを、次の ようにインクルードする。
#include "dio_ioctl.h"
また、グローバル変数とその初期値を次のように宣言しておく。
unsigned long predata = 0;
それから、ioctlシステムコールのdio_ioctl
メソッド本体とそのサブ関数群
をfile_operations
構造体の前に追加記述すればよい。プロトタイプ宣言
をするのでなければ呼び出される関数は、それを呼び出す関数の前に置かなけれ
ばならない。
最後に、file_operations
構造体のioctl
フィールドに
dio_ioctl
を登録する。
機能拡張したドライバのソースコードを次のようにコンパイルする。
# make clean # make