次のページ 前のページ 目次へ

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)


次のページ 前のページ 目次へ