11.3. コンソールポートと端末(または別のPC)間のケーブル

特に規定しているわけではないのですが、 RS-232 規格では、 間にモデムをはさまずに 2 台のコンピュータを相互接続できるようになっています。 これには ‘ヌルモデム’ ケーブルという特別なケーブルが必要になります。

ヌルモデムケーブル内の結線は、 必要となるハンドシェークと制御信号によって異なります。 製造業者が違えば、この点に関する見方も違います。 ですから、結線図が付属していないヌルモデムケーブルは買わないで下さい。

Linux では、フロー制御とモデム制御の各信号線が、 すべて正しく結線されている必要があります。 ヌルモデムケーブルの正しい結線は、 Figure 11-1 と、もう一つ Figure 11-2 に示してあります。

Linux は CTSRTS を使ってハンドシェークを行なって、 端末のオーバーランからコンピュータを保護し、 またコンピュータのオーバーランから端末を保護しています。 2 台のコンピュータをつなぐつもりなら、 CTS/RTS のハンドシェークを使わないと、 信頼性の高いファイル転送はできません。

Linux は端末が接続されていることを検知するために、 DSRDCD を使います。 そのあとログインを要求します。 もしセッションが確立しているときに DCD が落ちると、Linux はユーザーをログアウトさせます。

Linux は DTR を使って、 リンクを強制的にクリアします。 これはユーザーがログオフして、通信チャンネルを解放した後に行ないます。

ヌルモデムケーブルは、 Figure 11-1Figure 11-2 の、 どちらのデザインでも、Linux カーネルの要件に合います。 しかし、両方のコンピュータが遠隔地にある場合は、 Figure 11-2 の方が若干良いかもしれません。 というのは、 ヌルモデムケーブルのどちら側に欠陥があるのかを、 DSRDCD のステートの違いを使って決められるからです。

ヌルモデムの設計にはすべて、共通の欠陥があります。 ローカルコンピュータが "Data Terminal Ready" を落として、 ローカルモデムをリセットした後、 モデムと相互接続しているコンピュータが "Data Set Ready" を相当な時間落としてしまうのです。 しかしほとんどのソフトウェアは、モデムリンクとヌルモデムリンクの間の、 この若干の差異を調整するようになっています。

セキュリティ上重要な情報が無防備になり、 信頼が大きく損なわれてしまうのは、 Figure 11-3Figure 11-4、それに Figure 11-5 で示しているケーブルをはじめとして、 ヌルモデムケーブルの結線が間違っている場合です。

Figure 11-1. ステータスとハンドシェークを完全にしたヌルモデムケーブル

      Signal ground ---------------------- Signal ground

       Receive data ---------------------- Transmit data

      Transmit data ---------------------- Receive data

      Ready to send ---------------------- Clear to send

      Clear to send ---------------------- Ready to send

Data terminal ready -----------------+---- Data carrier detect
                                     |
                                     +---- Data set ready

Data carrier detect ----+----------------- Data terminal ready
                        |
     Data set ready ----+
    Ring indication -- 未使用

                                 未使用 -- Ring indication

Figure 11-2. ステータスとハンドシェークを完全にした別バージョンのヌルモデムケーブル

      Signal ground ---------------------- Signal ground

       Receive data ---------------------- Transmit data

      Transmit data ---------------------- Receive data

      Ready to send ---------------------- Clear to send

      Clear to send ---------------------- Ready to send

Data terminal ready ----+----------------- Data carrier detect
                        |
     Data set ready ----+

                                     +---- Data set ready
                                     |
Data carrier detect ----+------------+---- Data terminal ready

			  
    Ring indication -- 未使用

                                 未使用 -- Ring indication

あいにく、すべての Linux のブートローダーが、 Linux オペレーティングシステムで必要になる、 制御信号をサポートしているわけではありません。 この奇妙な事態のせいで、ブートローダーにコマンドを出す必要がある場合、 制御信号とハンドシェークを止めざるを得ないかもしれません。

そんな場合に、RS-232 のハンドシェイクをさせないようにする方法が二つあります。 ソフトウェアによる方法とハードウェアによる方法です。

モデムが付いている場合、現時点での最良のテクニックは、 AT コマンドを使ってモデムのソフトウェアを設定し、 制御信号とハンドシェークを無効にすることです。 こうすれば、ブートローダーの作者がシリアル接続のサポート内容を修正する際に、 ハンドシェークを修復できるようになります。

ヌルモデムケーブルに関しては、 使っている端末エミュレータソフトウェアで、 ハンドシェークを無効にするのが最良のやり方です。

ヌルモデムケーブルに関して最悪の場合は、 ハンドシェークと制御信号を改造しているケーブルが必要になります。 本番環境では、このようなケーブルは使わないようにして下さい。

Figure 11-3. ステータスとハンドシェークを改造したヌルモデムケーブル

      Signal ground ---------------------- Signal ground

       Receive data ---------------------- Transmit data

      Transmit data ---------------------- Receive data

Data terminal ready ---+              +--- Data terminal ready
                       |              |
      Clear to send ---+              +--- Clear to send
                       |              |
Data carrier detect ---+              +--- Data terminal ready
                       |              |
     Data set ready ---+              +--- Data set ready

      Ready to send -- 未使用

                                 未使用 -- Ready to send

    Ring indication -- 未使用

                                 未使用 -- Ring indication

おそらくシリアルコンソールを使って、 カーネルの oops メッセージを捕捉するためですが、 やっつけ仕事でも良いのなら、 いくつかの getty プログラムの設定で、 RS-232 のステータス信号を無視するようにもできます。 例えば、mgetty には、 mgetty.confdirect オプションがあります。この場合は、3 芯か 2 芯の RS-232 ヌルモデムケーブルがあればいいのです。

Figure 11-4. ステータスもハンドシェークもないヌルモデムケーブル

Signal ground ---------------------- Signal ground

 Receive data ---------------------- Transmit data

Transmit data ---------------------- Receive data

Figure 11-5. ステータスもハンドシェークもない片方向のヌルモデムケーブル

Signal ground ---------------------- Signal ground

Transmit data ---------------------- Receive data

本番環境では、こういったケーブルは使用しないで下さい