シリアル接続

訳: &a.ryo;.16 November 1997.

このセクションでは, FreeBSD でシリアル接続をする時の一般的な質問に答えます. PPP および SLIP については, のセクションを参照してください. どうやったら FreeBSD がシリアルポートを認識したことを知る事ができますか?

FreeBSD のカーネルがブートする時, カーネルはその設定にしたがって, システムのシリアルポートを検出します. 起動時に表示されるメッセージをよく観察するか, 起動後に次のコマンドを実行する事によって確認できます. dmesg | grep sio

ここに上に挙げたコマンドの出力例を示します. sio0 at 0x3f8-0x3ff irq 4 on isa sio0: type 16550A sio1 at 0x2f8-0x2ff irq 3 on isa sio1: type 16550A

これは, 二つのシリアルポートを示しています. 1番めは, irq が 4 で のセクションを参照してください. どうやったら FreeBSD がモデムカードを認識したことを知ることができますか?

前の質問を参照してください. 2.0.5 にアップグレードしたら

心配ありません. どうやったら FreeBSD でシリアルポートにアクセスできますか?

3番目のポート (DOS では, COM3 と呼ばれます.) には, ダイヤルアウトデバイスとしては /dev/cuaa2, ダイヤルインデバイスとして /dev/ttyd2 があります. それではこの両者にはどのような違いがあるのでしょうか?

まず, ダイヤルインの時には /dev/ttydX をブロッキングモードでオープンすると, プロセスは対応する マルチポートシリアルカードをサポートさせるにはどうしたらよいのでしょうか?

繰り返しになりますが, のセクションでは, あなたのカーネルの設定についての情報が得られるでしょう. マルチポートシリアルカードを使用するためには, カーネルの設定ファイルに, カードの持つそれぞれのシリアルポートに対応する の行を記述する必要があります. しかし, irq とベクターは一つのエントリにのみ記述してください. カード上のすべてのポートは一つの irq を共有しなければなりません. 一貫性を持たせるためにも, 最後のシリアルポートの所で irq を指定してください. また, 次に示す例は, AST の 4 ポートシリアルカードを irq 7 で設定したものです. options "COM_MULTIPORT" device sio4 at isa? port 0x2a0 tty flags 0x781 device sio5 at isa? port 0x2a8 tty flags 0x781 device sio6 at isa? port 0x2b0 tty flags 0x781 device sio7 at isa? port 0x2b8 tty flags 0x781 irq 7 vector siointr

