一般的な UNIX の I/O 制御と同様に、
CAMAC 制御もデバイスドライバを通して行なわれます。
本ドライバの場合、
デフォルトでは
/dev/dc
および
/dev/dc1
という名前が major number 61 に割り当てられます。
LAM の enable/disable、バスの初期化等の速度を要求されない
オペレーションは、このデバイスに ioctl コマンドを
発行する事によって行なわれます。
しかし、 原子核・素粒子実験で一般的なイベントタイプのデータ収集では、 非同期に発生するイベントに対して遅延無く データの読み出しを行なう必要が有り、 ユーザープログラムがデバイスドライバを介して処理していたのでは とても間に合いません。 そこで、割り込み発生時の処理をデバイスドライバの中に記述し、 取り敢えずデータを適当なバッファに貯めておいて、 ユーザープログラムがデバイスドライバから read で読み出す方法が採られます。 つまり、実験装置や読み出しデータに応じて、 デバイスドライバを書き換える必要があるわけです。
元々 Linux は、 複雑になり過ぎて実現が困難になった OS に対するアンチテーゼ(?)として、 モノリシックカーネルによる、 小さくて軽いシステムの実装を基本としていました。 しかし、全く一つのプログラムとしてのカーネルだけでは、 デバイスドライバを変更するとカーネル全体を作り直す事になってしまいます。 これでは次から次に現れる有象無象のデバイスや、 PCMCIA 等の着脱型デバイスに対応できないので、 カーネルを止めずに組み込み/削除可能なデバイスドライバの仕組みが 加えられました。 これがローダブルモジュールです。 RedHat 等のディストリビューションでは、 あらゆるデバイスのローダブルモジュールを あらかじめ用意する事により、 システムインストールの簡単化や 構成の変化に対する柔軟な対処を実現しており、 最早カーネルを自分でコンパイルする必要がほとんど無くなるほど、 モジュールの役割は重要になっています。
本デバイスドライバもローダブルモジュールによる実装を基本にしています (カーネルに静的に組み込む事を拒むものではありませんが)。 ユーザーは、 測定条件に応じて一つのルーチンを用意するだけで済むように なっており、 実験中でも システムを止める事なく 測定内容を変更する事が可能です。
Linux デバイスドライバについて詳しく知りたい方は こちら