EN JA
DIGI(4)
DIGI(4) FreeBSD Kernel Interfaces Manual DIGI(4)

名称

digiDigiBoard インテリジェントシリアルカードドライバ

書式

device digi

このマニュアルページは dgb ドライバのためのオリジナルとして書かれており、 digi ドライバとの違いを反映するために綿密に調査して見直しするべきです。

定義されないとき、数値は次のように計算されます:

default NDGBPORTS = number_of_described_DigiBoard_cards * 16

ポートの実際の数より少ないなら、システムは最初の NDGBPORTS ポートしか使用することができません。より大きいなら、すべてのポートが使用可能となりますが、いくらかのメモリが浪費されます。

flags の意味:

0x0001
代わりのピン出力 (pinout) を使用します (DCD と DSR ラインを交換)
0x0002
PC/Xe の 8K ウィンドウモードを使用しません

デバイスの番号付け:

0bCCmmmmmmmmOLIPPPPP 
  CCard number                    Card 番号 
    mmmmmmmmajor number           メジャー番号 
            callOut               発呼 
             Lock                 ロック 
              Initial             初期 
               PPPPPort number    ポート番号

解説

digi ドライバは、 EIA RS-232C (CCITT V.24) 規格に基づく非同期インタフェースで DigiBoard PC/Xe と PC/Xi シリーズのインテリジェントシリアルマルチポートカードのサポートを行います。

各ラインの入出力は次のボーレートの 1 つに設定されます。 50, 75, 110, 134.5, 150, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600 またはより新しいバージョンのカードの 115200。

ドライバはどんな割り込みも使用しない、“ポーリングベース”です。これは、 DigiBoard カードで発生する割り込みの代わりにクロック割り込みを使用するのを意味し、1 秒間に 25 回のカードの状態をチェックします。 DigiBoard カードには (1 ポートあたりの 1Kbyte を越える) 大きい入出力バッファと注意を必要とするポートを効率的に見つけることを許すハードウェアがあるので、これは実用的です。このポリシで見られる唯一の問題は、遅い SLIP と PPP 応答です。

カーネル設定ファイル中の各行は sio(4) ドライバでのように 1 つのポートではなく、1 枚のカードについて記述します。

flags キーワードは、インタフェースの pinout を変更するか、または (64K メモリウィンドウがある) 互換性モードで 8K のメモリウィンドウで動作することができる、新しい PC/Xe カードを使用するために、カーネル設定ファイル中の各“ device dgb”行で使用されます。 8K メモリウィンドウを使用することは、短い I/O バッファを意味せず、すべてのバッファが同じメモリアドレスにマップされて、必要に応じて切り換えられるだけを意味することに注意してください。

port 値はジャンパでカードに設定したポートと同じでなければなりません。 PC/Xi カードに関しては、同じ規則が iomem 値に適用できます。それはジャンパでカードに設定したメモリアドレスと同じでなければなりません。 PC/Xe カードのために、このためにジャンパを使用する必要はありません。実際には、それを行うジャンパはありません。カーネル設定ファイルの iomem 値とカードがこのアドレスを使用するようにプログラムされるので、利用者が使用したいアドレスに書き込むだけです。

同じ範囲のメモリアドレスはインストールされたすべての DigiBoard で使用されるかもしれません (しかし、他のいかなるカードや実際のメモリでは使用されません)。多量のメモリ (256K または 512K とおそらく 128K さえ) がある DigiBoard は最初のメガバイトの外側のメモリアドレスにマップしなければなりません。コンピュータに 15 メガバイト以上のメモリがあるなら、 DigiBoard がマップすることができるような最初のメガバイトの外側には空きのアドレス空間はありません。この場合、利用者はコンピュータのメモリの量を削減する必要があります。しかし、多くのマシンはより良い解決法を提供しています。それらには、 BIOS セットアップを使用して 16 番目のメガバイト (アドレス 0xF00000 - 0xFFFFFF) におけるメモリを“オフにする”能力があります。従って、DigiBoard のアドレス空間は、この“穴”を設定することができます。

digi ドライバによって制御されたシリアルポートは“着呼 (callin)”と“発呼 (callout)”の両方に使用することができます。各ポートには、着呼デバイスと発呼デバイスがあります。発呼デバイスのマイナ番号は対応する着呼ポートのものより 128 大きくなっています。着呼デバイスは汎用です。通常、それをオープンするプロセスは、キャリアと不活発になる発呼デバイスを待ちます。発呼デバイスは、着呼デバイスでキャリアを待つプロセスからポートを盗むために使用されます。それをオープンするプロセスは、キャリアを待たないで、発呼セッションと衝突しないようにするために、深いスリープとなる着呼デバイスでキャリアを待つ任意のプロセスを置きます。発呼デバイスは一般的なポートで動作し、待たないでポートをオープンする必要があると思われましたが、そうすることができないくらい愚かな取り扱いプログラムのために誤用されます。

また、 digi ドライバはそれぞれの着呼デバイスと発呼デバイス“データ”デバイスのために初期状態とロック状態の制御デバイスをサポートします。初期状態のデバイスのマイナ番号は対応するデータデバイスのものより 32 大きくなっています。ロック状態のデバイスのマイナ番号は対応するデータデバイスのものより 64 大きくなっています。データデバイスの termios 設定は、最初にオープンされる対応する初期状態のデバイスのものからコピーされ、前にオープンからは引き継がれません。利用者のセットアップに適した初期の termios 状態をプログラムするために初期状態のデバイスで正常な方法で stty(1) を使用してください。

