DGB(4) FreeBSD/i386 カーネルインタフェースマニュアル DGB(4)
名称
dgb − DigiBoard インテリジェントシリアルカードドライバ |
書式
options "NDGBPORTS=8" |
device dgb0 at isa? tty port 0x220 iomem 0xfc0000 iosiz ? flags 0x0 値は全部ただの例です。 NDGBPORTS オプションは、システムにインストールされている全てのカード上の ポート数の合計を定義します。数が定義されていない場合は計算によって求めら れます: |
デフォルトの NDGBPORTS = 記述された DigiBoard カードの数 * 16 もしこ の数字が実際のポート数よりも小さかった場合、システムは先頭から NDGBPORTS 番目のポートまでしか使うことができません。もしこの数字が実際のポート数よ りも大きかった場合、全てのポートを使用できますが、若干のメモリが無駄にな ります。 flags の意味: デバイス番号: |
解説
dgb ドライバは EIA RS-232C (CCITT V.24) 標準に準拠し、非同期インタフェー スを備えた DigiBoard PC/Xe シリーズと PC/Xi シリーズのインテリジェントシ リアルマルチポートカードをサポートします。 各ラインの入出力は以下のボーレートのどれか一つに設定できます; 50, 75, 110, 134.5, 150, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 更に新しいカードのバージョンでは 115200。 ドライバは割り込みを使わず、‘‘ポーリングベース’’で動きます。このことはド ライバが DigiBoard カードの生成する割り込みでなく、クロック割り込みを使用 することを意味しており、カードの状態を 1 秒あたり 25 回チェックします。こ の方法は実用的です。なぜなら、 DigiBoard カードは大きな入出力バッファ ( ポートあたり 1 KByte 以上) と、注意の必要なポートを効率良く見つけられる ハードウェアを持っているからです。このポリシを用いることでみられる問題点 は、SLIP や PPP のレスポンスが遅くなるということだけです。 カーネル設定ファイルの各行には sio(4) ドライバのようにポートを記述するの ではなく、カードを記述します。 flags キーワードをカーネル設定ファイルの各 device dgb 行で用いると、イン タフェースの結線を変更したり、PC/Xe カードで 8 K メモリウィンドウ互換モー ド (64K メモリウィンドウ) を使用したりできます。8K メモリウィンドウを使用 すると、入出力バッファが小さくなるというわけではないことに注意してくださ い。ただ、全てのバッファが同じメモリアドレスにマップされ、必要に応じて切 り替わるというだけのことです。 port 値はカードのジャンパで設定された port 値と同じでなければなりません。 PC/Xi カードでは iomem 値についても同じことがいえます。この値は、カードの ジャンパで設定されたメモリアドレスと同じでなければなりません。 PC/Xe カー ドではジャンパをこの目的で使う必要はありません。実のところ、そのような機 能を持ったジャンパは存在しません。カーネル設定ファイルの iomem に使用した いアドレスを書くだけで良いのです。カードは、そのアドレスを使うようにプロ グラムされます。 インストールされた DigiBoard はみな、同じメモリアドレス範囲 (他のカードの ためのメモリや物理メモリを除く) を使用します。大容量メモリ (256K や 512K またおそらく 128K でも) を持った DigiBoard は最初の 1 メガバイト以外のメ モリアドレスにマップされなければなりません。コンピュータが 15 メガバイト 以上のメモリを持っていた場合、最初の 1 メガバイトのアドレス空間以外に は、DigiBoard をマップできる空間は存在しません。この場合コンピュータの総 メモリ量を減らす必要があるかもしれません。しかし多くのマシンではより良い 方法を提供しています。そうしたマシンでは、BIOS 設定を用いて、16 番目のメ ガバイト (アドレス 0xF00000 - 0xFFFFFF) を ‘‘無効’’ にすることができま す。この設定により、DigiBoard のアドレス空間をこの ‘‘穴’’ に設定すること ができるようになります。 dgb ドライバによって制御されるシリアルポートは ‘着呼’ と ‘発呼’ のどちら にでも使用できます。それぞれのポートに対し、着呼デバイスと発呼デバイスが 存在します。発呼デバイスのマイナ番号には、対応する着呼ポートのものより 128 だけ大きい番号がついています。一般的な用途には、着呼デバイスを使いま す。着呼デバイスをオープン途中のプロセスは、通常はキャリアを待ち、また発 呼デバイスが活動状態でなくなるまで待ちます。発呼デバイスを使用すること で、着呼デバイスでキャリア待ちしているプロセスの隙をついてポートを使用す ることができます。発呼デバイスをオープンしようとするプロセスはキャリア待 ちをしません。かつ、発呼デバイスをオープンしようとするプロセスは、着呼デ バイス上でキャリア待ちしている他のプロセスをより深いスリープ状態にしま す。これにより、発呼セッションで両プロセスが衝突することはなくなります。 発呼デバイスを一般的なポートと同じだがキャリア待ちをせずにオープンする必 要がある、と考えて操作するプログラムがありますが、そのような発呼デバイス の使い方は誤用であり、全く馬鹿げています。 また dgb ドライバは、発呼と着呼それぞれのデータデバイスに対する初期状態制 御デバイスとロック状態制御デバイスをサポートします。初期状態デバイスのマ イナ番号には、対応するデータデバイスより 32 だけ大きい番号がついていま す。ロック状態デバイスのマイナ番号には、対応するデータデバイスより 64 だ け大きい番号がついています。データデバイスにおける termios の設定は、初め てオープンする際に対応する初期状態デバイスより複製され、直前にオープンさ れていたときの状態からは継承されません。初期状態デバイスに対して普段通り の方法で stty(1) を使用することで、あなたの望む設定に適した初期 termios 状態をプログラムできます。 ロック termios の状態は、データデバイスの termios 状態の変更を不可能にす るフラグとして振舞います。例えば CRTSCTS のようなフラグ変数をロックするに は、ロック状態デバイスで stty crtscts を実行します。速度や特殊文字の設定 をロックするには、ロック状態デバイス上の対応する値を 0 でない値に設定する とよいです。 外部デバイスを正しく結線して正しいプログラムで通信している限りは、ほぼど のような初期状態であっても、ロックなしで動作します。そうでない場合は、デ フォルトの初期状態を変更し、その状態にロックを掛けることで、うまく動くよ うになることもあるかもしれません。特に、(POSIX) 標準でないフラグの初期状 態は、接続されたデバイスに合うように設定すべきであり、バグのあるプログラ ムがこれらのフラグを変更しないように、ロックする必要があるかもしれませ ん。例えば、常時 RTS/CTS ハンドシェイクをサポートするデバイスで は、CRTSCTS はオンの状態でロックしておく必要があります。また、全くサポー トしないデバイスに対しては、オフの状態でロックしておくべきです。 CLOCAL は、キャリアをサポートしないデバイスに対してはオンの状態でロックするべき です。 HUPCL は、何らかの理由で切断したくない場合にはオフの状態でロックす るべきです。一般的に、何かが間違った状態でロックすると、とても悪いことが 起こります。また、複数の設定をサポートするデバイスに対してはロックを行な うべきではありません。着呼ポートでの CLOCAL フラグは、login のある種のセ キュリティホールを避けるためにオフの状態にロックしておくべきですが、着呼 ポートを何か他の用途に使う場合には、この設定を getty で行なうべきです。 |
関連ファイル
/dev/ttyD??
着呼ポート /dev/cuaD?? /etc/rc.serial これらのデバイス名の 1 つめの疑問符はカード番号 (0 から 65535 まで 10 進 数。0 および 65535 を含みます) の略です。 2 つめの疑問符はポート番号 ([0-9a-v]の間の文字) の略です。 診断 |
ソースファイル dgb.c の先頭にある DEBUG を定義することにより、拡張された 診断を得ることができます。 dgbX: warning: address N truncated to M PC/Xe 用の 8K ウィンドウのメモリ アドレスが正しく配置されていないか (8K 境界に配置されるべきです)、最初の 1 メガバイトの範囲外です。 dgbX: 1st reset failed カードの I/O ポートへのアクセスに問題があります。 おそらくカーネル設定ファイルにおいて、間違った port 値が指定されていま す。 dgbX: 2nd reset failed ハードウェアに問題があります。 dgbX: N[st,nd,rd,th] memory test failed カードのメモリへのアクセスに問題 があります。おそらくカーネル設定ファイルにおいて、間違った iomem 値が指定 されています。 dgbX: BIOS start failed オンボード BIOS の起動に問題があります。おそらく DigiBoard のメモリアドレスが、何か他のデバイスあるいは RAM と重なっていま す。 dgbX: BIOS download failed オンボード BIOS に問題があります。おそらく DigiBoard のメモリアドレスが、何か他のデバイスあるいは RAM と重なっていま す。 dgbX: FEP code download failed フロントエンドプロセッサのマイクロ OS の ダウンロードに問題があります。おそらく DigiBoard のメモリアドレスが、何か 他のデバイスあるいは RAM と重なっています。 dgbX: FEP/OS start failed フロントエンドプロセッサのマイクロ OS の起動に 問題があります。おそらく DigiBoard のメモリアドレスが、何か他のデバイスあ るいは RAM と重なっています。 dgbX: too many ports この DigiBoard は、自分が 32 より多くのポートを持っ ていると報告してきました。おそらくハードウェアの問題があるか、 DigiBoard のメモリアドレスが、何か他のデバイスあるいは RAM と重なっています。 dgbX: only N ports are usable NDGBPORTS パラメータが小さすぎるため、この カードには N ポート分の空間しか割り当てられません。 dgbX: port Y is broken オンボードの診断プログラムが、指定されたポートに ハードウェア上の問題があると報告しました。 dgbX: polling of disabled board stopped ドライバのポーリングロジックに内 部的な問題が生じました。 dgbX: event queue’s head or tail is wrong! ドライバかハードウェアに内部 的な問題が生じました。 dgbX: port Y: got event on nonexisting port 物理的に存在するポートの状態 に何らかの変化がありましたが、設定が正しくないため使用できません。 dgbX: port Y: event N mstat M lstat K ドライバはカードから得体の知れない イベントを受けとりました。おそらくイベントリストが拡張された新しいカード を使用しているか、それ以外の何かハードウェア上の問題です。 dgbX: port Y: overrun 入力バッファが一杯になりました。ドライバのポーリン グロジックに問題があります。 dgbX: port Y: FEP command on disabled port ドライバに内部的な問題が生じ ました。 dgbX: port Y: timeout on FEP command ハードウェアに問題があります。 |
関連項目
stty(1), termios(4), tty(4), MAKEDEV(8), comcontrol(8) |
歴史
dgb ドライバは sio(4) ドライバと Linux の DigiBoard ドライバに由来してお り、現在開発継続中です。 |
バグ
BREAK 送信の実装は完全ではありません。どのような場合でも 1/4 秒の固定長で BREAK を送信します。 select(2) の実装にバグがありました。この問題は現在は修正されていますが、 まだ広範囲なテストはされていません。 ditty コマンドはありません。その機能の多く (結線交換、 115200 ボーへの速 度向上など) はドライバ自身に実装されています。それ以外のいくつかの機能は 欠けています。 FreeBSD Oct 13, 1995 FreeBSD |