次のページ 前のページ 目次へ

10. DOS と LINUX の間で PLIP 接続する。

このミニハウツーを最初にリリースした後に、Linux と DOS (または Windows)の 間で接続する方法について、たくさんの方から情報をいただきました。そこで、 一般的な興味からこの章を付け加えることにしました。みなさんの役にたつこと を願っています。

この章は、James McDuffie <mcduffie@scsn.net> の Linux Gazzete に 載っていたものをもとにしています。 このドキュメントは、Windows と Trumpet Winsock を使って、Linux と DOS 間 での PLIP 接続をおこなうための基本的なインストール方法から、X-Window の プログラムをWindows 上で実行するための方法まで、広い範囲をカバーしています。

その次の章は、James Vahn <jvahn@short.circuit.com> が送ってくれた追補 です。接続のセットアップに関する詳しい説明と、いろいろな問題を解決する方法に ついて述べられています。

ここでは、すでに Linux 側でうまく PLIP 機能が設定されており、正しいケーブル が接続されていることを前提にしています。そうでない場合には、前の章に 戻って下さい。

さて、DOS 側ではまず、パケットドライバが必要です。以下のところにあると 思います:

ftp://ftp.crynwr.com/drivers/plip.zip 

このプログラムは DOS の上で動作し、イーサネットパケットドライバとして ふるまいます。Windows との間で PLIP を使いたい場合には、Trumpet Winsock も必要です。これは、TCP/IP インターフェースとして機能します。または、 DOS 上の TCP/IP ソフトウエアを使うこともできるでしょう。 (訳注: これらは Win95 では不要のはず)

さて、Linux 側に戻ります。DOS マシンのアドレスを /etc/hosts に 登録します。DOS マシンが登録済みの IP アドレスを持っていない 場合には、適切なアドレスを選びます。(3章で述べた IP アドレスについての 注意を読み返してください。)

Linux マシンを linux、DOS マシンを dos というホスト名だとします。 次のようなコマンドを実行します: (Linux側で)

ifconfig plip1 linux pointopoint dos arp up
route add dos

もちろん、linux をブートするたびにこれらのコマンドを自動的に実行させる には、/etc/rc.d/rc.inet1 に以下のような行を付け加えます:

/sbin/ifconfig plip1 linux pointopoint dos arp up
/sbin/route add dos

これらのコマンドによって、インターフェースをセットアップし、 (ネットワーク)経路を付け加えているわけです。もちろん、二番目の(secondary) パラレルポートを使っているのならば、(plip1 の代わりに)plip2 として くださいね。

DOS/Windows マシンの方に戻って AUTOEXEC.BAT に次の行を付け加えます:

c:\plip\plip.com 0x60
c:\tcpip\winsock\winpkt.com 0x60

ここでは plip.com (パケットドライバ)は c:\plip に、winpkt.com は c:\tcpip にインストールされているものと仮定しています。それ以外の場合には正しい パスを記述して下さい。

上のコマンドでは、plip.com はパケットベクター 0x60 を使い、その後に 同じベクターを使って winpkt.com をロードするように指定しています。 もし、PLIP ケーブルが、lpt1 以外のポートに接続されている場合には、 plip.com のパラメータとして IRQ 番号と I/O アドレスを指定する必要が あります。 また、Windows がパケットベクターを使用可能とするために、winpkt.com を走らせてる必要があります。(上に記述したとおり)

この先は、実際のTrumpet Winsock の設定になります。

必要な設定は、SLIP と PPP のチェックを外すことと、Packet Vector と いう入力欄に 60 と入力することです。 次にこのマシンに割り当てた IP アドレスを指定します。 デフォールトゲートウエイには、Linux マシンの IP アドレスを指定します。

