1. HOME
  2. FAQ
  3. Solaris 2.x & Solaris 1.x VMEbus Driver サンプル集

FAQ

Solaris 2.x & Solaris 1.x VMEbus Driver サンプル集

Solaris 2.x & Solaris 1.x VMEbus Driver サンプル集

  • VMEbusドライバー サンプルプログラムについて

このサンプルプログラムは、FORCE SPARC CPUボードシリーズのVMEbus機能,
その他(ロータリSW,LED等)の機能を使用したサンプルプログラムをまとめた物です。
このサンプルディスクは、何枚かに分かれておりそれぞれ違った事例についてまとめてあります。

  • VMEbusドライバー サンプルプログラム概要

NO1.【VMEbusアクセスサンプル】

mmap/read/writeシステムコールを使用してVMEbus上の デバイスにアクセスするサンプルです。

NO2.【IOCTLサンプル】

ioctlシステムコールを使用してVMEbusインターフェースの設定変更, メールボックス機能,ロータリーSW,LED等をコントロールするサンプルです。

NO3.【ベンチマークサンプル】

VMEbusへプログラム/DMA/BLT/MBLT転送でアクセスした時の 転送速度をOS上より測定するサンプルです。

NO4.【DMA転送/ブロック転送/VME64 MBLT転送サンプル】

CPU-10/5VのDMAドライバーを使用してオンボード<->VMEbus間で DMA転送をするサンプルです。

NO5.【Solaris2.x Leafドライバーサンプル】

FORCE ISIO-1/2のサンプルデバイスドライバーです。

NO6.【Solaris1.x Leafドライバーサンプル】

FORCE ISIO-1/2のサンプルデバイスドライバーです。

  • インストレーションガイド

このサンプルプログラムディスクをインストールするには、1枚当たり ハードディスクの空きが1~2MB程度必要です。
また、Solaris2.xにて御使用の場合には、標準ではコンパイラーが入っておりませんのでSPARCコンパイラー,
またはGNUコンパイラーが必要になります。

  • インストール手順 1. インストール先のディレクトリイへ移動します。     % cd <インストール先のパス> 2. tarコマンドにてプログラムをリストアします。
        
        % zcat disk_nox.tar | tar xf - 3. disk_noxディレクトリイへ移動します。(xにはサンプルディスクの番号が当てはまります)     % cd disk_nox 4. INSTALLコマンドを実行します。     % INSTALL (パスが通っていなければ ./INSTALLと入力します。) 5. コンパイラーの種類を聞いてきますので、”1”か”2”を選択します。     1 (SPARCコンパイラー/SunOS Cコンパイラーを選択) 6. インストールするOSの種類とCPUボードの種類を選びます。     10 (Solaris2.x/CPU-5Vを選択) 7. ソースコードのコンパイルが終了し、”Instllation completed”のメッセージが表示されます。
     
  • プログラムの使用方法について

インストレーションが終了すると、binディレクトリイが作成されます。
このディレクトリイへ移動するか、パスを設定してプログラムをスーパーユーザーで実行します。

   プログラムの実行例

    % cd bin
    % su
    # mdump32
    usage: mdump32 address len
    # mdump32 0x800000 0x10(VMEbus A32 0x800000番地から16バイトをダンプします。)
    800000: 00 00 00 00 00 00 00 00 00 ...<省略>

    # m32
    usage: m32 address size
    # m32 0x8000000 b
    800000   00 : 12
    800001   00 : 34
    800002   00 : 56
    800003   00 : 78
    800004   00 : -
    800003   78 : -
    800002   56 : -
    800001   34 : -
    800000   12 : .
    #

    # mfill32
    usage: mfill32 address len pattern size
    # mfill32 0x800000 0x100 0x12345678 l
    *** Memory fill to VMEbus A32 ***
    VMEbus Address : 0x800000 - 0x800100
    Fill Pattern: 0x12345678 Data Size : LONG WORD (4Byte)
    #
 

  • サンプルプログラムの説明

サンプルNO1.

ファイル名   機能
—————————————————————————————————–
vmerd16d16.c VMEbusアドレス A16D16からユーザメモリーへ転送(read システムコール)
vmerd24d16.c 〃 A24D16 〃
vmerd32d16.c 〃 A32D16 〃
vmerd16d32.c   〃   A16D32      〃
vmerd24d32.c 〃 A24D32 〃
vmerd32d32.c 〃 A32D32 〃