ロック termios 状態は termios 状態の変更を無効にするフラグとして機能します。例えば、 CRTSCTS のようなロックフラグ変数は、ロック状態デバイスで“ stty crtscts”を使用します。速度と特殊文字は、ロック状態デバイスに対応する値を任意の非 0 値に設定することによって、ロックされます。

正しく配線された外部のデバイスと通信する正しいプログラムはほとんど任意の初期状態とロックなしで動作しますが、他のセットアップは何らかのデフォルトの初期状態を変更して、状態をロックすることで利点があるかもしれません。特に、非 (POSIX) 標準のフラグのための初期状態はアタッチされたデバイスに適応するように設定するべきであり、バグがあるプログラムがそれらを変更するのを防ぐためにロックする必要があるかもしれません。例えば、 CRTSCTS は常に RTS/CTS ハンドシェイクをサポートするデバイスでロックされるべきで、それを全くサポートしないデバイスではオフにされるべきです。 CLOCAL はキャリアをサポートしないデバイスのためにロックされるべきです。 HUPCL は、ある理由でハングアップしたくないなら、ロックをオフにされるかもしれません。一般的に、何かが間違った状態でロックされるなら、非常に悪いことが起こり、1 つ以上の設定をサポートするデバイスのためにロックするべきではありません。着呼ポート上の CLOCAL フラグは、特定のセキュリティホールを避けるためのログインのためにロックをオフにされるべきですが、着呼ポートが他の何かで使用されているなら、 getty によって行われる必要があります。

関連ファイル

/dev/ttyD??
着呼ポート用
/dev/ttyiD??
/dev/ttylD??
対応する着呼の初期状態とロック状態デバイス

/dev/cuaD??
発呼ポート用
/dev/cuaiD??
/dev/cualD??
対応する発呼の初期状態とロック状態デバイス

/etc/rc.serial
初期状態とロック状態デバイスを設定する例

これらのデバイス名の最初の疑問符はカード番号 (0 と 65535 の間の 10 進数) の省略形です。 2 番目の疑問符はポート番号 (範囲 [0-9a-v] 中の文字) の省略形です。

診断

利用者は、ソースファイル dgb.c の始めで DEBUG を定義することによって、拡張された診断を有効にすることができます。
dgb X: warning: address N truncated to M
PC/Xe の 8K ウィンドウのメモリアドレスは、整列不良であるか (それは 8K 境界にあるべきです)、または最初のメガバイトで外側です。
dgb X: 1st reset failed
カードの I/O ポートのアクセスに関する問題、たぶん間違った port 値がカーネル設定ファイルに指定されています。
dgb X: 2nd reset failed
ハードウェアに関する問題です。
dgb X: N[st,nd,rd,th] memory test failed
カードのメモリのアクセスに関する問題、たぶん間違った iomem 値がカーネル設定ファイルに指定されています。
dgb X: BIOS start failed
オンボードの BIOS を始めることに関する問題です。 DigiBoard のメモリアドレスはたぶん、他のデバイスか RAM に重なっています。
dgb X: BIOS download failed
オンボードの BIOS に関する問題です。 DigiBoard のメモリアドレスはたぶん、他のデバイスか RAM に重なっています。
dgb X: FEP code download failed
フロントエンドプロセッサのマイクロ OS をダウンロードすることに関する問題です。 DigiBoard のメモリアドレスはたぶん、他のデバイスか RAM に重なっています。
dgb X: FEP/OS start failed
フロントエンドプロセッサのマイクロ OS を始めることに関する問題です。 DigiBoard のメモリアドレスはたぶん、他のデバイスか RAM に重なっています。
dgb X: too many ports
この DigiBoard は、32 以上のポートがあると報告しています。たぶん、ハードウェア問題か、または DigiBoard のメモリアドレスが、他のデバイスか RAM に重なっています。
dgb X: only N ports are usable
NDGBPORTS パラメータは小さ過ぎます、このカード上の N ポートに割り付けられた空間が十分にあります。
dgb X: port Y is broken
オンボード警告が、指定されたポートにはハードウェア問題があると報告しました。
dgb X: polling of disabled board stopped
ドライバのポーリング論理の内部の問題です。
dgb X: event queue's head or tail is wrong!
ドライバかハードウェアの内部の問題です。
dgb X: port Y: got event on nonexisting port
物理的に存在していますが、誤った設定のために使用不可能なポートで何らかの状態が変化しました。
dgb X: port Y: event N mstat M lstat K
ドライバはカードから奇妙なイベントを取得しました。たぶん、これは、イベントの拡張リストがある新しいカードがあるか、または他のハードウェア問題があることを意味します。
dgb X: port Y: overrun
入力バッファが満杯となりました。ドライバのポーリング論理の問題です。
dgb X: port Y: FEP command on disabled port
ドライバの内部の問題です。
dgb X: port Y: timeout on FEP command
ハードウェアの問題です。

歴史

digi ドライバは、 Linux の sio(4) ドライバと DigiBoard ドライバから派生し、現在、開発中です。

バグ

BREAK の送信の実装は中断しています。とにかく 1/4 秒の固定長の BREAK を送信します。

select(2) の実装にはバグがありました。それは、現在、修正されていますが、まだ広範囲にテストされていません。

ditty コマンドはありません。機能 (代替ピン出力 (pinout)、115200 ボーまでのスピードアップ、など) の大部分はドライバ自体で実装されます。いくつかの他の機能は欠けています。

December 7, 2003 FreeBSD