ネームサーバには、あなたのマシンの IP アドレスか、インターネットに接続する つもりがあるのならば、あなたの使っている ISP (プロバイダ)のネームサーバの IP アドレスを指定します。(これについては後でもっと詳しく述べます。) セットアップを終了して、 Winsock を再起動します。これでうまくいくはず! winsock をスタートアップグループに追加して、これで全部自動的にセットアップ されるはずです!

Linux マシンを通じてインターネットに接続する場合には、 IP マスカレード機能 をインストールする必要があります。これについての情報は、NET-2-HOWTO を参照 して下さい。 この機能によって、 Linux マシンの IP アドレスを Windows マシンの IP アドレス として(インターネット側から見て)みせかけることが簡単にできます。

また、X-Window のプログラムを Windows で走らせることのできるプログラムを 見つけました! 以下の場所にあります:

http://www.tucows.com/ 

説明にしたがってセットアップをおこない、Windows マシンから telnet で (Linux マシンに)ログインし、DISPLAY 変数を設定(例えば DISPLAY=duncan:0.0) して、後は必要な(X client) プログラムを走らせるだけです。 xv を Windows の上で走らせるなんて、これ以上にかっこいいことはないでしょう! これがあなたの役に立ちますように!

#####

(訳注: 訳者もこれを探してみました。www.tucows.com は、シェアウエア等の コレクションサイト (infomagic 的なもの) のようで、ここで触れられている X-server エミュレータ on Windows のオリジナル URL は,

http://www.starnet.com/Products/xwin.html

のようです。 ここからは、評価用のデモ版がダウンロードできます。

... ちょっと翻訳からは脱線してしまいますが ... さっそく Win95版をダウンロードして、使用してみましたが、なかなか快適 に動作します。 Xコンソーシアムの X11 リリースから日本語関係のフォント(pcf)をコピーして fonts.dir を作り直してやると、(あたり前ですが) kterm などでちゃんと 日本語も表示できます。 私の本業はゲートアレー設計ですが、電気系の CAD ソフトである、 Verilog の波形表示や、DesignCompilerのウインドウもちゃんと動作します。 (細かい部分ではいくつか動作の変なところもありますが。) ただし、訳者がテストしたのは、イーサネット経由の接続です。 PLIP 接続の上で X-server 機能を走らせる、というのはまだ試していません。)

#####

10.1 DOS と LINUX を PLIP 接続した経験談

注意: 私はこのドキュメントを James Vahn <jvahn@short.circuit.com> から 受取り、そのまま変更せずにここに載せています。ですから、この章に対する 質問は、私よりも彼の方がうまく答えることができるはずです。 というわけで、私にメイルするよりも前に、彼に質問してみてください。 彼の経験は、フロッピーベースの DOS マシンと Linux を接続したというもの ですので、これは一般的な問題に対する完璧な解決方法の一例であると言えます。

最終更新日 11/07/1996 (日/月/年 形式)
<jvahn@short.circuit.com> からの追補

私は、フロッピーベースの DOSマシンから PLIP を使って Linux マシンの二番目の プリンタポートにネットワーク接続しています。Linux の一番目のプリンタポート にはプリンタが接続されています。両方のポートとも常時接続で、DOS ボックス から Linux に telnet できます。以下は、このような環境を構築したときの 記録です。

ブート時にカーネルがプリンタポートを認識する際、除外されていない パラレルポートはすべてプリンタポートとして認識されてしまいます。 つまり、PLIP はどのポートも認識できません。 これを防ぐひとつの方法は、必要に応じてドライバをモジュールとして ロードすることです...

<gniibe@mri.co.jp> によれば:

========================

私は、PLIP/LP をカーネルモジュールとして使うことを勧めています。なぜなら:

PLIP と LP をカーネルモジュールにすると、どのポートを PLIP が使い、 どのポートを LP が使うのかを指定することができます。以下はその例:

# insmod lp.o io=0x378
# insmod plip.o io=0x278 irq=2

2つのパラレルポートを両方とも PLIP に使いたければ:

# insmod plip.o io=0x278,0x3bc irq=2,5

なんて指定も可能です。この例では、

