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

名称

sio高速 (fast) 割り込み駆動非同期シリアル通信インタフェース

書式

標準 ISA ポートのために:
device sio

/boot/device.hints 中で:
hint.sio.0.at="isa"
hint.sio.0.port="0x3f8"
hint.sio.0.flags="0x10"
hint.sio.0.irq="4"
hint.sio.1.at="isa"
hint.sio.1.port="0x2f8"
hint.sio.1.flags="0x0"
hint.sio.1.irq="3"

AST 互換 4 ポートマルチポートカードのために:

options COM_MULTIPORT
device sio

/boot/device.hints 中で:
hint.sio.4.at="isa"
hint.sio.4.port="0x2a0"
hint.sio.4.flags="0x701"
hint.sio.5.at="isa"
hint.sio.5.port="0x2a8"
hint.sio.5.flags="0x701"
hint.sio.6.at="isa"
hint.sio.6.port="0x2b0"
hint.sio.6.flags="0x701"
hint.sio.7.at="isa"
hint.sio.7.port="0x2b8"
hint.sio.7.flags="0x701"
hint.sio.7.irq="12"

Boca Board 互換 8 ポートマルチポートカードのために:

options COM_MULTIPORT
device sio

/boot/device.hints 中で:
hint.sio.4.at="isa"
hint.sio.4.port="0x100"
hint.sio.4.flags="0xb05"
...
hint.sio.11.at="isa"
hint.sio.11.port="0x138"
hint.sio.11.flags="0xb05"
hint.sio.11.irq="12"

Netmos Nm9845 6 ポートマルチポートカードのために:

options COM_MULTIPORT
device sio

/boot/device.hints 中で:
hint.sio.4.at="isa"
hint.sio.4.port="0xb000"
hint.sio.4.flags="0x901"
hint.sio.5.at="isa"
hint.sio.5.port="0xb400"
hint.sio.5.flags="0x901"
hint.sio.6.at="isa"
hint.sio.6.port="0xb800"
hint.sio.6.flags="0x901"
hint.sio.7.at="isa"
hint.sio.7.port="0xbc00"
hint.sio.7.flags="0x901"
hint.sio.8.at="isa"
hint.sio.8.port="0xc000"
hint.sio.8.flags="0x901"
hint.sio.9.at="isa"
hint.sio.9.port="0xac00"
hint.sio.9.flags="0x901"
hint.sio.9.irq="12"

Hayes ESP カードのために:

options COM_ESP
device sio
...

単一ポート PCI と PCCARD カードのために:

device sio

これらのカードには /boot/device.hints 中の行は必要ありません。

割り込みを共有する 2 ポート PCI カードのために:

device sio
options COM_MULTIPORT

/boot/device.hints 中で:
hint.sio.2.flags="0x201"
hint.sio.3.flags="0x201"

flags の意味:

0x00001
共有 IRQ
0x00002
FIFO を無効にする
0x00004
AST/4 互換の IRQ コントロールレジスタなし
0x00008
失われた出力割り込みから早く復旧する
0x00010
デバイスは潜在的システムコンソールです
0x00020
デバイスは強制的にシステムコンソールになります
0x00040
デバイスは低レベル IO のために予約されます (例えば、リモートカーネルデバッグのため)
0x00080
リモートカーネルデバッグのためにこのポートを使用する
0x0 ??00
マスタポートのマイナ番号
0x10000
DCD の代わりの CTS 上の PPS タイムスタンプ
0x20000
デバイスは 16650A タイプ (拡張 FIFO) チップを使用すると仮定される

解説

sio ドライバは NS8250-、NS16450-、NS16550 と NS16550A ベースの EIA RS-232C (CCITT V.24) 通信インタフェースのサポートを行ないます。 NS8250 と NS16450 には、1 文字のバッファがあり、NS16550A は 16 文字の FIFO 入出力バッファがあります。

各行の入出力は次のボーレートの 1 つに設定することができます。 50, 75, 110, 134.5, 150, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600 または 115200。利用者のハードウェアによってはボーレートの選択を制限するかもしれません。

