next up previous
次へ: キャラクタ型ドライバの解除(unregister_chrdev) 上へ: キャラクタ型ドライバの作成 戻る: キャラクタ型ドライバの作成

キャラクタ型ドライバの登録(register_chrdev)

キャラクタ型ドライバを作成するときには、ドライバに必要な情報をモジュール 組み込み時のハンドラ(init_module)の中でカーネルに登録する処理を行う必要 がある。ただし、情報システム実験(4)では、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)

情報システム実験(4)の初期化ルーチン(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 平成18年12月26日