plip0 は I/O アドレス 0x278, IRQ 2
plip0 は I/O アドレス 0x3bc, IRQ 5

を使うという指定です。

=========================

モジュールを使うのが正道という気はしますが、以下ではモジュールを使わずに、 カーネルにパッチをあてて、PLIP とプリンタをそれぞれ別のポートで使う方法を 示します。 もしあなたがモジュールという概念に不案内の場合には、この方が簡単だと 感じるかもしれません。

カーネルソースツリーの中の、2つのファイルを変更する必要があります。 私の場合には カーネル 1.2.13 ですが、私のシステムにうまく合わせるためには .../linux/drivers/net/Space.c を少々変更する必要がありました。 PLIP 定義に関する、205行目あたりを見て、あなたのシステムの コンフィグレーションとうまくあっているかどうかを確認し、どれがどの ドライバに相当するのか(plip0, plip1, plip2)に注意して下さい。 私の場合には、ポート 0x278 は IRQ 5 (カードのジャンパー設定がそうなって いるのです。)を使っているのですが、Space.c の中では、IRQ 2 と定義されて いましたので、マシンのふたをあけてジャンパー設定を変える代わりに、 この部分を変更しました。 他の方法としては、ifconfig を実行する時に IRQ を指定するという方法も ありますが、この方法ではブート時にカーネルが wrong IRQ for PLIP という ようなメッセージを出力されるので、ちょっと嫌ですね。 変更は簡単(一文字だけ)です。

次は、もう少し難しい変更ですが-- .../drivers/char/lp.c の 38行目あたりに次のような部分があるはずです:

