Tech と Culture

テクノロジーとカルチャー

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

次にキャラクタ型デバイスドライバの登録や、Open,Closeのハンドラをコーディングします。

Linux デバイスドライバプログラミング 平田豊著」に載っているコードほぼそのままです。

Openハンドラでは、メジャー番号、マイナー番号を表示するようにしています。
デバイスファイルをオープンした際にこの関数が呼ばれます。
mjpeg-drv1.png

次にCloseハンドラです。こちらもメジャー番号、マイナー番号を表示します。

mjpeg-drv2.png

init関数は少し変更になります。register_chrdevを用いてキャラクタ型デバイスドライバを動的に登録しています。メジャー番号はOSから動的に与えられます。ユーザーに分かるようにメッセージに表示しています。
また、file_operations構造体に、open,closeハンドラの関数名を示しています。今後、read,write,ioctl等を追加していく予定です。

mjpeg-drv3.png
mjpeg-drv4.png

これらのコードを以前と同様にコンパイルしてlinuxをブートすると同じようにメッセージが出ています。
kmjpeg driver[major 254] installed.
メジャー番号は254が割り当てられたようです。
この番号を用いてデバイスファイルを作成します。
# mknod /dev/kmjpeg c 254 0
/dev/kmjpegができていることが確認できます。
それでは、デバイスファイルにアクセスしてOpenハンドラを動作させてみます。

cat /dev/kmjpeg

すると以下のようなメッセージが、
kmjpeg_open: major 254 minor 0 (pid 40)
i_private=f01dae10 private_data=f0874420
cat: read error: Invalid argument
kmjpeg_close: major 254 minor 0 (pid 40)
i_private=f01dae10 private_data=f0874420

OpenハンドラとCloseハンドラが呼ばれていることが分かります。
readハンドラをまだ作っていないためにエラー表示が出されています。

ここまでは、何の問題もなく簡単に動作しました。