使用例: VMEbusアドレス A32D32 0x800000番地からユーザメモリーへ1MBytes転送します。
vmerd32d32 0x800000 0x100000
—————————————————————————————————–
vmewr16d16.c ユーザアドレスからVMEbusアドレス A16D16へ転送(write システムコール)
vmewr24d16.c     〃 A24D16    〃
vmewr32d16.c     〃 A32D16 〃
vmewr16d32.c      〃       A16D32 〃
vmewr24d32.c     〃 A24D32    〃
vmewr32d32.c     〃 A32D32 〃

使用例: ユーザメモリー1MBytesに0のデータを書き込みVMEbusアドレス A32D32 0x800000番地へ1MBytes転送します。
vmewr32d32 0x800000 0x100000 0x0
—————————————————————————————————–
vmedump16.c VMEbusアドレス A16 をメモリーダンプ(read システムコール)
vmedump24.c 〃 A24 〃
vmedump32.c 〃 A32 〃

使用例: VMEbusアドレス A32 0x800000番地から256Bytesをダンプします。
vmedump32 0x800000 0x100
—————————————————————————————————–
mdump32.c VMEbusアドレス A16 をメモリーダンプ(mmap システムコール)
mdump24.c 〃 A24 〃
mdump16.c 〃 A32 〃

使用例: VMEbusアドレス A32 0x800000番地から256Bytesをダンプします。
mdump32 0x800000 0x100
—————————————————————————————————–
mfill32.c VMEbusアドレス A32 へデータを書き込む(mmap システムコール)
mfill24.c   〃   A24 〃
mfill16.c 〃 A16 〃
使用例: VMEbusアドレス A32 0x800000番地へ0のデータをLongWord(4Byte)で256Bytes書き込みます。
mfill32 0x800000 0x100 0x0 l
—————————————————————————————————–
mread32.c VMEbusアドレス A32 からデータを読み込む(mmap システムコール)
mread24.c 〃 A24 〃
mread16.c 〃 A16 〃

使用例: VMEbusアドレス A32 0x800000番地からデータをLongWord(4Byte)で256Bytes読み込みます。
mread32 0x800000 0x100 l
—————————————————————————————————–
m32.c VMEbusアドレス A32 のデータを変更(mmap システムコール)
m24.c 〃 A24  〃
m16.c 〃 A16 〃

使用例: VMEbusアドレス A32 0x800000番地のデータをByte(1Byte)単位で変更します。
m32 0x800000 b (RETURNで次のアドレスへ,'-'で一つ前のアドレスへ,'.'で終了)
—————————————————————————————————–
dsktovme16d16 ハードディスクのファイルをVMEbusアドレス A16D16へコピー(write システムコール)
dsktovme24d16     〃 A24D16 〃
dsktovme32d16     〃 A32D16 〃
dsktovme16d32     〃 A16D32 〃
dsktovme24d32     〃 A24D32 〃
dsktovme32d32     〃 A32D32 〃

使用例: ハードディスクのaaa.datファイルをVMEbusアドレス A32D32 0x800000番地へコピーします。   
dsktovme32d32 aaa.dat 0x800000 0x10000 (0x10000はaaa.datのファイルサイズです。)
—————————————————————————————————–
dsktovme16 ハードディスクのファイルをVMEbusアドレス A16へコピー(mmap システムコール)
dsktovme24    〃 A24 〃
dsktovme32     〃 A32 〃

使用例: ハードディスクのaaa.datファイルをVMEbusアドレス A32D32 0x800000番地へコピーします。   
dsktovme32 aaa.dat 0x800000 0x10000 (0x10000はaaa.datのファイルサイズです。)
—————————————————————————————————–
vme16d16todsk VMEbusアドレス A16D16のデータをハードディスクへコピー(read システムコール)
vme24d16todsk 〃 A24D16 〃
vme32d16todsk 〃 A32D16 〃
vme16d32todsk 〃 A16D32 〃
vme24d32todsk 〃 A24D32 〃
vme32d32todsk 〃 A32D32 〃

使用例: VMEbusアドレス A32D32 0x800000番地から1MBytesのデータをハードディスクのaaa.datファイルへコピーします。
vme32d32todsk aaa.dat 0x800000 0x100000
—————————————————————————————————–
vme16todsk VMEbusアドレス A16のデータをハードディスクへコピー(mmap システムコール)
vme24todsk 〃 A24 〃
vme32todsk 〃 A32 〃

使用例: VMEbusアドレス A32 0x800000番地から1MBytesのデータをハードディスクのaaa.datファイルへコピーします。
vme32todsk aaa.dat 0x800000 0x100000
—————————————————————————————————–

サンプルNO2.