struct lp_struct lp_table[] = {
    { 0x3bc, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, },
    { 0x378, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, 
/*  { 0x278, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, 
 * 0x278 reserved for plip1
 *
 * }; 
 * #define LP_NO 3 
 */
}; 
#define LP_NO 2 

ポートを一つコメントアウトしたことに注意して下さい。この結果、定義されている ポートは2つだけとなります。また、おそらく 0x3bc のポートは PLIP には使えない でしょう。この IRQ 信号は普通このポートには使えません。(昔のモノクローム ディスプレイアダプターでも同様の問題があったように。)

これらのファイルに変更を加える前にちゃんとバックアップはとりましたよね? さて、プリンター、ネット、ダミー、plip 機能をイネーブルして新しいカーネルを 作る番です。

システムを設定します。以下は私の /etc/rc.d/rc.inet1 ファイルの例です:

#!/bin/bash
#
/sbin/ifconfig lo 127.0.0.1
/sbin/route add -net 127.0.0.0

/sbin/ifconfig dummy 200.0.0.1
/sbin/route add -net 200.0.0.0 netmask 255.255.255.0
/sbin/ifconfig plip1 arp 200.0.0.1 pointopoint 200.0.0.2 up
/sbin/route add 200.0.0.2
/sbin/ifconfig dummy down

DOS -> Linux の接続のために、arp が使われていることに注意して下さい。 これは Linux -> Linux の接続では普通使われないものですから。

そして、/etc/hosts に次のような行を加えて、2つのマシン名を定義します:

200.0.0.1       console1
200.0.0.2       console2

ここで console2 は DOS マシンのホスト名です。 実際に設定する IP アドレスについては、オフィシャルなアドレスづけをした ほうがいいでしょう。(Andrea の忠告 (FAQ 参照) を思い出して下さい。) (訳注: 要するに、プライベート IP アドレスを使った方がいい、ということですね。)

これまでの変更と、新しいカーネルを有効にするためにリブートします。 パッチを当てた場合にはブート時に(または dmesg を実行することで)、そうでない 場合にはモジュールがロードされた時に、以下のようなメッセージが出力される はずです:

lp0 at 0x03bc, using polling driver
lp1 at 0x0378, using polling driver
[....]
NET3 PLIP version 2.0 gniibe@mri.co.jp
plip1: Parallel port at 0x278, using assigned IRQ 5.

また、"route" コマンドを実行すると:

Kernel routing table
Destination     Gateway         Genmask         Flags MSS    Window Use Iface
console2        *               255.255.255.255 UH    1436   0      136 plip1
loopback        *               255.0.0.0       U     1936   0      109 lo

というようなメッセージが出力されるはずです。

さらに、"ifconfig plip1" というコマンドを実行すると:

plip1     Link encap:10Mbps Ethernet  HWaddr FC:FC:C8:00:00:01
          inet addr:200.0.0.1  P-t-P:200.0.0.2  Mask:255.255.255.0
          UP POINTOPOINT RUNNING  MTU:1500  Metric:1
          RX packets:132 errors:0 dropped:0 overruns:0
          TX packets:136 errors:0 dropped:0 overruns:0
          Interrupt:5 Base address:0x278 

というメッセージが出力されるはずです。

/etc/inetd.conf の中で telnet がイネーブルされていることを確認して下さい。 tcpd や、/etc/hosts.allow (ALL: LOCAL) 、/etc/hosts.deny (ALL: ALL) の 使い方を知るために man ページを読む必要があるかも知れません。 さて、これで "telnet localhost" がうまく動作するはずです。

Linux 側の設定は終りました。今度は DOS 側です。 繰り返しになりますが、ポート 0x3BC を使う場合にはうまく動作するかどうか 疑ってかかった方がいいでしょう。

私の場合には NCSA の telnet と Crynwr の PLIP ドライバを使っています。 以下のサイトにありました:

必ず NCSA telnet のバージョン 2.3.08 と、Crynwr PLIP ドライバのバージョン 11.1 を使ってください。また、Crynwr の SUPPORT.DOC がどこかにありますので、 これも読んで下さい。

さて、CONFIG.TEL ファイルです。 ほとんどはデフォールトのままですので省略して、必要な(願わくば)部分だけ を抜き出しました。私のマシンの二番目(secondary)のパラレルポートは、 0x278, IRQ 5 です。

(訳注 : 以下の設定ファイルのコメント部分も日本語に訳出しましたが、 実際の設定ファイルで(コメントフィールドとはいえ)日本語を使う事が できるかどうかはわかりませんので注意してください。)

myip=200.0.0.2 
netmask=255.255.255.0       # サブネットマスク
hardware=packet             # ネットワークボード(パケットドライバ I/F)
interrupt=5                 # ネットワークボードの IRQ 番号
ioaddr=60                   # ドライバが使うソフトウエア割り込み番号
#
#[変更の不要な部分 ...たくさん...]
#
# ファイルの最後に以下の行を付け加える
name=console1 ; hostip=200.0.0.1 ; nameserver=1 ; gateway=1 

(ここで、console1 は Linux マシンのホスト名です。あなたのマシン名に合わせて 変更してください。)

私の場合、12フィート(3.6m) のヌルケーブルを作成して2つのマシンを接続 しました。(最初に配線の誤りがあったことを除けば)、何も問題なく動作しています。 標準的な 11芯ヌルプリンタケーブル(訳注: Laplinkケーブルのことかな) でも うまく動作するはずです。

Linux カーネルソースの plip.c の中にケーブルの配線方法が書かれています。

私のケーブルは 17本 <-> 17本 という接続ですが、これは他の用途には使われ ないものでしょうし、どこかで売っていることもないと思います。

@echo off
plip.com 0x60 5 0x278
telbin -s console1

以上のコマンドで、Linux マシンの /dev/ttyp に接続できるはずです。 NCSA telnet は 8つの仮想スクリーンを提供しており、ftp サーバとなること もできます。 PLIP インターフェースは十分なスループットを実現できます。 私の場合にはこんな古いマシンでも ファイル転送で 6.5K/s の速度が 出ています。あなたのマシンではもっと速いでしょう。:-)


次のページ 前のページ 目次へ