Provided by: manpages-ja_0.5.0.0.20210215+dfsg-1_all
名前
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 には、以下のオプションを指定することができます: -a シリアルデバイスの設定内容を表示するとき、すべての情報を表示します。 -b シリアルデバイスの設定内容を表示するとき、 ブート時に /etc/rc スクリプトで使用する 時に適した形で デバイス情報のサマリを表示します。 -G シリアルポートの設定情報を、setserial のコマンドラインオプションの形で 表示します。 -q setserial の出力を抑制します。 -v 詳細モード。 いくつかのステータスが追加出力されます。 -V setserial のバージョンを出力して終了します。 -W 割り込みの初期化を荒っぽく行い、終了します。 このオプションはバージョン 2.1 以降の Linux カーネルに対しては無効です。 -z シリアルフラグをセットする前に全てのフラグをゼロクリアします。 これは -G オプション を使ったシリアルフラグの自動保存と関係があります。
パラメータ
シリアルポートに対して、以下のパラメータを設定することができます。 すべての値は、先頭に "0x" があれば 16 進数とみなされます。 port port_number port パラメータは、先に述べたように I/O ポート番号の設定を行ないます。 irq irq_number irq パラメータは、先に述べたようにハードウェアの IRQ の設定を行ないます。 uart uart_type このオプションは、シリアルポートの UART の種類を設定するために使用されます。 指定で きるタイプは、 none, 8250, 16450, 16550, 16550A, 16650, 16650V2, 16654, 16750, 16850, 16950, 16954 です。 UART タイプ none は、ポートを使用できないようにします。 内蔵モデムの中には、「1k のバッファを持った 16550A」を備えていると 書かれたものがあ ります。これは嘘です。実際には 16550A 互換の UART ではなく、(受信時のオーバーランを 防ぐために) 1k の受信バッファのついた 16450 互換 UART が付いているのです。 これらに は 送信 FIFO がないので、この違いは重要です。 そういう訳で、これらは 16550A UART と 互換性がなく、 自動設定処理では 16450 として認識します。もし uart オプションを使っ てこれを変更してしまうと、ファイル送信中にデータを 取りこぼすことになるでしょう。 これらの UART は普通他の問題も抱えています。 大抵の場合 skip_test オプションも指定 しなくてはいけません。 autoconfig このパラメータが設定されると、 setserial はカーネルにシリアルポートを自動的に設定す るよう要求します。 I/O ポートは、正しく設定しなければいけません。 その後カーネルは UART の種類を決定し、 auto_irq オプションが設定されていれば、IRQ を自動的に設定しよ うとします。 autoconfig オプションは、 port、 auto_irq、 skip_test オプションの後に 指定すべきです。 auto_irq 自動設定を行なう際、IRQ を自動決定しようとします。 この機能は、いつも正しい結果をも たらすとは限りません。 ハードウェアの設定によっては、Linux のカーネルはだまされてし まいます。 一般に auto_irq の機能を使うよりも、 irq パラメータを使って、使用される IRQ を明示的に指定した方が信頼性があります。 ^auto_irq 自動設定の際、IRQ の自動決定を行ないません。 skip_test 自動設定の際、UART のテストをスキップします。 内蔵モデムの中には、National Semiconductor 互換の UART を持っておらず、 代わりに安い偽物を持っているものがありま す。これらの偽物 UART では、 カーネルが設定する前に指定されたアドレスに本当に UART があることを確認するために使用する、ループバック検出モードを 完全にはサポートしてい ません。 このような内蔵モデムでは、 このオプションを指定して Linux が正しく UART を 初期化できるようにしなければなりません。 ^skip_test 自動設定の際、UART のテストをスキップしません。 baud_base baud_base 基本となるボーレートを設定します。 ボーレートは、クロック周波数を 16 で割った値で す。 通常この値は 115,200 に設定されています。これは UART がサポートできる最も速い ボーレートです。 spd_hi アプリケーションが 38.4 Kbps を要求した場合に、57.6 Kbps を使用します。 このオプ ションは一般ユーザーでも指定できます。 spd_vhi アプリケーションが 38.4 Kbps を要求した場合に、115 Kbps を使用します。 このオプショ ンは一般ユーザーでも指定できます。 spd_shi アプリケーションが 38.4 Kbps を要求した場合に、230 Kbps を使用します。 このオプショ ンは一般ユーザーでも指定できます。 spd_warp アプリケーションが 38.4 Kbps を要求した場合に、460 Kbps を使用します。 このオプショ ンは一般ユーザーでも指定できます。 spd_cust アプリケーションが 38.4 Kbps を要求した場合に、スピードを設定するため に特別な除数 を使用します。この場合のボーレートは、 baud_base を 除数 で割った値になります。 こ のオプションは一般ユーザーでも指定できます。 spd_normal アプリケーションが 38.4 Kbps を要求した場合に、38.4 Kbps を使用します。 このオプ ションは一般ユーザーでも指定できます。 divisor divisor 除数を設定します。この除数は、 spd_cust オプションが指定されていて、アプリケーショ ンがシリアルポートに 38.4 Kbps を 設定した場合に使用されます。 このオプションは一般 ユーザーでも指定できます。 sak ブレークキーを受信接続通知キー(Secure Attention Key)に指定します。 ^sak 受信接続通知キー(Secure Attention Key)を無効にします。 fourport ポートを AST Fourport カードとして設定します。 ^fourport AST Forport の設定を行ないません。 close_delay delay 発信デバイスがクローズされたあと、ブロックされた着信デバイスの DTR が 再び立ち上が るまでの間、シリアルライン上の DTR を LOW に維持しておく 時間を指定します。この値の 単位は、10ms です。 デフォルトでは、この値は 50、 すなわち 500 ms (0.5 秒)です。 closing_wait delay シリアルポートを閉じようとするとき、 ポートへデータを送信するためにカーネルが待つ時 間を指定します。 この値の単位は 10ms です。 "none" が指定されると、待ち時間は発生し ません。 "infinite" が指定されると、バッファリングされたデータが送信し終わるまで 無 限に待ち続けます。 デフォルト設定は 3000 (30 秒待つ) です。 通常これは、ほとんどの デバイスに対して適切な値です。 もし長過ぎる待ち時間を設定すると、 未接続のシリアル ポートに送信待ちのデータがある状態でクローズされた場合に シリアルポートが長い間ハン グアップしてしまうかもしれません。 もし短すぎる待ち時間を設定すると、 送信するべき データを送信しきれない可能性があります。 もしデバイスがプロッタプリンタのように極め て低速な場合は、 closing_wait の値を大きくする必要があるかもしれません。 session_lockout 複数のセッションで同一の発信ポート(/dev/cuaXX)を使用できないようにします。 つま り、あるプロセスが一旦ポートをオープンすると、そのプロセスが ポートをクローズするま で、別のセッション ID を持つプロセスは、 そのポートをオープンできなくなります。 ^session_lockout 複数のセッションで同一の発信ポート(/dev/cuaXX)を使用できるようにします。 pgrp_lockout 複数のプロセスグループで同一の発信ポート(/dev/cuaXX)を使用できないようにします。 つ まり、あるプロセスが一旦ポートをオープンすると、 そのプロセスがポートをクローズする まで、 別のプロセスグループのプロセスはそのポートをオープンできなくなります。 ^pgrp_lockout 複数のプロセスグループで同一の発信ポート(/dev/cuaXX)を使用できるようにします。 hup_notify 別のプロセスによる発信ラインの使用が終了した(ポートをクローズしたか、 シリアルライ ンがハングアップした)ことを、着信ラインをオープンしようと しているプロセスに EAGAIN を返すことで通知します。 このパラメータは、例えばシリアルポートの 着信ラインをブロックされている getty 向け に用います。 用いると、getty は再びそのポートをオープンしてブロックする前に、 モデ ムをリセットできるようになります (そのモデムを発信デバイスとして使用したアプリケー ションによって、 ポートの設定が変更されたかもしれませんから)。 ^hup_notify 発信デバイスがハングアップしたことを、着信回線をオープンしようと しているプロセスに 通知しません。 split_termios 発信デバイスによって使用される termios の設定と、 着信デバイスによって使用される termios の設定とを別々に扱います。 ^split_termios 発信ポートと着信ポートの両方で同じ termios 構造体を使用します。 これはデフォルトの 設定です。 callout_nohup 指定されたシリアルポートが発信デバイスとしてオープンされた場合、 キャリア検出(CD)信 号が落ちても tty をハングアップしません。 ^callout_nohup シリアルポートが発信デバイスとしてオープンされているとき、 tty をハングアップする処 理をスキップしません。 もちろん、ハングアップをさせるには termios の HUPCL フラグが 有効になっていなければなりません。 low_latency シリアルデバイスの受信遅延を最小にします。ただし CPU の利用度は増加します (通常は オーバーヘッドを最小限にするために、 受信キャラクタを扱う前に 5-10ms の遅延がありま す)。 これはデフォルトではオフですが、リアルタイム処理をするアプリケーションの中に は このオプションが有効なものがあるかもしれません。 ^low_latency CPU がシリアルキャラクタを処理する効率を最適化します。 ただしキャラクタを処理する前 に 5-10ms の遅延が発生します。 これがデフォルトです。
シリアルポートの設定上の注意事項
注意して欲しいのですが、 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
Hayes ESP 設定
setserial は Hayes ESP シリアルボードのポートを設定することもできます。 ESP ポートを設定するには以下のパラメータを使います。 rx_trigger 受信 FIFO のトリガレベル (バイト単位) です。 大きい値を設定すると割り込み回数が減 り、性能が向上します。 しかし、値を大きくしすぎるとデータを失うことになるかもしれま せん。 有効な値は 1 から 1023 です。 tx_trigger 送信 FIFO のトリガレベル (バイト単位) です。 大きい値を設定すると割り込み回数が減 り、性能が向上します。 しかし、値を大きくしすぎると送信効率を落とすことになるかもし れません。 有効な値は 1 から 1023 です。 flow_off ESP ポートが相手の送信側に対して「フローオフ」を伝える (これ以上データを送信しない ように伝える)レベル(バイト単位)です。 有効な値は 1 から 1023 です。 この値は受信ト リガレベルとフローオンレベルより大きい値にするべきです。 flow_on ESP ポートが相手の送信側に対してフローオフを伝えた後に、 「フローオン」を伝える (こ れ以上データ送信を再開するように伝える)レベル(バイト単位)です。 有効な値は 1 から 1023 です。 この値はフローオフレベルより小さく、受信トリガレベルより大きい値にする べきです。 rx_timeout 最後のキャラクタを受信してから、割り込みを発生させるまでに ESP ポートが待つ時間で す。 有効な値は 0 から 255 です。 値が大きすぎると遅延が大きくなり、 値が小さすぎる と不必要な割り込みが発生することになります。
警告
警告: シリアルポートが使用する I/O ポートの設定を間違えると、 マシンがハングアップしてしま うかもしれません。
ファイル
/etc/rc.local /etc/rc.serial
SEE ALSO
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) によって最初から書き 直されたものです。 バグおよび問題点は、彼のみの責任です。