ファイル名 機能
—————————————————————————————————–
source/cpu2ce/Solaris2x
leds.c フロントパネル LED 1,2 サンプル
abort_sw.c フロントパネル Abort SW サンプル
rotary_sw.c ロータリ SWの設定値の表示
vme_buserr.c VMEbus バスエラーをユーザルーチンでハンドリング
vme32_mode.c VMEbus A32モードの設定
vme_master.c VMEbus マスターウィンドウの設定
vme_reg.c VMEbus インターフェースレジスタの設定
vme_slave.c VMEbus スレーブインターフェ-スの設定
—————————————————————————————————–
source/cpu3ce/Solaris1x source/cpu5ce/Solaris1x (CPU-5TEもサポートしています。)
diagled.c フロントパネル DIAGLED サンプル
rotary_sw.c ロータリ SWの設定値の表示
vme_buserr.c VMEbus バスエラーをユーザルーチンでハンドリング
vme_master.c VMEbus マスターウィンドウの設定
vme_mbox.c メイルボックス割り込みサンプル
vme_reg.c VMEbus インターフェースレジスタの設定
vme_slave.c VMEbus スレーブインターフェ-スの設定
vme_sysfail.c VMEbus SYSFAILのコントロール
—————————————————————————————————–
source/cpu3ce/Solaris2x source/cpu5ce/Solaris2x (CPU-5TEもサポートしています。)
abort_sw.c フロントパネル Abort SW サンプル
rotary_sw.c ロータリ SWの設定値の表示
vme_buserr.c VMEbus バスエラーをユーザルーチンでハンドリング
vme_master.c VMEbus マスターウィンドウの設定
vme_mbox.c メイルボックス割り込みサンプル
vme_reg.c VMEbus インターフェースレジスタの設定
vme_slave.c VMEbus スレーブインターフェ-スの設定
vme_sysfail.c VMEbus SYSFAILのコントロール
watchdog.c Watchdogタイマーの設定
—————————————————————————————————–
source/cpu5v/Solaris1x
leds.c フロントパネル LED 1,2 サンプル
diagled.c フロントパネル DIAGLED サンプル
rotary_sw.c ロータリ SWの設定値の表示
vme_buserr.c VMEbus バスエラーをユーザルーチンでハンドリング
vme_mbox.c メイルボックス割り込みサンプル
vme_slave24.c VMEbus スレーブインターフェース A24 アドレスの設定
vme_slave32.c VMEbus スレーブインターフェース A32 アドレスの設定
vme_slave.c VMEbus スレーブインターフェース A24,A32 アドレスの設定
vme_arb.c VMEbus アービタモードの設定
vme_brlevel.c VMEbus リクエストレベルの設定
vme_intr.c VMEbus 割り込みの情報を表示
vme_sp_user.c VMEbus アクセスモードの設定(Supervisor or Non-privileged)
—————————————————————————————————–
source/cpu5v/Solaris2x
abort_sw.c フロントパネル Abort SW サンプル
vme_buserr.c VMEbus バスエラーをユーザルーチンでハンドリング
vme_mbox.c メイルボックス割り込みサンプル
vme_slave.c VMEbus スレーブインターフェース (CPU-2CE/3CE/5CE互換モード)
vme_slave24.c VMEbus スレーブインターフェース A24 アドレスの設定
vme_slave32.c VMEbus スレーブインターフェース A32 アドレスの設定
vme_sysfail.c VMEbus SYSFAILのコントロール
vme_diswp.c VMEbus Write postingを無効に設定
vme_enawp.c VMEbus Write postingを有効に設定
—————————————————————————————————–
source/cpu10/Solaris1x
leds.c フロントパネル LED 1,2 サンプル
rotary_sw.c ロータリ SWの設定値の表示
vme_buserr.c VMEbus バスエラーをユーザルーチンでハンドリング
vme_mbox.c メイルボックス割り込みサンプル
vme_reg.c VMEbus インターフェースレジスタの設定
vme_slave24.c VMEbus スレーブインターフェース A24 アドレスの設定
vme_slave32.c VMEbus スレーブインターフェース A32 アドレスの設定
vme_sysfail.c VMEbus SYSFAILのコントロール
vme_acfail.c VMEbus ACFAILのコントロール
—————————————————————————————————–
source/cpu10/Solaris2x
leds.c フロントパネル LED 1,2 サンプル
rotary_sw.c ロータリ SWの設定値の表示
vme_buserr.c VMEbus バスエラーをユーザルーチンでハンドリング
vme_mbox.c メイルボックス割り込みサンプル
vme_reg.c VMEbus インターフェースレジスタの設定
vme_slave16.c VMEbus スレーブインターフェース A16 アドレスの設定
vme_slave24.c VMEbus スレーブインターフェース A24 アドレスの設定
vme_slave32.c VMEbus スレーブインターフェース A32 アドレスの設定
vme_sysfail.c VMEbus SYSFAILのコントロール
—————————————————————————————————–