ドライバは `マルチポート' カードをサポートします。マルチポートカードはグループごとに 1 つの割り込み要求 (Interrupt Request (IRQ)) ラインを共有するポートの 1 つ以上のグループです。別のカード上で共有された IRQ はサポートされません。しばしば 4 つのポートは 1 つの IRQ を共有します。いくつかの 8 ポートカードは 4 つのポートの 2 つのグループがあって、したがって、2 つの IRQ を使用します。いくつかのカードは、最初の 2 つのシリアルポートに (DOS PC 標準のように) ポートごとに別々の IRQ があるようにできます。

いくつかのカードには、各グループのために IRQ 制御レジスタがあります。いくつかのカードはそのようなレジスタに関連する特別な初期化を必要とします。 AST/4 互換の IRQ 制御レジスタだけがサポートされます。いくつかのカードには、各グループのために IRQ ステータスレジスタがあります。ドライバは、そのようなレジスタを必要とせず、使用してもいません。 1 つのグループのための制御レジスタとステータスレジスタがあれば、それを働かせるためには、グループ内のポートに関するスクラッチレジスタ (レジスタ 7) にマップしなければなりません。そのようなポートは、 マスタ ポートと呼ばれています。

ドライバはコントローラベースの PCI モデムをサポートします。 3Com FaxModem PCI と Advantec 56k Voice Messaging PCI FaxModem はサポートされている唯一のカードです。コントローラベースではない WinModems、softmodems、hfc モデムと他のどのモデムもサポートされません。

flags キーワードは、16550A UART で FIFO を無効にするためにカーネル設定ファイルのそれぞれの device sio 行で使用できます (構文を参照)。 FIFO を無効にすることはめったに必要ないはずです。

flags キーワードは IRQ 共有グループの一部であるすべてのポートのために使用 しなければなりません 。 1 ビットは IRQ 共有を指定します。もう 1 ビットはポートが AST/4 互換の初期化を必要と しない かどうかを指定します。グループのためのマスタポートに対応するデバイスのマイナ番号は高位バイトのビットフィールドとしてコード化されます。同じマスタポートはグループ中のすべてのポートを指定しなければなりません。

他のポートではなく、マスタポートと IRQ 共有グループの一部でないポートのために irq を指定しなければなりません。

構文では、 flags 0x701 は、8 番目のポート (sio7) がマスタポートであり、ポートが共有された IRQ と AST/4 互換 IRQ 制御レジスタと共にマルチポートカード上にあることを意味します。

flags 0xb05 は 12 番目のポート (sio11) がマスタポートであり、ポートが共有された IRQ はマルチポートカード上にあり、特別の IRQ 制御レジスタがない、ことを意味します。

どのポートがマスタポートであるかはカードの種類に依存します。利用者のカードのハードウェア文書を参照してください。 IRQ ステータスレジスタは決して使用されず、 IRQ 制御レジスタは AST/4 互換カードだけで使用され、いくつかのカードは制御/ステータスレジスタをグループ中のすべてのポートにマップするので、グループ中のどんなポートも時々マスタポートになります。上位互換性のために IRQ ステータスレジスタを含むポートおよび一貫性のためにできるだけ上位のポートを選択してください。

sio ドライバによって制御されたシリアルポートは `着呼' と `発呼' の両方で使用することができます。ポートごとに、着呼デバイスと発呼デバイスがあります。発呼デバイスのマイナ番号は対応する着呼ポートのものより 128 大きくなっています。着呼デバイスは汎用です。それをオープンするプロセスは、通常キャリアと発呼デバイスが活動停止になるのを待ちます。発呼デバイスは、着呼デバイスでキャリアを待っているプロセスからポートを奪うために使用されます。それをオープンするプロセスはキャリアを待たず、発呼セッションと衝突しないように、着呼デバイスでキャリアを待っている任意のプロセスを深いスリープ状態にします。発呼デバイスは一般的なポート上で働き、待たないでポートをオープンする必要があると想定された操作プログラムで誤用されますが、そうすることはまったく愚かです。

sio ドライバは、着呼と発呼 "データ"デバイスのために初期状態とロック状態の制御もサポートします。データデバイスの termios 設定は最初にオープン時に初期状態デバイスに対応するものからコピーされ、以前のオープンからは継承されません。利用者のセットアップに適した初期の termios 状態をプログラムするためには初期状態のデバイス上で通常の方法で stty(1) を使用してください。

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

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

関連ファイル

/dev/ttyd?
着呼ポート用
/dev/ttyd?.init
/dev/ttyd?.lock
対応する着呼の初期状態とロック状態のデバイス

/dev/cuad?
発呼ポート用
/dev/cuad?.init
/dev/cuad?.lock
対応する発呼の初期状態とロック状態のデバイス

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

デバイス番号が集合 [0-9a-v] から作られているので、10 ポート以上をサポートすることができます。

診断

sio%d: silo overflow.
割り込みハンドラでの問題。
sio%d: interrupt-level buffer overflow.
ドライバのボトムハーフ (下半分) での問題。
sio%d: tty-level buffer overflow.
アプリケーションでの問題。与えられたモジュールが処理することができるより速く入力が到着し、いくつかは失われました。

歴史

sio ドライバは、 HP9000/300 dca(4) ドライバから派生しており、現在、開発中です。

バグ

遅いシステムで非常に高いボーレートである、どんなシステムでもあまりに多くのポートがある、または、crtsct を使用できないとき付加の高いシステムでデータの損失が起こるかもしれません。 NS16550A のものの使用はシステムの付加を減少させて、データの損失を避けることに役立ちます。

単純な NS16550 はお薦めできません、やめておいた方がよいでしょう。これらは機能しない FIFO ハードウェアがある初期の実装のチップです。

さまざまなシリアルポートの位置を定義する定数は DOS からの持ち越されたものです。示されているように、16 進アドレスは使用することができて、たぶん明確にするために代わりに使用したほうがよいでしょう。

AST/4 ではカードのディップスイッチを割り込み共有を使用するように設定するべき でない ことに注意してください。 AST/4 のような割り込み共有は、 複数の AST/4 カードが同じシステムに設置されているときだけ使用されます。 sio ドライバは 1 つの IRQ で 2 つ以上の AST/4 をサポートしません。

構文の例はベンダ特有すぎます。

August 30, 2006 FreeBSD