特に規定しているわけではないのですが、 RS-232 規格では、 間にモデムをはさまずに 2 台のコンピュータを相互接続できるようになっています。 これには ‘ヌルモデム’ ケーブルという特別なケーブルが必要になります。
ヌルモデムケーブル内の結線は、 必要となるハンドシェークと制御信号によって異なります。 製造業者が違えば、この点に関する見方も違います。 ですから、結線図が付属していないヌルモデムケーブルは買わないで下さい。
Linux では、フロー制御とモデム制御の各信号線が、 すべて正しく結線されている必要があります。 ヌルモデムケーブルの正しい結線は、 Figure 11-1 と、もう一つ Figure 11-2 に示してあります。
Linux は CTS と RTS を使ってハンドシェークを行なって、 端末のオーバーランからコンピュータを保護し、 またコンピュータのオーバーランから端末を保護しています。 2 台のコンピュータをつなぐつもりなら、 CTS/RTS のハンドシェークを使わないと、 信頼性の高いファイル転送はできません。
Linux は端末が接続されていることを検知するために、 DSR と DCD を使います。 そのあとログインを要求します。 もしセッションが確立しているときに DCD が落ちると、Linux はユーザーをログアウトさせます。
Linux は DTR を使って、 リンクを強制的にクリアします。 これはユーザーがログオフして、通信チャンネルを解放した後に行ないます。
ヌルモデムケーブルは、 Figure 11-1 と Figure 11-2 の、 どちらのデザインでも、Linux カーネルの要件に合います。 しかし、両方のコンピュータが遠隔地にある場合は、 Figure 11-2 の方が若干良いかもしれません。 というのは、 ヌルモデムケーブルのどちら側に欠陥があるのかを、 DSR と DCD のステートの違いを使って決められるからです。
ヌルモデムの設計にはすべて、共通の欠陥があります。 ローカルコンピュータが "Data Terminal Ready" を落として、 ローカルモデムをリセットした後、 モデムと相互接続しているコンピュータが "Data Set Ready" を相当な時間落としてしまうのです。 しかしほとんどのソフトウェアは、モデムリンクとヌルモデムリンクの間の、 この若干の差異を調整するようになっています。
セキュリティ上重要な情報が無防備になり、 信頼が大きく損なわれてしまうのは、 Figure 11-3 や Figure 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.conf に direct オプションがあります。この場合は、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 |
本番環境では、こういったケーブルは使用しないで下さい