SETSERIAL(8) | System Manager's Manual | SETSERIAL(8) |
setserial - Linux シリアルポート情報の設定と取得
setserial [ -abqvVWz ] device [ parameter1 [ arg ] ] ...
setserial -g [ -abGv ] device1 ...
setserial は、シリアルポートに関する設定情報を設定または 表示するプログラムです。この情報には、指定されたシリアルポートが 使用している I/O ポートアドレス や IRQ の情報、およびブレークキーを 受信接続通知キー(Secure Attention Key)として使用するかどうかなどの情報 が含まれます。
通常のブート処理中には、COM ポートの 1 〜 4 だけが、以下に示す デフォルトの I/O ポートアドレスと IRQ の値を使って初期化されます。 setserial は、追加されたシリアルポートを初期化したり、1 〜 4 の COM ポートを 標準でない設定にするために使用されます。 setserial は通常、 /etc/rc.local から起動される rc.serial スクリプトに登録しておきます。
引数 device には、設定したり表示したいシリアルポートのデバイスファイルを 指定します。通常、以下のような形式で指定します: /dev/cua[0-3]
パラメータが全く指定されなかった場合、 setserial は、ポートの種類 (例えば、8250, 16450, 16550, 16550A など)、 ハードウェアの I/O ポートアドレス、IRQ 番号、ボーレート、 操作可能なフラグのいくつかの内容を表示します。
-g オプションが指定されると、setserial への引数は全て、表示対象となるデバイス として解釈され、複数のデバイスの設定内容を表示させることができます。
-g オプションを指定しないと、setserial への最初の引数が、設定したり表示 したりするデバイスとして解釈されます。また、その他の引数は、 シリアルデバイスに与えるパラメータとして解釈されます。
ほとんどの場合、シリアルポートのパラメータの設定にはスーパーユーザーの 特権が必要です。しかし、少しだけ一般ユーザが設定できるパラメータがあります。 それらはこの man ページ中で説明します。
setserial には、以下のオプションを指定することができます:
シリアルポートに対して、以下のパラメータを設定することができます。
すべての値は、先頭に "0x" があれば 16 進数とみなされます。
内蔵モデムの中には、「1k のバッファを持った 16550A」を備えていると 書かれたものがあります。これは嘘です。実際には 16550A 互換の UART ではなく、(受信時のオーバーランを防ぐために) 1k の受信バッファのついた 16450 互換 UART が付いているのです。 これらには 送信 FIFO がないので、この違いは重要です。 そういう訳で、これらは 16550A UART と互換性がなく、 自動設定処理では 16450 として認識します。もし uart オプションを使ってこれを変更してしまうと、ファイル送信中にデータを 取りこぼすことになるでしょう。 これらの UART は普通他の問題も抱えています。 大抵の場合 skip_test オプションも指定しなくてはいけません。
このパラメータは、例えばシリアルポートの 着信ラインをブロックされている getty 向けに用います。 用いると、getty は再びそのポートをオープンしてブロックする前に、 モデムをリセットできるようになります (そのモデムを発信デバイスとして使用したアプリケーションによって、 ポートの設定が変更されたかもしれませんから)。
注意して欲しいのですが、 setserial が行うのは、 指定されたシリアルポートの I/O ポートと IRQ とがどこそこで見つかるはずだ、 という情報を Linux カーネルに教えることだけなのです。 setserial は、実際のシリアルボードが指定された I/O ポートを使用するように、 ハードウェアを設定するわけではありません。 これを行なうには、ジャンパーの設定や、DIP スイッチの切替えによって シリアルボードを物理的に設定する必要があります。
本章では、自分のシリアルポートをどのように設定したいかを決定する 手助けになるポインターを提供します。
標準的な "MS-DOS" のポート割り付けは、次のようになっています:
/dev/ttyS0 (COM1), port 0x3f8, irq 4 /dev/ttyS1 (COM2), port 0x2f8, irq 3 /dev/ttyS2 (COM3), port 0x3e8, irq 4 /dev/ttyS3 (COM4), port 0x2e8, irq 3
AT/ISA バスアーキテクチャーの設計上の制限のため、通常 IRQ は 2 つあるいは それ以上のシリアルポートで共有することはできません。これを行なうと、 両方を同時に使おうとした時に一方あるいは両方のシリアルポートが不安定に なるでしょう。この制約は単一の IRQ を複数のシリアルポートで共有できる ように設計された特殊なマルチポートシリアルカードを使うことで克服する ことができます。Linux でサポートされているマルチポートシリアルカードには、 AST Fourport, Accent Async board, Usenet Serial II board, Bocaboard BB-1004, BB-1008, BB-2016 boards, HUB-6 serial board があります。
別の IRQ を用いるのも困難です (それらは大抵使用されていますから)。 以下の表は、標準的な "MS-DOS" で割り付けられている 使用可能な IRQ の一覧です:
IRQ 3: COM2 IRQ 4: COM1 IRQ 5: LPT2 IRQ 7: LPT1
コンピュータにパラレルポートが一つしかなければ、 IRQ 5 が良い選択であることにほとんどの人が気づくと思います。 その他の選択としては IRQ 2 (別名: IRQ 9) があります。ただしこの IRQ はネットワークカードで使われる ことがあります。また非常に稀ですが、VGA カードが垂直同期信号割り込みのために IRQ 2 を使うように設定されていることがあります。 自分の VGA カードがこのように設定されている場合は、 それを使用しないようにして見てください。 そうすれば、その IRQ を他のカードが使えるようになります。 Linux やその他のほとんどの OS では、 IRQ 2 を垂直同期信号割り込みのために使用する必要はありません。
他に使用できる IRQ が、3, 4, 7 だけですが、これらもおそらく 他のシリアルポートやパラレルポートで使用されているでしょう。 (もしお使いのシリアルカードに 16 bit カードエッジコネクタが付いていて、 より上位の割り込み番号をサポートしているなら、 IRQ 10, 11, 12, 15 も使用できるでしょう。)
AT 互換機では、IRQ 2 は IRQ 9 のように見えます。Linux でも、この流儀に したがって解釈します。
2 (9), 3, 4, 5, 7, 10, 11, 12, 15 以外の IRQ は 他のハードウェアに割り付けられており、普通変更できないので、 使うべきではありません。 「標準的な」割り付けは、次のようになっています。
IRQ 0 Timer channel 0 IRQ 1 Keyboard IRQ 2 Cascade for controller 2 IRQ 3 Serial port 2 IRQ 4 Serial port 1 IRQ 5 Parallel port 2 (Reserved in PS/2) IRQ 6 Floppy diskette IRQ 7 Parallel port 1 IRQ 8 Real-time clock IRQ 9 Redirected to IRQ2 IRQ 10 Reserved IRQ 11 Reserved IRQ 12 Reserved (Auxillary device in PS/2) IRQ 13 Math coprocessor IRQ 14 Hard disk controller IRQ 15 Reserved
複数のポートで一つの IRQ を共有するようなタイプの マルチポートシリアルボードには、 作業が必要な待ち状態のポートがあるかどうかを示すために、 ひとつまたは複数のポートを使うものがあります。 使っているマルチポートボードがこのようなポートをサポートしているなら、 これらのポートを使えば、 割り込みがロスト時でもシステムが固まらないようにできます。
これらのポートを設定するためには、 set_multiport パラメータを指定し、その後ろにマルチポートパラメータを指定します。 マルチポートパラメータは、チェックするべき port、 レジスタのどのビットが有効かを指定する mask、 するべき作業がなくなった時にレジスタの有効ビットが 一致しなければならない値を指定する match からなります。
このような port/mask/match の組は 4 つまで指定できます。 一つ目の組は port1, mask1, match1 で指定し、二つ目は port2, mask2, match2 で指定します。以下同様です。 マルチポートのチェックを無効にするためには、 port1 に 0 を指定してください。
現在のマルチポート設定を見るためには、コマンドラインから get_multiport パラメータを指定してください。
以下にいくつかの一般的なシリアルボードのためのマルチポート設定を示します。
AST FourPort port1 0x1BF mask1 0xf match1 0xf Boca BB-1004/8 port1 0x107 mask1 0xff match1 0 Boca BB-2016 port1 0x107 mask1 0xff match1 0 port2 0x147 mask2 0xff match2 0
setserial は Hayes ESP シリアルボードのポートを設定することもできます。
ESP ポートを設定するには以下のパラメータを使います。
警告: シリアルポートが使用する I/O ポートの設定を間違えると、 マシンがハングアップしてしまうかもしれません。
/etc/rc.local /etc/rc.serial
tty(4), ttys(4), kernel/chr_drv/serial.c
setserial のオリジナルバージョンは Rick Sladkey (jrs@world.std.com) によって書かれ、 Michael K. Johnson (johnsonm@stolaf.edu) によって 変更されました。
このバージョンは、1993 年 1 月 1 日 に Theodore Ts'o (tytso@mit.edu) によって最初から書き直されたものです。 バグおよび問題点は、彼のみの責任です。
January 2000 | Setserial 2.17 |