dio_init
と名付けた。
キャラクタ型デバイスドライバの登録に必要な情報は次の3つである。
これらの情報を指定してregister_chrdev
関数を実行することで、デバイ
スドライバの情報がカーネル・テーブルに登録され、デバイスドライバとして使
用可能になる。
具体的には、下記の情報でデバイスドライバの登録を行う。
"dio_drv"
dio_fops
これらをプログラムで表現すると次のようになる。ファイル・オペレーション ズ構造体には、ユーザ空間側のLinuxプロセスからシステムコールが呼び出され た場合に、そのシステムコールに対応する処理を行うためのメソッド(関数)を登 録する。だだし、今回の実験では、とりあえずこれらのメソッド名をNULL にしておく。
上記のプログラムにより、メジャー番号はdio_major
、デバイスドライバ名は
DRIVENAME
、ファイル・オペレーションズ構造体へのポインタは
&dio_fops
となる。
この3つの情報を引数として、つぎのようにregister_chrdev
関数を実行
すれば、カーネルに登録することができる。
register_chrdev(dio_major, DRIVERNAME, &dio_fops) |
情報システム実験(9)の初期化ルーチン(dio_init
)に、これを書き加える
と、次のようになる。
上記のプログラムにおいて、整数変数retには自動割り当てのメジャー番号が入 る。
メジャー番号はの中からシステムがまだ使用していない番号にする
必要があるが、最初に0に仮設定しておけば、使用されていない番号の中で最も
大きな数値が自動的に割り当てられる。
登録に成功した場合は、register_chrdev
関数の戻り値として、実際に割
り当てられたメジャー番号が返される。この戻り値を確保するために整数変数
retを用意している。(メジャー番号はデバイスドライバの削除のときに必要になる。)
登録に失敗した場合は、register_chrdev
関数の戻り値として、負の値が
返される。
登録に成功したかどうかは、/proc/devices
ファイルの記録されているド
ライバ名とメジャー番号で確認できる。