                       Linux シリアルコンソール

シリアルポートをコンソールとして使用するためには、その機能をサポート
するようにカーネルをコンパイルしなければなりません ――デフォルトでは、
この機能はカーネルに組み込まれません。PC スタイルのシリアルポートの
場合は、"Standard/generic (dumb) serial support" に続く設定オプションを
有効にします。シリアルサポートは、モジュールとしてではなく、常駐イメージ
としてカーネルに組み込む必要があります。

コンソール出力として複数のデバイスを指定することも可能です。コンソール
出力に使用するデバイスは、新しく用意されたカーネルコマンドラインオプ
ションを用いて選択することができます。

このオプションの形式は次のとおりです。

        console=device,options

        device:         tty0:  フォアグランド仮想コンソール
                        ttyX:  そのほかの仮想コンソール
                        ttySx: シリアルポート
                        lp0:   一番目のパラレルポート

        options:        ドライバによって異なります。シリアルポートの
                        場合は、そのポートのボーレート、パリティ、
                        ビット数を BBBBPN という形式で指定します。
                        BBBB はスピード、P はパリティ (n/o/e), N は
                        ビット数です。デフォルト値は 9600n8 です。
                        ボーレートの最大値は 115200 です。

カーネルコマンドラインには、複数の console= オプションを与えることが
できます。指定された全てのコンソールに対して出力がおこなわれます。
/dev/console をオープンした場合は、最後に指定されたデバイスが使用され
ます。たとえば、

        console=ttyS1,9600 console=tty0

というオプションを与えた場合、/dev/console をオープンすると、現在の
フォアグランド仮想コンソールを取得できます。また、カーネルのメッセージは、
VGA コンソールと二番目のシリアルポート (ttyS1, すなわち COM2) の両方に
9600 ボーで出力されます。

各デバイスタイプ (シリアル、ビデオ) につき、一つのコンソールしか指定
できないので、注意してください。

コンソールデバイスが指定されていない場合は、システムコンソールとして
使用することが可能なデバイスのうち、最初に見つかったものを使用します。
この場合、システムは最初に VGA カードを調べ、その次にシリアルポートを
調べます。ですので、システムに VGA カードが無いときは、一番目のシリアル
ポートが自動的にコンソールになります。

/dev/console を使用するためには、新しいデバイスを作成する必要があります。
現在のところ、公式の /dev/console はキャラクタデバイスで、メジャー番号が
5, マイナー番号が 1 です。

/dev/ttyS1 (COM2) をコンソールとして使う例を挙げます。必要に応じて、
サンプル中の値を変更してください。

1. /dev/console (実際のコンソール) と、/dev/tty0 (マスター仮想コン
   ソール) を作成します。

   cd /dev
   rm -f console tty0
   mknod -m 622 console c 5 1
   mknod -m 622 tty0 c 4 0

2. LILO は、シリアルデバイスからも入力を受けつけることができます。
   これは非常に便利な機能です。シリアルポートを使用するように
   LILO を設定するには、lilo.conf のグローバルセクションで次の
   ように指定します。

   serial  = 1,9600n8 (ttyS1, 9600 ボー、パリティ無し、8 ビット)

   新しく構築し直したカーネル用のフラグを修正します。これも、
   lilo.conf のカーネルセクションで指定します。

   append = "console=ttyS1,9600"

4. システムのブート後にログインできるよう、シリアルポート上で getty を
   走らせます。この設定をおこなうには、下記のような行を /etc/inittab に
   追加します (正確な構文は使用する getty により異なります) 。

   S1:23:respawn:/sbin/getty -L ttyS1 9600 vt100

5. init と /etc/ioctl.save

   Sysvinit は、stty 設定を /etc/ioctl.save に保存しています。シリアル
   コンソールを初めて使用する場合は、その前にこのファイルを削除して
   ください。なぜかというと、そうしないと、おそらく init はボーレートを
   38400 に設定してしまうからです (38400 というのは仮想コンソールの
   ボーレートです) 。

6. /dev/console と X

   仮想コンソールに対して何かしらの処理を行いたいプログラムは、通常
   /dev/console をオープンします。新規作成された /dev/console デバ
   イスが仮想コンソールではない場合、エラー終了してしまうプログラムも
   あります。そのようなプログラムは、VT インターフェースにアクセス
   しようとしていて、かつ /dev/tty0 ではなく /dev/console を使用して
   いるプログラムです。次のプログラムは、そのようなプログラムの例です。

   Xfree86, svgalib, gpm, SVGATextMode

   これらのプログラムの新しいバージョンでは、問題点は修正されるでしょう。

   console= オプションを指定せずに (または console=/dev/tty0 を
   与えて) ブートした場合、/dev/console は /dev/tty0 と同一に
   なります。この場合は、全てがうまく動作します。

7. 謝辞

   m68k, ppc, alpha にも対応するように 2.1.4x から 2.1.6x のパッチを
   移植してくれたことを、Geert Uytterhoeven <geert@linux-m68k.org> に
   感謝します。

Miquel van Smoorenburg <miquels@cistron.nl>, 2000 年 6 月 11 日

翻訳団体: JF プロジェクト <http://www.linux.or.jp/JF/>
  翻訳者: 川崎 貴彦 <takahiko@hakubi.co.jp>
  校正者: 野本 浩一 <hng@ps.ksky.ne.jp>
  校正者: 幸田 章宏 <coda@post.kek.jp>