サンプルNO3.

ファイル名    機能
—————————————————————————————————–
source/cpu2ce_3ce_5ce
spec32_rd.c VMEbusアドレス A32からプログラムアクセスでデータを読み込んだ時の転送速度を表示します。
spec32_wr.c VMEbusアドレス A32へプログラムアクセスでデータを書き込んだ時の転送速度を表示します。
—————————————————————————————————–
source/cpu5v/Solaris1x source/cpu5v/Solaris2x
specdma32_rd.c ユーザメモリからVMEbusアドレス A32 へDMA転送した時の転送速度を表示します。
specdma32_wr.c VMEbusアドレス A32 からユーザメモリへDMA転送した時の転送速度を表示します。
—————————————————————————————————–
specdma32b_rd.c ユーザメモリからVMEbusアドレス A32 へDMAブロック転送した時の転送速度を表示します。
specdma32b_wr.c VMEbusアドレス A32 からユーザメモリへDMAブロック転送した時の転送速度を表示します。
—————————————————————————————————–
specdma32mb_rd.c ユーザメモリからVMEbusアドレス A32 へDMA MBLT転送した時の転送速度を表示します。
specdma32mb_wr.c VMEbusアドレス A32 からユーザメモリへDMA MBLT転送した時の転送速度を表示します。
—————————————————————————————————–
source/cpu10/Solaris1x source/cpu10/Solaris2x
specdma32_rd.c ユーザメモリからVMEbusアドレス A32 へDMA転送した時の転送速度を表示します。
specdma32_wr.c VMEbusアドレス A32 からユーザメモリへDMA転送した時の転送速度を表示します。
—————————————————————————————————–
specdma32b_rd.c ユーザメモリからVMEbusアドレス A32 へDMAブロック転送した時の転送速度を表示します。
specdma32b_wr.c VMEbusアドレス A32 からユーザメモリへDMAブロック転送した時の転送速度を表示します。
—————————————————————————————————–

サンプルNO4.

ファイル名    機能
—————————————————————————————————–
source/cpu5v/Solaris1x source/cpu5v/Solaris2x
vdma16d32_rd.c VMEbusアドレス A16D32からユーザメモリへDMA転送を行います。
vdma24d32_rd.c    〃 A24D32 〃
vdma32d32_rd.c  〃 A32D32 〃
—————————————————————————————————–
vdma16d32_wr.c ユーザメモリからVMEbusアドレス A16D32へDMA転送を行います。
vdma24d32_wr.c  〃 A24D32 〃
vdma32d32_wr.c  〃 A32D32 〃
—————————————————————————————————–
vdma24d32b_rd.c VMEbusアドレス A24D32からユーザメモリへDMAブロック転送を行います。
vdma32d32b_rd.c     〃 A32D32 〃
—————————————————————————————————–
vdma24d32b_wr.c ユーザメモリからVMEbusアドレス A24D32へDMAブロック転送を行います。
vdma32d32b_wr.c     〃  A32D32 〃
—————————————————————————————————–
vdma24d32mb_rd.c VMEbusアドレス A24D32からユーザメモリへDMA MBLT転送を行います。
vdma32d32mb_rd.c     〃 A32D32 〃
—————————————————————————————————–
vdma24d32mb_wr.c ユーザメモリからVMEbusアドレス A24D32へDMA MBLT転送を行います。
vdma32d32mb_wr.c     〃  A32D32 〃
—————————————————————————————————–
source/cpu10/Solaris1x source/cpu10/Solaris2x
vdma16_rd.c VMEbusアドレス A16D32からユーザメモリへDMA転送を行います。
vdma24_rd.c    〃 A24D32 〃
vdma32_rd.c  〃 A32D32 〃
—————————————————————————————————–
vdma16_wr.c ユーザメモリからVMEbusアドレス A16D32へDMA転送を行います。
vdma24_wr.c  〃 A24D32 〃
vdma32_wr.c  〃 A32D32 〃
—————————————————————————————————–
vdma24b_rd.c VMEbusアドレス A24D32からユーザメモリへDMAブロック転送を行います。
vdma32b_rd.c     〃 A32D32 〃
—————————————————————————————————–
vdma24b_wr.c ユーザメモリからVMEbusアドレス A24D32へDMAブロック転送を行います。
vdma32b_wr.c     〃  A32D32 〃
—————————————————————————————————–