next up previous
次へ: dio_writeメソッドの登録 上へ: システムコールとメソッド(その3: dio_write) 戻る: writeメソッド

dio_writeメソッドの作成

1バイトから4バイトまでのデータをwriteできるメソッドを考える。

このdio_writeメソッドの各機能を次のように作成していく。


\begin{boxedminipage}{\textwidth}
\begin{verbatim}ssize_t dio_write(struct fil...
... pdio_res = (PDIO_RESOURCE)filp->private_data;\end{verbatim}
\end{boxedminipage}

dio_readメソッドの時と同じように、まずリソース情報をfile構造体からとりだ す。



\begin{boxedminipage}{\textwidth}
\begin{verbatim}if (count < 0)
return -EINVAL;if (count > 4)
count = 4;\end{verbatim}
\end{boxedminipage}

次に、書き込みデータサイズの確認と設定を行なう。


\begin{boxedminipage}{\textwidth}
\begin{verbatim}if (copy_from_user(bdata, buff, count))
return -EFAULT;\end{verbatim}
\end{boxedminipage}

dio_read関数の時とは逆に、ユーザ空間内のデータをカーネル空間にコ ピーする必要があるので、copy_from_user関数を使う。


\begin{boxedminipage}{\textwidth}
\begin{verbatim}
for (i = 0; i < count; i+...
..._res->io_address[0] + i);
}return count;
}\end{verbatim}
\end{boxedminipage}

最後に、先ほど取り出したI/Oポートアドレスを介して、outb関数を使っ てデータの書き込みを行ない、書き込み完了後、書き込んだデータサイズを戻り 値としてdio_write関数を終了する。

以上の処理を全て使えば、1バイトから4バイトまでを出力できる dio_write関数が作成できる。



MANOME Yoichi 平成19年1月6日