Linux Device Driver for HOSHIN HE1442-4 and Sample Multi-Channel Analyzer using Tcl/Tk and BLT 1. 概要 豊伸電子の Multi-Channel Analyzer HE1442-4 (ISA インターフェース) を Linux で使用する為のデバイスドライバと、簡単な表示プログラムの 例題を Tcl/Tk + BLT で作りました。 HE1442 は、世の中に多く流布している類の単なる Peak Sensitive ADC とは違って、Shaping Amplifier と Discriminator を内蔵している上に プリアンプ電源も供給可能で、外部回路および NIM 電源が不要となる事 から、トータルで安上がりであるという特徴を持っています (ちなみに 本体価格はインターフェース込みで 30 万円弱です)。 残念ながら Shaping Time が固定なので、汎用用途としては使い難いの ですが、Shaping Amplifier、Discriminator 共に出力をモニターできる 点と併せて、学生実験用としての位置付けがなされています。 インターフェースも実にシンプルで、データ収集ソフトウェアを簡単に ユーザーが書けるという点は教育的なのですが、添付ソフトで用いられ ている、スタンドアローンの MS-DOS マシンで ADC のステータスをポー リングするというスタイルは、今日では些か時代遅れの感が有り、強大 な CPU パワーを占有してデータ収集に使うのも勿体ない話です。 そこで、ターゲットを Linux に限定し、割り込みを用いた一般的なスタ イルのデバイスドライバを作成しました。ヒストグラミングはデバイス ドライバの中で作成され、ユーザープログラムはそれを読み出すだけで 済むようになっていますが、これも教育的配慮から、ADC の生データを リスト的に読み出す事もできるようになっています。Linux カーネルの バージョンは 2.0.x と 2.2.x に対応しています。 デバイスドライバを用いたサンプルとして、ヒストグラム表示プログラ ム (通常の意味でのマルチャンプログラム) を用意しました。ただし、 私の労力の節約の為に Tcl/Tk と BLT を使った簡単なものになっていま す。動作は SRA の日本語化パッチをあてた tcl7.6/tk4.2 と BLT-2.3、 および tcl/tk8.0.5 と BLT-2.4u の組合せで確認しています。BLT-2.4 は枝番が n 以前の版は非常に buggy なので使用不能です。2.4u でも PostScript 出力にフォントのバグが有ります。パッチに関しては岡村 まで御問い合わせください。 2. インストール 先ずハードの設定ですが、HEP2617 インターフェースカードについて、 I/O アドレスと IRQ (割り込み) を、他のリソースと衝突しないように 割り当てる必要が有ります。 - I/O アドレス 16 ビットアドレスを A0-A15 で表わすと dip スイッチと各ビットは SW 1 2 3 4 5 6 7 8 bit A1 A2 A3 A4 A5 A6 A8 A9 のように対応しています (ただし負論理)。A7 は常にゼロであり、A0 はソフトで選択されます (つまり 2 バイトを使用します)。 工場出荷時の設定は SW1..SW7=OFF, SW8=ON なので、 address = 0x017E (A0=0) 0x017F (A1=1) となります。 - IRQ IRQ は 3, 4, 5, 6, 7 が選択できるようですが、基板上には半田付 ランドが有るのみなので、自分で半田付けする必要があります。基板 シルクで INT1 と書かれている個所が HE1442 からの DATA READY の 信号らしいので、IRQ ラインのどれかに半田付けしてください。状況 によって IRQ を変更したくなる事は有るので、将来の為に、基板上 のメッシュパターンを利用して dip スイッチを付けて置くと良いで しょう。 ソフトウェアの配布元は、現在の所 ftp://iris.riken.go.jp/he1442/he1442.tar.gz となっていますので、これを取得し、適当なディレクトリで展開してく ださい。he1442 というサブディレクトリが作成され、必要なファイル がその下に置かれます。 ハードの設定に対応して、Makefile の最初にある IOPORT (下位バイト のアドレス) と IRQ を編集してください。MAJOR (デバイスのメジャー 番号) は、他に怪しいカードを使っていなければ 63 で良いと思います が、念の為 /dev を確認してください。DEVICE (/dev 以下に作成する デバイス名) はサンプルプログラムを使うならば変更しないでください。 ヒストグラムサイズは 4096 以下の大きさを 2 の巾乗で指定してくだ さい (ADC 自体の分解能は 12 ビットで、リストデータには加工前のデ ータが保存されます)。 先ず、デバイスファイルを作成します。root になって % make devices を実行すると、(デバイス名を変更していなければ) /dev/hemca と /dev/hemca1 が作成されます。次に % make all を実行すると、デバイスドライバ本体 (デバイス名を変更していなけれ ば hemca.o) と、サンプルプログラムで使用するライブラリ (同じく libhemca.so) が作成されます。デバイスドライバは loadable module ですので、root になって % /sbin/insmod hemca.o を実行するとカーネルに組み込まれ、 % /sbin/rmmod hemca を実行するとカーネルから切り離されます。問題が無ければ /etc/rc.d 以下でブート時に insmod してしまうようにれば良いでしょう。割り込 みは実際にデータ収集を行っている時にしか発生しませんので、ドライ バを組み込んだまま放っておいても害は有りません。あるいは、RedHat 系を使っている場合には、 % make sys.install を実行すればシステムのモジュールとして登録されるので、デバイスを アクセスするプログラムを起動すると自動的に組み込まれ、不使用状態 が続くと自動的に切り離されるようになります。 3. 使用方法 - デバイスドライバ 機器の制御はデバイスドライバを介して行われる訳ですが、本デバイス ドライバがサポートするのは ioctrl による制御と read によるヒスト グラムまたはリストデータの読み込みだけです (ヒストグラムを mmap できたら格好良いと思うかも知れませんが…、効率的には全く得しませ ん、と強がりを言っておきましょう)。 ioctl で利用可能なコマンドは以下の通りです。値は hemca.h で定義 されていますので #include する必要が有ります。 HEMCA_START /* データ収集を開始します */ HEMCA_STOP /* データ収集を停止します */ HEMCA_CLEAR /* ヒストグラムをクリアします */ HEMCA_TIME /* Live Time を第 3 引数に返します */ HEMCA_LOST /* リストデータとして取得されなかったイベント の個数を第 3 引数に返します */ TIME, LOST を使用する場合は、ioctl の第 3 引数に long のポインタ を渡してください。START, STOP, CLEAR は第 3 引数を使用しません。 ioctl は、デバイスファイル /dev/hemca に対して行ってください。 read の動作はデバイスファイルによって切り替えられます。 /dev/hemca からの read --- ヒストグラムの読み込み /dev/hemca1 からの read --- リストデータの読み込み リストデータはバッファされていますが、読み込みが追い付かないと LOST で返される値が増えて行きます。 C でプログラムする場合の例題を、hemca-ctrl.c に用意しましたので 参考にしてください。このプログラム自体は、実用上何の役にも立ちま せん。 - サンプルプログラム mca という tcl スクリプトです。GUI プログラムなので、実行すれば 使い方はおよそ判ると期待して、説明は省略します。諸々の設定は、リ ソースファイル Mca.ad を編集するか、対応する記述を ~/.Xdefaults に書き加える事で或る程度できます。なお、プログラムは起動時に付随 的に他のファイルを参照しますので、配布物内のものは同じディレクト リに置くように注意してください。mca の起動自体は、パスの通ってい るディレクトリにリンクを張るか、alias 定義するか、フルパス指定で 行ってください。 データ収集を行わずにヒストグラムの閲覧のみ行いたい (所謂オフライ ンで使いたい) 場合は % mca -offline として起動してください。 --------- 岡村 弘之 Email: okamura@phy.saitama-u.ac.jp 埼玉大学理学部物理 Tel&Fax: 048-858-3375