VME Howto John Huggins and Michael Wyrick, vmelinux@va.net v0.8a, 30 July 1998 The Linux JF Project v0.8a-j, 2000 年 6 月 この文章は、組み込み機器システム分野の人々に VMEbus 用 Pentium ボード や PCI local bus を用いた VMEbus 用プロセッサ・ボードでどのようにして Linux を動かすのかを示すために生まれました。 ______________________________________________________________________ 目次 1. はじめに 1.1 要求される知識 1.2 どうして VMEbus システムで Linux を使うのか? 1.3 目的 1.4 フィードバック 1.5 VMELinux リビジョン履歴 1.6 著作権表示/配布 2. VMELinux カーネル・ドライバのインストール 2.1 ソースコードのダウンロード 2.2 ソースコードのインストール 2.3 VMELinux コンポーネントのコンパイル 2.4 VMELinux カーネル・モジュールのロード 2.5 困難な点 3. VMEUtils と VMEShell パッケージで VMEbus と対話する方法 3.1 VMEUtils プログラムとは何か 3.2 VMEShell スクリプトとは何か 3.3 vmemap コマンド 3.4 バイト、ワード、ロング長のデータを読む 3.5 バイト、ワード、ロング長のデータを書く 3.6 ファイルで VMEbus のデータを読む 3.7 VMEbus のデータをファイルへ書く 3.8 パラメータ 3.9 オプション 3.10 DMA モードに関する注意 4. デバイスドライバによる Tundra Universe PCI-VME ブリッジとの対話の仕方 4.1 VMELinux と共に用いられるデバイスドライバ 4.2 VMEMaster デバイスドライバ 4.3 VMESlave デバイスドライバ 4.4 Universe のレジスタの直接制御 4.5 read() 4.6 write() 4.7 lseek() 4.8 ioctl() 4.9 open() と close() 5. VMEbus、Linux、VMELinux の長所 5.1 ピン・コネクタとソケット・コネクタ 5.2 Eurocard の組み立て 5.3 Linux は安価である 5.4 Linux は安定している 5.5 Linux はダイナミックである 6. 現在そして検討中のボードのサポートについて 6.1 Xycom 社 XVME655 Pentium VMEbus ボード 6.2 Xycom社 XVME656 Pentium VMEBus ボード 6.3 Dynatem DPC1-0367 6.4 サポート計画中のボード 7. まとめ 8. FAQ 8.1 ボードはちゃんと存在するのに、いざシェル・ユーティリティでアクセスしてみると、アスタリスク(*)の行列が返ってきます。何なの? 8.2 VMELinux はどうやって割り込みをハンドリングするの? 8.3 私は RedHat 5.1 を持っています。でも VMELinux のプログラムをコンパイルできません。 9. 日本語訳について ______________________________________________________________________ 1. はじめに 1.1. 要求される知識 組み込み用の VMEbus プロセッサ・ボードで Linux を使うことはそう難しく はありません。しかし、基礎的な知識以上のものが要求されます。この文章 は、Linux マシンを完全に構築するための入門書ではありません。 この HOWTO ドキュメントを理解するためには、以下のことに精通していなく てはなりません。 o カーネルの設定とコンパイルを行って、ボードについている色々な周辺機 器を使えるようにすること。 Kernel-HOWTO、 Kernel-HOWTO 日本語訳 o ネットワーク機器のセットアップと設定。 NET-3 HOWTO、 Linux Networking-HOWTO (Previously the Net-3 Howto) 日本語訳 o inetd のセットアップ。 NET-3 HOWTO、 Linux Networking-HOWTO (Previously the Net-3 Howto) 日本語訳 o PCI と VME のブリッジチップ Tundra 社 Universe のセットアップと使 用法。Tundra Universe レジスタ・レベルで Universe にアクセスしよう としない限り、新しい VMUtils プログラムを使えば Universe に関する知 識は不必要になります。 o 以下のようないろいろなネットワーク関連パッケージのコンパイルとイン ストール。 Apache Site Wu-Ftpd FAQ o VMEbus Rev. D と VME64。 以下にすばらしい情報があります。 VMEbus International Trade Association (VITA) もし、上記のどれかにおぼつかないものがある場合は、ここで紹介してい るリンクを利用して、全てのパッケージを熟知しておくことを強くお勧め します。我々は上記に関してはいかなるメールにも返事は出しません。質 問はそれぞれ適切な HOWTO の著者へお願いします。もしくはハードウエア の製造業者へご相談ください。 この文章は、VMELinux のインストールと Xycom 社 の XVME-655(6U VME processor board)での使用法を記述しています。Pentium と Tundra 社の Universe チップを使用している他のブランドのボードは VMELinux を走らせ る能力があるはずです。テスト済みのボードについては VMELinux の Web サ イトにある Board Support セクションを参照してください。 VMELinux Project Web Site 1.2. どうして VMEbus システムで Linux を使うのか? VMEbus コンピュータのオペレーティングシステムは通常、リアルタイム・オ ペレーティングシステム(RTOS)です。そしてそれらは高価で習得が難しいで す。その代わり RTOS は現実世界のできごとに対してすばやく反応するので、 機器制御やプロセス応答に向いています。 VMEbus は、堅固なコンピュータ環境と相互接続のシステムを供給します。多 くのシステム・インテグレータにはこの堅固さが必要でしょうし、また非常に 速いリアルタイムの応答も必要でしょう。しかし、リアルタイムの応答は不要 だが以下のようなものは必要、というケースも多々あります。 o ネットワーク能力 o telnet もしくは類似のプログラムによるリモートアクセス o FTP もしくは類似のプログラムによるファイル転送 o BOOTP もしくは類似の方法によるリモートブート o システム割り込みに対する応答の方法 Linux はこれらの能力を全て持っています。だから VMELinux プロジェク トが存在するのです。 1.3. 目的 VMELinux の目的は、 VME システム・インテグレータにオペレーティング・シ ステムの別の選択肢を与えることです。機能が豊富で信頼性が高く、しかも低 コストの Linux は、組み込みコンピュータ産業界に恩恵を提供します。オペ レーティング・システムが高価であるために、経済的な理由から VME が利用 できないというアプリケーションが多いのです。Linux と VMELinux ドライバ を利用すれば、堅固な VMEbus は新たな可能性を持つのです。 VMELinux プロジェクトの目的は以下の通りです: o フリーな VMELinux カーネル・ドライバ・ソフトウエアを維持・改良する こと o VMEUtils プログラムや VMEShell ユーティリティのような付加価値要素 のあるソフトウエアの提供 o さまざまなメーカが供給している VME プロセッサ・ボードでのソフトウエ アのテスト o テスト済みのボード製品の Web ベースの文書の維持 o この HOWTO の維持 o 他の方からの助言や改良を元のコードに取り入れ、こうした方々の能力を フルに活用できるようにすること o 上記のソフトウエア全ての一次配布元となり、VMELinux のユーザが、著者 からオリジナルのコードを取得できることを保証すること 1.4. フィードバック VMELinux は現場でテストされていますが、うまく動作した点やうまく動作し なかった点についてぜひコメントを送ってください。 The VMELinux Project (vmelinux@va.net) まで、気軽にコメントをお送りく ださい。 我々は各々の VME CPU ボードについての経験を得たら、この HOWTO に別の設 定も載せるつもりです。今のところ我々は Xycom 社のボードのみについて記 述します。 1.5. VMELinux リビジョン履歴 Linux カーネル・ドライバ o 1997 年 11 月 v0.2 - Xycom 社ボードでの初期バージョン o 1997 年 12 月 v0.3 - 使用可能なバージョン o 1998 年 2 月 v0.6 - VME アクセスモードに DMA モードを加えた o 1998 年 6 月 v0.8 - 新しい VMEUtils が動くようにいくつか修正 o 1998 年 6 月 24 日 v0.8a - Web サイト上で現行バージョンが入手でき るようにした VMEUtils プログラム o 1998 年 2 月 v0.6 - VMEbus へアクセスするためのコマンドライン・イ ンタープリタを作った o 1998 年 6 月 v0.8 - VMEShell ユーティリティが機能するようにいくつ かの問題点を fix した o 1998 年 6 月 24 日 v0.8a - 現行バージョンが Web サイト上で入手でき るようにした VMEShell ユーティリティ o 1998 年 6 月 v0.8 - Linux シェル・プロンプトから VMEbus へアクセス を許可するコマンドライン・ユーティリティを作った、これらのシェル・ プログラムは VMEUtils プログラムとのインターフェイスを行う o 1998 年 6 月 24 日 v0.8a - シェル・プログラムの全ての名前を「vme」 から始まるように変更した。現行バージョンが Web サイト上で入手できる ようにした 1.6. 著作権表示/配布 この文章の著作権は、John Huggins と VMELinux Project にあります (Copyright 1997-1998)。 オリジナルを改変しない複製は、著者の許可なしに物理的・電子的を問わず、 あらゆるメディアに自由に複写または配布できます。翻訳も翻訳者の掲示を含 むなら特別な許可なしに同様にできます。商業的な配布も許可し、また奨励し ます。しかし、そのような配布は著者 The VMELinux Project (vmelinux@va.net) にお知らせくださるようお願いします。 ドキュメントからの引用(全文のコピーや全文へのポインタを含む派生した著 作)を事前の許可なしで使えます。 このドキュメント全体の複製・配布の際には著作権に関するこの注意事項を添 付するという条件を守ってください。またこの注意事項を各複製物のそれぞれ に添付するようにしてください。 簡単に言うと、我々はあらゆる可能なチャンネルを経由してこの文書が広く普 及することを願っています。しかしながら、我々は HOWTO 文書を copyright で保護しており、HOWTO 文書を再配布する計画については連絡してくださるこ とを期待しています。 2. VMELinux カーネル・ドライバのインストール 2.1. ソースコードのダウンロード VMELinux Web Site. から配布キットをダウンロードしてください。 2.2. ソースコードのインストール VME 用に取っておいたディレクトリにファイルを置きます - 名前は /universe を推奨します。zipped/tarred ファイルを以下のコマンドを入力し て解凍します。 tar -xzf VMELinux_08a.tar.gz 3 つのディレクトリができます。そして driver は ca91c042 へのシンボリッ ク・リンクです。 ca91c042 vmeshell vmeutils driver ca91c042 のディレクトリには、以下のファイルがあります - ca91c042/ ca91c042/Makefile ca91c042/ca91c042.c ca91c042/ca91c042.h ca91c042/README ca91c042/e ca91c042/ins ca91c042/stat ca91c042/uns vmeshell のディレクトリには、以下のファイルがあります - vmeshell/vmer vmeshell/README vmeshell/vmeseek vmeshell/cmd.vme vmeshell/vmew vmeshell/vmeregw vmeshell/vmeregr vmeshell/vmefa vmeshell/vmecall vmeshell/e vmeshell/ec vmeshell/fa.vme vmeshell/map.vme vmeshell/tmp.vme vmeshell/vmedb vmeshell/vmedl vmeshell/vmedw vmeshell/vmemap vmeshell/vmerb vmeshell/vmerf vmeshell/vmerl vmeshell/vmerw vmeshell/vmewb vmeshell/vmewf vmeshell/vmewl vmeshell/vmeww vmeutils のディレクトリには、以下のファイルがあります - vmeutils/commands.cpp vmeutils/commands.h vmeutils/universe.h vmeutils/Makefile vmeutils/vmeutils.h vmeutils/unilib.h vmeutils/unilib.cpp vmeutils/vmeutils.cpp vmeutils/README 2.3. VMELinux コンポーネントのコンパイル ca91c042 ディレクトリに入って、VMELinux デバイスドライバ・モジュールを 作ります。 make この時点で、 /dev にいくつかドライバ・ファイルを作らなければなりませ ん。以下のようにタイプしてください - make devices make が終了すると、ディレクトリの中に「ca91c042.o」というファイルがで きているでしょう。これはローダブルなモジュールです。下記のロードするた めの情報を見てください。それと /dev ディレクトリに数個の「vme... 」 ファイルができているでしょう。 デバイスファイルを /dev ディレクトリに作ったら、それらのパーミッション を変更しなくてはいけません。以下のようにタイプしてください - cd /dev chmod 666 vme* ファイルがどのように見えているべきか示します。 hostname:/dev# ls -l vme* crw-rw-rw- 1 root root 70, 8 Jul 30 10:51 vme_ctl crw-rw-rw- 1 root root 70, 0 Jul 30 10:51 vme_m0 crw-rw-rw- 1 root root 70, 1 Jul 30 10:51 vme_m1 crw-rw-rw- 1 root root 70, 2 Jul 30 10:51 vme_m2 crw-rw-rw- 1 root root 70, 3 Jul 30 10:51 vme_m3 crw-rw-rw- 1 root root 70, 4 Jul 30 10:51 vme_s0 crw-rw-rw- 1 root root 70, 5 Jul 30 10:51 vme_s1 crw-rw-rw- 1 root root 70, 6 Jul 30 10:51 vme_s2 crw-rw-rw- 1 root root 70, 7 Jul 30 10:51 vme_s3 hostname:/dev# 「vmeutils」ディレクトリへ移ってそこで「make」と入力します。 make これで「vmeutils」プログラムがコンパイルされます。このプログラムは直接 カーネル・ドライバと対話します。これは直接ドライバと対話するプログラム を自分で書きたいと思っている人のための参考となるものです。 「vmeutils」を、ユーザのバイナリ・ファイルを置くディレクトリへコピーし てください。我々のシステムでは、これは「/usr/local/bin」です。あるい は、「vmeutils」プログラムをユーザのバイナリ・ファイルを置くディレクト リへリンクすることもできます。 「vmeshell」ディレクトリへ移ります。ここにはコンパイルするファイルはあ りません。「vmeutils」プログラムを使って VMEbus へアクセスするための シェル・プログラムがあります。「vme」で始まる全てのファイルは 「/usr/local/bin」ディレクトリへリンクかコピーされていなければなりませ ん。 これでドライバを使うための準備ができました。 2.4. VMELinux カーネル・モジュールのロード あなたが root であることを確認してください。そして 以下のように Universe チップ用の VMELinux カーネル・モジュールを組み込み(ロード)し ます。 insmod ca91c042 もしくは「ins」とだけタイプして、あとはシェルスクリプトにまかせましょ う。終了したら、以下のようにタイプしてください - stat 画面にこのようなレジスタのリストが表示されるでしょう。 Universe driver info: Control Pointer = 0000 Stats reads = 0 writes = 0 ioctls = 0 LSI0_CTL = 00800000 LSI1_CTL = 00800000 LSI0_BS = C0000000 LSI1_BS = 00000000 LSI0_BD = C0010000 LSI1_BD = 00000000 LSI0_TO = 40009000 LSI1_TO = 00000000 LSI2_CTL = 00800000 LSI3_CTL = 00800000 LSI2_BS = 00000000 LSI3_BS = 00000000 LSI2_BD = 00000000 LSI3_BD = 00000000 LSI2_TO = 00000000 LSI3_TO = 00000000 image_va0 = 00000000 image_va1 = 00000000 image_va2 = 00000000 image_va3 = 00000000 Driver Program Status: DMACTL 0 = 00000000 DMACTL 1 = 00000000 DMACTL 2 = 00000000 DMACTL 3 = 00000000 OkToWrite 0 = 0 OkToWrite 1 = 0 OkToWrite 2 = 0 OkToWrite 3 = 0 Mode 0 = 0 Mode 1 = 0 Mode 2 = 0 Mode 3 = 0 もし、上記と異なっていれば何か間違っています。 2.5. 困難な点 Universe ドライバは PCI bus 上できちんと Universe チップを探しだしてく れますが、ボードの設計が違うと探しだせないかもしれません。我々は Xycom 社の XVME-655 ボードで全てのルーチンをテストしました。 Universe 社の PCI-VME ブリッジチップと PCI bus をもつ他の Intel ボードでも、これが動 かない原因はほとんどないはずです。もし、あなたが問題に出会ったらどうか 我々へお知らせください。 - The VMELinux Project (vmelinux@va.net) 3. VMEUtils と VMEShell パッケージで VMEbus と対話する方法 3.1. VMEUtils プログラムとは何か このプログラムはそのまま実行できます。一度スタートしたら、コマンド・プ ロンプトが現れます。「?」をタイプすればコマンドのリストが現れます。こ れでも使えるでしょうが、VMEShell スクリプトを使う方が便利だということ に気が付かれることでしょう。 VMEShell スクリプトはカーネル・ドライバと 対話するために VMEUtils プログラムを使うので、環境変数 PATH に VMEUtils へのパスを設定しておく必要があります。 「vmeutils」のソースコードも、カーネル・ドライバと直接対話する仕方のお 手本です。直接ドライバと対話をするプログラムを作りたい人にとって、これ らのソースファイルは良い実例です。 3.2. VMEShell スクリプトとは何か VMEShell プログラムは、UNIX シェル・スクリプトです。これはオペレータに VMEbus 上のデータにアクセスするためのシンプルな方法を提供します。これ らのコマンドを使うことにより最新のアクセス情報を保存したテンポラリ・ ファイルをユーザのワーキング・ディレクトリに作ります。これはなかなか嬉 しい機能です。なぜならマシンから一度ログオフし、再度ログインして中断し たところから続行するときに、VMEbus の情報を再度入手する必要がないから です。さらに、これらのファイルはカレント・ディレクトリに保存されるの で、アクセスしたい VME ボード毎に異なるディレクトリを設定すれば、それ ぞれの VME アクセス設定を別々に保存しておけます。 シェル・プログラムと「vmeutils」プログラムが /usr/local/bin ディレクト リにあるなら、一般ユーザとしてログインし、それらを実行することができる でしょう。以下の記述では、このことを前提としています。 3.3. vmemap コマンド 一般ユーザとしてログインし、テスト用のディレクトリを作ります。このディ レクトリで以下のようにタイプします - vmemap このようなヘルプ画面が表示されます。 Usage: map address count space size type where address is VME Address to set Universe image to Space = 0 CR/CSR Space = 1 A16 Space = 2 A24 Space = 3 A32 Size = 1 8 bit Size = 2 16 bit Size = 3 32 bit Size = 4 64 bit Type = 0 USR/DATA Type = 1 USR/PRG Type = 2 SUP/DATA Type = 3 SUP/PRG ここは VMEbus にどのようにアクセスしたいかを VMELinux へ教えるところで す。あなたはすでに VMEbus のたくさんのオペレーション・モードを知ってい ると思いますが、助けになるように短いリストを示します。 o address は見たいと思う VMEbus の実際のアドレスです。これは見たいア ドレス範囲の最低値に設定しなくてはいけません。 o count は見たい範囲のバイト数です。正しい値を入れてください。これは 上記で指定したアドレスから始まるバイト数です。 o space はアドレス空間 (モード) です。何のことか分からない人のために 説明すると、VMEbus は 4 つのオーバーラップしたアドレス空間を持って いて、それぞれ独立に呼ぶことができるのです。A16 は 64KB、A24 は 16MB、A32 は 4GB の空間です。VME 規格では A64 空間も定義されていま すが、 Universe チップはサポートしていません。 o Size はアクセスしている VME ボードの許される最大のデータ幅で す。VME ボードの中には 8 ビットのデータ幅しか扱えないもの、一度に 32 ビット(4 バイト) を転送するもの、中には一度の処理で 64 ビットを 移動できる特別な VME ブロックモードを操作できるものもありま す。Universe チップはこれら全てのモードが操作でき、安いシリアルポー トとも、また巨大なメモリ配列とも一緒に使うことができます。 o Type は実行されている VME トランザクションのタイプです。あるボード は「ユーザ(USR)」アクセスと「スーパバイザー(SUP)」アクセスを区別し ます。また中にはメモリの 2 「ページ」(プログラム(PRG)とデータ) への アクセスを許可するボードもあります。Universe チップは全てのモードに 対応しています。 次のようにタイプすると... vmemap 0x8000 0x100 1 2 0 VMELinux ドライバを、 A16 ボードのベースアドレス 0x8000 から 0x100 バ イトのメモリ領域に、 16 ビットのデータ幅、 USR/DATA モードでアクセスす るように設定します。 カレント・ディレクトリに 2 つ新しいファイルができるはずです。 o fa.vme o map.vme fa.vme は「固定アドレス」値を保存しています。このアドレス値は次に挙 げるプログラムが後でアクセスを行う際に必ず加えられます。 map.vme は毎回上記のパラメータを入力しなくてもよいように、それらを保存 しています。 以下の全てのシェル・ユーティリティは、 VME アクセスを実行する際、これ ら 2 つのファイルから値を読みます。 3.4. バイト、ワード、ロング長のデータを読む Syntax: o vmerb -[options] address size o vmerw -[options] address size o vmerl -[options] address size 3.5. バイト、ワード、ロング長のデータを書く Syntax: o vmewb -[options] address value o vmeww -[options] address value o vmewl -[options] address value 3.6. ファイルで VMEbus のデータを読む Syntax: o vmerf -[options] address size filename 3.7. VMEbus のデータをファイルへ書く Syntax: o vmewf -[options] address filename 3.8. パラメータ これらのコマンドと共に使用するパラメータがいくつかあります - address, size, filename です。 o address - 読みたい VMEbus アドレスの実際の 16 進値。 A16 VME アド レス空間へアクセスするように map コマンドを設定するなら、そのアドレ スは 0xABCD となります。A24 VME アドレス空間なら 0xABCDEF、A32 VME アドレス空間なら 0xABCDEFGH となります。 o size - 読みたいバイト数。この値は読みたいデータのワードサイズに関 係なく常にバイト数です。例えば vmerl を使って 16 バイトの情報を読み たければ、ディスプレイには 16 バイトが 4 つのロングワードで表示され るでしょう。 o filename - 読み込んだ VMEbus のデータを送るファイル名、あるいは VMEbus へ書き込むデータをとってくるファイル名。 o value - 「0xXXXX」のように書かれた 16 進数。 3.9. オプション 使用できるオプションは、 - (ハイフン)をつけて明示します。以下の任意の 組合せが可能です。 o q - vmeutils プログラムへのアクセスの詳細を表示しない(デフォルト) o Q - vmeutils プログラムへのアクセスの詳細を表示する o p - シングル・アクセス PCI アドレッシングモード(d と反対) (デフォ ルト) o d - DMA アクセス PCI アドレッシングモード(p と反対)(VMEbus への非 常に速いアクセス) o 0, 1, 2, 3 - Universe チップのどの "Image" をつかうか(デフォルトは 0) o b - バイナリ・モードをオフ(デフォルト) o B - バイナリモードをオン o パラメータの冗長な表示をしない(デフォルト) o ドライバがどのように使われているかを見るためにパラメータの冗長な表 示をする 3.10. DMA モードに関する注意 VMELinux は、Universe チップの機能への全てのアクセスを提供します。特に 有用なものは、チップ上の DMA エンジンへのアクセスです。この機能を使う と、Universe チップは PCI マスターになって PCI bus 上でデータを転送し ます。これも嬉しい機能ですが、しかし本当の利益は VMEbus アクセスに由来 します。たとえ VMEbus インターフェイスがブロックモード転送を使用してい なくても、Universe チップは 400 ナノ秒で転送を完了します。これが Universe が PCI bus と VMEbus の両方を完全にコントロールしたことによる 直接の結果です。したがって古いテクノロジーのものより、さらに速くノンブ ロック・モードの VMEbus 周辺機器へアクセスが可能なのです。 4. デバイスドライバによる Tundra Universe PCI-VME ブリッジとの対話の 仕方 4.1. VMELinux と共に用いられるデバイスドライバ o /dev/vme_ioctl o /dev/vme_m0 o /dev/vme_m1 o /dev/vme_m2 o /dev/vme_m3 o /dev/vme_s0 o /dev/vme_s1 o /dev/vme_s2 o /dev/vme_s3 4.2. VMEMaster デバイスドライバ /dev/vme_m* は通常、バス・マスタとしてVMEbus にアクセスするドライバで す。 Universe チップは、VMEbus への 4 つの VMEMaster ウインドウをプログラマ へ提供します。これらのウインドウは image と呼ばれます。これらのウイン ドウ内のレジスタの詳細はこの HOWTO の範囲を超えます。詳細については Universe のドキュメントを参照してください。 Tundra Universe 4.3. VMESlave デバイスドライバ /dev/vme_s* は通常、別の VMEbus マスタがこのデバイスにアクセスすること を許可するドライバです。 Universe チップは、VMEbus への 4 つの VMESlave ウインドウをプログラマ へ提供します。これらのウインドウは image と呼ばれます。これらのウイン ドウ内のレジスタの詳細はこの HOWTO の範囲を越えます。詳細については Universe のドキュメントを参照してください。 Tundra Universe スレーブ VME モードは、VMELinux ではまだサポートしていません。 4.4. Universe のレジスタの直接制御 /dev/vme_ioctl を使うと Universe のレジスタを読み書きできます。 経験豊かなユーザであれば、このデバイスを使って Universe チップの内部の レジスタへ直接アクセスできます。これらのレジスタの説明とその動作はこの HOWTO の範囲を超えてしまいます。以下から入手可能な Universe のドキュメ ントを調べてください。 Tundra Universe 4.5. read() n = read(vme_handle,buf,len); 引数の意味は以下の通りです - o vme_handle : open() からの戻り値 o buf : データ・ブロックへのポインタ o len : VMEbus から読み込むバイト数 4.6. write() write(vme_handle,buf,len); 引数の意味は以下の通りです - o vme_handle : open() からの戻り値 o buf : データ・ブロックへのポインタ o len : VMEbus へ書き込むバイト数 4.7. lseek() lseek(vme_handle,vme_pnt,Seek_Type); 引数の意味は以下の通りです - o vme_handle : open() からの戻り値 o vme_pnt : アクセスしたい実際の VME 上のアドレス o Seek_Type : SEEK_SET または SEEK_CUR 4.8. ioctl() ioctl(vme_handle, command, argument); 引数の意味は以下の通りです - o vme_handle : open() からの戻り値 o command : IOCTL_SET_CTL, IOCTL_SET_MODE, IOCTL_SET_BS, IOCTL_SET_BD, IOCTL_SET_TO o argument : 引数 また - o IOCTL_SET_CTL : イメージ CTL レジスタへ引数をセットする。引数は 32 ビットでなければならない。 o IOCTL_SET_MODE : "MODE_DMA" または "MODE_PROGRAMMED" - Universe チップが PCI bus と通信するためのモードを設定する。(VME ブロック・ モードではない) o IOCTL_SET_BS : イメージ BS レジスタへ引数をセットする。注 - この関 数のコールの前に BD レジスタをセットしておかなければならない。 o IOCTL_SET_BD : イメージ BD レジスタへ引数をセットする。 o IOCTL_SET_TO : イメージ TO レジスタへ引数をセットする。 4.9. open() と close() 4 つの VMELinux マスタあるいはスレーブ・デバイスとコントロール・デバイ スをオープン/クローズします。スレーブイメージはまだサポートされていま せん。 o vme_handle = open("/dev/vme_m0",O_RDWR,0); o uni_handle = open("/dev/vme_ctl",O_RDWR,0); o close(vme_handle); o close(uni_handle); 5. VMEbus、Linux、VMELinux の長所 5.1. ピン・コネクタとソケット・コネクタ VMEbus 規格では、ピン・コネクタとソケット・コネクタを用います。これは 接触部分が湿気などの環境条件にさらされないということでエッジ型のコネク タより優れています。より高価ですが、信頼性がより向上するのです。 5.2. Eurocard の組み立て VME ボードは、3U (160 x 100 mm) か 6U (160 x 233.35 mm) です。これらの サイズは Eurocard 規格のボード・モジュールやラックと一致します。 Eurocard は、CompactPCI を含む様々な bus で使用されている一般的なフォ ーマットです。このように人気があるので、箱の組み立てに必要な材料が安価 かつ入手しやすくなっています。 5.3. Linux は安価である Linux の本質は、ユーザによりサポートされ、自由に入手できるという点にあ ります。 Linux を使用している人の数は増え続けています。Linux のソフト ウエアの絶えまない開発に貢献する人の数は増え続けています。Linux は、無 料あるいは安価に手に入るから価値があるというのは正しくありませ ん。Linux は、ちゃんと動くから価値があるのです。 5.4. Linux は安定している Linux は不安定な OS だという人たちがいます。開発中の新しい Linux カー ネルは実験のためのものなので、重要な用途では当てにするべきではありませ ん。しかし安定版の Linux OS も常に入手可能であり、これは非常に安定した 動作をします。VMELinux は常にカーネル・ソースの安定版をベースにしてい ます - 現在の安定版カーネルは、2.0.X シリーズです。 (訳者注:2000 年 3 月の時点での安定版カーネルは、2.2.X シリーズです) 5.5. Linux はダイナミックである 大変多くの人々が Linux を開発しているので、改善や修正、新機能が Linux ディストリビューションの一部となるのを長期間待つ必要はありません。 6. 現在そして検討中のボードのサポートについて VMELinux ドライバはどんな PCI ベースの設計でも動くはずですが、次に述べ るボードでは実際に我々のソフトが動いています。 6.1. Xycom 社 XVME655 Pentium VMEbus ボード o この Xycom 社のボードは以下から得られる標準の VMELinux カーネル・ド ライバのパッケージと一緒に動作します。 VMELinux Project o コンパイル済みのカーネルのバイナリもすぐに登場するでしょう。これは 最新版の Linux カーネルをベースにしています。そして、オンボードの NE2100 Ethernet インターフェイスに対応したドライバも入っているはず です。詳細は Web サイトを見てください。 6.2. Xycom社 XVME656 Pentium VMEBus ボード o この Xycom 社のボードは以下から得られる標準の VMELinux カーネル・ド ライバのパッケージと一緒に動作します。 VMELinux Project o コンパイル済みのカーネルのバイナリもすぐに登場するでしょう。これ は、最新版の Linux カーネルをベースにしています。そして、オンボード の AHA2940/AIC7000 SCSI と 82558 Intel EtherExpress Ethernet 機器に 対応したドライバも入っているはずです。詳細は Web サイトを見てくださ い。 6.3. Dynatem DPC1-0367 o このボードは以下から得られる標準の VMELinux カーネル・ドライバの パッケージと一緒に動作します。 VMELinux Project o コンパイル済みのカーネルのバイナリもすぐに登場するでしょう。これ は、最新版の Linux カーネルをベースにしています。そして、オンボード の SCSI と Tulip Ethernet 機器に対応したドライバを含んでいるはずで す。詳細は Web サイトを見てください。 6.4. サポート計画中のボード あなたのボードが VMELinux でサポートされていなければ、我々にお知らせく ださい。多分、メーカは開発のために我々にボードを貸してくれるでしょう。 7. まとめ VMELinux は、UNIX 環境の長所全てと共に VMEbus システムを迅速・確実に実 装する安価な手段をユーザに提供します。 我々は VMELinux を我々のプロジェクトで用いており、したがって将来の開発 も活発に行われるものと期待していただいて結構です。今年の予定としては - o 割り込みの実装とそのハンドリング o Intel ベースの他ブランドの VMEbus ボードへのポーティング o Universe チップを使用している他のプロセッサへの VMELinux のポー ティング o RT-Linux タスクとして VMELinux カーネル・ドライバ・モジュールを走 らせる研究 このドキュメントは、例として Xycom 社 XVME-655 Pentium VME ボードへの VMELinux カーネル・ドライバのインストールに必要な手順の概要を述べてい ます。他の人々が他のボードへの VMELinux のインストールを試み、その成功 を知らせてくれることが我々の希望です。 問い合わせは以下にメールをください : The VMELinux Project (vmelinux@va.net) 。もし、質問や文章を更新すべき点があればお知らせくだ さい。それを付け加えます。 8. FAQ 8.1. ボードはちゃんと存在するのに、いざシェル・ユーティリティでアクセ スしてみると、アスタリスク(*)の行列が返ってきます。何なの? /dev/vme... ファイルのパーミッションが 666 にセットされているか確認し てください。そうでないと、シェル・ユーティリティは VME bus エラーと同 様なエラーを示すためデータの代わりに * を返します。 8.2. VMELinux はどうやって割り込みをハンドリングするの? いまのところできません。しかし、我々はすぐにその部分を実現できるよう計 画中です。どうかしばらくお待ちください。 8.3. 私は RedHat 5.1 を持っています。でも VMELinux のプログラムをコン パイルできません。 RedHat 5.1 には、新しいコンパイラが含まれています。 新しい egcs コンパ イラにあわせて、それぞれのディレクトリにある Makefile を手作業で編集で きればコンパイルは可能でしょう。我々は RedHat 5.1 でのインストールを十 分にサポートするつもりです。しかし、現時点では RedHat 5.0 か Slackware をお薦めします。 9. 日本語訳について 日本語訳は Linux Japanese FAQ Project が行いました。翻訳に関するご意見 は JF プロジェクト 宛に連絡してください。 改訂履歴を以下に示します。 v0.8a-j, 2000 年 6 月 翻訳: 仲吉一男 校正: o 佐藤亮一 o 武井伸光 o 青野正幸 o 中野武雄 o 藤原輝嘉 o 山下義之