このフラグはマスタポートがマイナーナンバー 7 ( FreeBSD で複数のマルチポートシリアルカード間で irq を共有することはできますか?

現在のところはできません. それぞれのカード毎に異なった irq を使ってください. ポートにデフォルトのパラメータを設定する事は出来ますか?

stty -a -f /dev/ttyd1

このデバイスに対する設定を変更した場合, その設定はデバイスをクローズするまで有効です. デバイスを再オープンした場合, それらの設定はデフォルトに戻ってしまいます. デフォルトの設定に変更を加えるために, ``初期設定'' デバイスをオープンし, 設定を修正することができます. 例えば, XON/XOFF フロー制御という設定を ttyd5 のデフォルトにしたい場合, 次のようにおこなってください. stty -f /dev/ttyid5 clocal cs8 ixon ixoff

この設定をおこなうためのコマンドを記述するのに適切なファイルは, /etc/rc.serial です. これでアプリケーションが``設定固定'' デバイスを調整してやることによって, アプリケーションによる設定の変更を禁止することができます. 例えば, stty -f /dev/ttyld5 57600

これにより, アプリケーションは 当然のことながら, 初期設定デバイスおよび, 設定固定デバイスは スクリプトはデバイスエントリを作成する時に, このような設定は行いません. どのようにしたら モデム経由でダイヤルアップログインができるのでしょうか?

つまり, インターネットサービスプロバイダーになりたいのですね. それにはまず, 1 台ないし複数の自動応答モデムが必要です. モデムには, キャリアーを検出した時には CD信号を出力し, そうでない場合には出力しないことが必要とされます. また RTS/CTS フロー制御を使うか, ローカルフロー制御をまったく使わないかのどちらかでしょう. 最後に, コンピュータとモデムの間は固定速度でなければなりません. ただ, (ダイヤルアップの発呼者に対して親切であるためには) こちらのモデムと相手側のモデムの間の速度を, モデム間で自動調整できるようにすべきでしょう.

多くあるヘイズコマンド互換モデムに対して, 次のコマンドはこれらの設定をおこない, その設定を不揮発性メモリーに保存します. AT &C1 &D3 &K3 &Q6 S0=1 &W

MS-DOS のターミナルプログラムに頼らずに AT コマンドを送出するには, のセクション以下を参照してください.

次に, モデム用のエントリを に作成しましょう. このファイルには, オペレーティングシステムがログインを待っているすべてのポートが記述されています. 以下のような行を追加してください. ttyd1 "/usr/libexec/getty std.57600" dialup on insecure

この行は, 2 番目のシリアルポート (/dev/ttyd1) には, 57600 bps の通信速度でノンパリティ (に記述されています.) のモデムが接続されていることを示しています. このポートの端末タイプは ``dialup'' です. またこのポートは, ``on'' すなわちログイン可能であり, ``insecure'' これは これが一般的な, ターミナルタイプとして ``dialup'' を使う方法です. 多くのユーザーは, .profile や .login で, login 時の端末タイプが dialup であった場合には, 実際の端末タイプをユーザーに問い合わせるように設定しています. この例は, ポートが ``insecure'' でした. このポートで '' を使って に変更を加えた後は, hungup もしくは プロセスに送る必要があります. kill -HUP 1

この操作は init プロセスに を再読み込みさせます. これにより, init プロセスは getty プロセスを すべての ``on'' となっているポートに起動させます. 次のようにして, ポートがログイン可能かを知ることができます. ps -ax | grep '[t]tyd1'

ログイン可能であれば, 次のような出力が得られるはずです. 747 ?? I 0:00.04 /usr/libexec/getty std.57600 ttyd1 ダムターミナルを FreeBSD マシンに接続するにはどうしたらよいのでしょうか?

もし, 他のコンピューターを FreeBSD の端末として接続したいのならば, お互いのシリアルポート間をつなぐヌルモデムケーブル [訳注: リバースケーブルもしくはクロスケーブルとも呼ばれます.] を用意してください. もし, 既製の端末を使う場合は, 付属するマニュアルを参照してください.

そして, を上と同じように変更してください. 例えば, WYSE-50 という端末を 5 番目のポートに接続するならば, 次のようなエントリを使用してください. ttyd4 "/usr/libexec/getty std.38400" wyse50 on secure

この例は, /dev/ttyd4 ポートにノンパリティー, 端末タイプが wyse50, 通信速度が 38400 bps ( に記述されています.) の端末が存在しており, どうして

おそらくあなたのシステムでは ユーザーか, そうする代わりに, 次のようにタイプすることにより, あなたのシステムの全ユーザーが # chmod 4511 /usr/bin/cu # chmod 4511 /usr/bin/tip 私の Hayes モデムはサポートされていないのですが, どうしたらいいのでしょうか.

実際, のオンラインマニュアルは古くなっています. すでに, Hayes ダイアラーが実装されています. ファイルで, ``Hayes ドライバは, 最近のモデムの新しい機能である, を使う場合には, (また, 実際, デフォルトの /usr/src/usr.bin/tip/tip の下の`` これらの AT コマンドを入力するには?

ファイルの中で ``/dev/cuaa0に接続されている場合, 次のようにします: cuaa0:dv=/dev/cuaa0:br#19200:pa=none

モデムがサポートする最大の bps レートを br フィールドに使います. そして を実行すると, モデムが利用できるようになります.

/dev/cuaa0がシステムに存在しない場合は, 次のようにします: # cd /dev # ./MAKEDEV cuaa0

または # cu -l``line'' -s``speed''

``line'' にはシリアルポートを指定します (例えば /dev/cuaa0). そして ``speed'' には接続する速度を指定します (例えば 57600). その後 AT コマンドを実行したら, ~.と入力すれば終了します. pn 機能の

電話番号 (pn) 機能の中での にある電話番号を参照するように伝えます. しかし のような設定ファイルの中では特殊文字となります. そこで, バックスラッシュを使ってエスケープを行います: pn=\@ コマンドラインから電話番号を指定するには?

`` に追加します. 例えば, 次のようにします: tip115200|Dial any phone number at 115200 bps:\ :dv=/dev/cuaa0:br#115200:at=hayes:pa=none:du: tip57600|Dial any phone number at 57600 bps:\ :dv=/dev/cuaa0:br#57600:at=hayes:pa=none:du:

そして `` より を使いたい場合, cu の generic エントリを使います: cu115200|Use cu to dial any number at 115200bps:\ :dv=/dev/cuaa1:br#57600:at=hayes:pa=none:du:

そして `` 毎回 bps レートを入力しなければいけませんか?

は 1200 bps が正しいデフォルト値であるとみなすので, `` ターミナルサーバを経由して複数のホストへアクセスしたいのですが.

毎回接続されるのを待って `` に次のようなエントリを追加します: pain|pain.deep13.com|Forrester's machine:\ :cm=CONNECT pain\n:tc=deep13: muffin|muffin.deep13.com|Frank's machine:\ :cm=CONNECT muffin\n:tc=deep13: deep13:Gizmonics Institute terminal server:\ :dv=/dev/cua02:br#38400:at=hayes:du:pa=none:pn=5551234:

これで, ``

これは大学に電話回線がいくつかあって, 数千人の学生が接続しようとする場合によくある問題です.

あなたの大学のエントリを ファイルに作成して, \@ を使います: big-university:\ :pn=\@:tc=dialout dialout:\ :dv=/dev/cuaa3:br#9600:at=courier:du:pa=none:

そして ファイルに大学の電話番号の一覧を書きます: big-university 5551111 big-university 5551112 big-university 5551113 big-university 5551114

は一連の電話番号を上から順に試みて, 最終的に接続できなければあきらめます. リトライを続けさせたい場合は, CTRL+P を 1回送るために 2度押す必要があるのはなぜ?

CTRL+P は通常 ``force (強制)'' 文字であり, に次の文字がリテラルデータであることを伝えます. force 文字は「変数の設定」を意味する ``$HOME/.tiprc に次のように定義することで, 任意の文字を force 文字として利用できます: force= 打ち込んだ文字が突然すべて大文字になりました??

CTRL+A を押してしまい, caps-lock キーが壊れている場合のために設計された ``'' の ``raise character'' モードに入ったのでしょう. 既に述べた 以下は CTRL+2 や CTRL+A などを頻繁に使う必要のある Emacs ユーザにうってつけの .tiprc ファイルのサンプルです: force=^^ raisechar=^^

^^ は SHIFT+CTRL+6 です.

もし他の UNIX のシステムと接続しているなら, を実行することで送受信をします. 書式は以下のようになります: ~p <ローカルのファイル名> [<リモートのファイル名>] ~t <リモートのファイル名> [<ローカルのファイル名>]

この方法ではエラーチェックを行いませんので, zmodem などの他のプロトコルを使った方がよいでしょう.

まず始めに, FreeBSD の ports コレクション ( との, 2つの通信カテゴリーのプログラムのどちらか) をインストールします.

ファイルを受信するには, リモート側で送信プログラムを起動します. そして, エンターキーを押してから ``ファイルを送信するには, リモート側で受信プログラムを起動します. そして, エンターキーを押してから ``