next up previous
次へ: キャラクタ型デバイスドライバの削除処理 上へ: キャラクタ型デバイスドライバの作成 戻る: キャラクタ型デバイスドライバの作成

キャラクタ型デバイスドライバの登録

キャラクタ型デバイスドライバを作成するときには、デバイスドライバに必要な 情報をモジュール組み込み時のハンドラ(init_module)の中でカーネルに登録す る処理を行う必要がある。ただし、情報システム実験(9)では、dioボードのデバ イスドライバであることを明示的に示すために、このハンドラ、すなわち初期化 ルーチンをdio_initと名付けた。

キャラクタ型デバイスドライバの登録に必要な情報は次の3つである。

これらの情報を指定してregister_chrdev関数を実行することで、デバイ スドライバの情報がカーネル・テーブルに登録され、デバイスドライバとして使 用可能になる。

具体的には、下記の情報でデバイスドライバの登録を行う。

これらをプログラムで表現すると次のようになる。ファイル・オペレーション ズ構造体には、ユーザ空間側のLinuxプロセスからシステムコールが呼び出され た場合に、そのシステムコールに対応する処理を行うためのメソッド(関数)を登 録する。だだし、今回の実験では、とりあえずこれらのメソッド名をNULL にしておく。


\begin{boxedminipage}{\textwidth}
\begin{verbatim}...

上記のプログラムにより、メジャー番号はdio_major、デバイスドライバ名は DRIVENAME、ファイル・オペレーションズ構造体へのポインタは &dio_fopsとなる。

この3つの情報を引数として、つぎのようにregister_chrdev関数を実行 すれば、カーネルに登録することができる。

     register_chrdev(dio_major, DRIVERNAME, &dio_fops)

情報システム実験(9)の初期化ルーチン(dio_init)に、これを書き加える と、次のようになる。


\begin{boxedminipage}{\textwidth}
\begin{verbatim}int __init dio_init(void)
...
...o_major == 0)
dio_major = ret;return 0;
}\end{verbatim}
\end{boxedminipage}

上記のプログラムにおいて、整数変数retには自動割り当てのメジャー番号が入 る。

メジャー番号は$1 \sim 254$の中からシステムがまだ使用していない番号にする 必要があるが、最初に0に仮設定しておけば、使用されていない番号の中で最も 大きな数値が自動的に割り当てられる。

登録に成功した場合は、register_chrdev関数の戻り値として、実際に割 り当てられたメジャー番号が返される。この戻り値を確保するために整数変数 retを用意している。(メジャー番号はデバイスドライバの削除のときに必要になる。)

登録に失敗した場合は、register_chrdev関数の戻り値として、負の値が 返される。

登録に成功したかどうかは、/proc/devicesファイルの記録されているド ライバ名とメジャー番号で確認できる。



MANOME Yoichi 平成19年1月6日