The Linux Modem-HOWTO David S.Lawyer v0.08, 4 January 2000 さいとうかん 2000年 2月 4日 PC のモデムを選択、接続、設定、トラブルシューティング、そしてモデムを 理解する際に、この文書は役立ちます。マルチポートシリアルボードに関して は、Serial-HOWTO を参照してください。 はじめに DSL モデム、ケーブル、および ISDN モデムは他の HOWTO にあります

本文書では通常の PC 用モデムを扱い、主として ISA バスのものを扱いま す(ただし、PCI バスのモデムにも適用できるはずです)。 DSL モデム: ADSL mini-HOWTO をご覧ください。 Cable-Modems-HOWTO (かつて LDP の mini-HOWTO でした) ISDN HOWTO (LDP の HOWTO ではありません) : ISDN 「モデム」用のド ライバです。多くの関連する情報がありますが、ドイツ語です。ISDN のチュー トリアルは をご覧ください。 もご覧ください。 [訳注 : JF プロジェクトによる日本語訳 , ] PCMCIA モデムと PPP にはついては書いてありません

PCMCIA のモデムおよびシリアルカードについては、PCMCIA-HOWTO をご覧 ください。(モデム経由でインターネットへ接続する際に用いる) PPP、そして 通信プログラムに関しては、この HOWTO では扱っていません。通信プログラ ムの使い方のうち、モデムが正常に機能しているか、あるいは正しく電話をか けられるかをテストする方法のみを示します。モデムを用いてインターネット へ接続したいのなら、PPP を設定する必要があります。PPP に関しては (改定 中の PPP-HOWTO を含む)多くの文書があります。そのうちいくつかは /usr/doc/ppp などのディレクトリで見つかるかもしれません。 [訳注 : JF プロジェクトによる日本語訳 , ] 著作権、免責事項、登録商標およびクレジット 著作権

Copyright (c) 1998-9 by David S. Lawyer この文書をあらゆる形式で自由に複製し配布(販売あるいは贈与)してください。 訂正および小さな修正はメンテナにご連絡ください。また、本文書の派生著作 物を作り、それを配布してもかまいません。: あなたが作成した派生著作物を (SGML のような最もふさわしい形式で) LDP (Linux Documentation Project) へ送るか、あるいはインターネットへ投 稿するなどしてください。LDP 以外へ送ったのなら、どこで読めるかを LDP へ知らせてください。翻訳を除き、最新バージョンに書いてある、以前のメン テナへコピーを送ってください。 その派生著作物は本文書のライセンスの精神、あるいは GPL に従って ください。著作権の告知、そして最低でも使用するライセンスへのポインタを 載せてください。 以前の著者と多くの貢献者のおかげであると、明示してください。 翻訳だけでなくそれ以上の作業を行おうと考えているのなら、現在のメンテナ とあなたの計画について話し合ってください。 免責事項

あなたを故意に欺こうとしたわけではありませんが、おそらく本文書にい くつかの誤りがあるでしょう。この誤りを私に教えてください。本文書はフリー の文書ですから、私あるいは以前の著者に、文書のいかなる誤りについても法 的な責任がないことは明らかなはずです。 登録商標

ある単語が登録商標であるとしても、それがだれに帰属するものかは文脈 上明らかなはずです。例えば、``MS Windows'' (あるいは単に ``Windows'') という表記は ``Windows'' が Microsoft 社 (MS) の登録商標であることに配 慮したものです。``Hayes'' は Microcomputer Products Inc. の登録商標で す。 [訳注 : 英文の原著には以下のように書いてあります。 著者は ``winmodem'' を MS-Windows でしか動かないモデムを指すときに 使い、登録商標の意味では用いません。 ``Winmodem'' は 3Com 社の登録商標です。 原著では、登録商標を ``Winmodem'' と大文字で表記し、一般名詞は ``winmodem'' と小文字で表記して区別しています。しかし、ややわかりにく くなってしまいます。そこで日本語訳では、原著で ``winmodem'' と表記して いる一般名詞は「ソフトウェアモデム」と書き換えています。] クレジット

本文書の version 0.0 は、大まかに言って、次のような経緯で作成され ました。本文書の素材の約 3/1 は Greg Hankins さん の Serial-HOWTO v. 1.11 から(許可の もと)直接頂いたものです。他の約 3/1 は Serial-HOWTO を修正したものです。 残りの 3/1 は著者の David S. Lawyer が新しく書いたものです。 [ 訳注 : 訳者も JF の から多くの訳を頂きました。翻訳された永田靖人さん、 藤原輝嘉さん、ありがとうございます。] 著者への連絡

どのモデムを買うべきかの相談や、特定のモデムが Linux で動作するか どうかの質問などの目的で著者に尋ねないでください。 節の巨大なリストをご覧ください。また、 この HOWTO を精読してもまだ設定できない場合以外は、どのようにモデムを 設定するのか著者に尋ねないでください。 事実、意見、論法、綴り、文法、明快さ、あるいはリンクなどのいかなる誤り に関しても、著者までお知らせください。しかしまず、あなたが読んでいる文 書の日付が 1 ヶ月以上古かったら、最新のバージョンかどうか、まず御確認 ください。本文書に関してあなたが思ったことはどんなことでも、著者までお 送りください。 [訳注 : 日本語訳に関しては、さいとうかん <can-s@geocities.co.jp> および JF プロジェクト <JF@linux.or.jp> までご連絡ください。] この HOWTO の新しいバージョン

(著者もまだ勉強中ですが) モデムをとりまく環境は急速に変化している ので、この Modem-HOWTO の新しいバージョンはほぼ毎月出ています。あなた の抱えている問題が、本文書の最新バージョンでは解決できるかもしれません。 最新バージョンは LDP のミラーサイトで閲覧、ダウンロードできます。ミラー サイトの一覧は以下の Web ページで見ることができます。 最新バージョンの作成日を手短かに確認したい場合は を見て、今読 んでいるバージョン v0.08, 1 Jan. 2000 とどちらが新しいか比べてください。 [訳注 : 最新の日本語訳は にあります。] モデムとは ?

モデムとはデジタル信号用に設計されていない、通常の電話回線を使って デジタル信号を送る装置です。もし電話回線がすべてデジタル化されているの なら、モデムは必要ありません。モデムはあなたと世界中のコンピュータを接 続し、通信することを可能にします。モデムを使う際には、モデムを正しく扱っ て電話をかけるために、通常は通信プログラムや Web ブラウザなどを使いま す。上級のモデムユーザはモデムに電話をかけてコンピュータを使えるよう設 定できます。これを「ダイヤルイン」と呼びます。 PC のモデムには外付けと内蔵の2種類のタイプがあります。外付けモデムは PC 外部に設置します。一方、内蔵モデムは PC の中にあるため、外から見る ことができません。外付けモデムは PC の背面にある「シリアルポート」とし て知られているコネクタへ接続します。内蔵モデムはコンピュータの内部に挿 入するボードで、内部に(見えない)シリアルポートがあります。詳細な比較に ついては、 をご覧ください。内 蔵モデムを使用する際には、(そのモデムだけが使用し、他のモデムやプリン タが使用しない)シリアルポートとして検出されます。Linux においては、シ リアルポートは for more details on modems and serial ports. --> 着脱可能なコネクタで将来はモデムとともに使用するかもしれない、 ``Universal Serial Bus (USB)'' とシリアルポートは全く異なったものです。 モデムとシリアルポートに関する詳細は をご覧ください。 Fax 送信機能を備えたモデムもたくさんあります。(これを FAX モデムと呼びま す。) の項目に FAX ソフトウェアの一覧がありま す。ボイスモデムは音声自動応答装置のように動作し、ボイスメールを扱えま す。 の項目をご覧ください。 クイックインストール 外付けモデムのインストール

ストレートケーブルあるいはモデムケーブルを用いて、モデムと PC の使っ ていないシリアルポートを接続します。多くの場合、シリアルポートの名前が COM1 は をご 覧ください。 (ISA バス用の)内蔵モデム

(PCI バスに関しては および をご覧くださ い。) モデムに MS Windows 上でのみ動作すると書いてあったなら、あなたは 不運です。シリアルポートが既に2つあるなら、このボードを3番目のシリアル ポート ( (前の文における)「それに類するもの」[訳注:PnP 設定用のプログラム など] は若干扱いにくいかもしれません。そのモデムが ISA バスのプラ グ&プレイ (PnP) 対応であるなら、恐らく ``isapnptools'' で配布して いる ``isapnp'' を用いて同等のことができます。`` ] 最後に、``setserial'' を起動しているファイルを探し、以下のような記述を 追加してください : ``setserial /dev/ttyS2 irq5''。setserial v2.15 以降を除き、(ディストリビューションが許すなら)コマンドラインで ``setserial'' を動かすだけでよく、その結果は設定ファイルに保存されます。 詳細は をご覧ください。 クイックインストールに関する更なる説明については をご覧ください。 すべてのモデムに共通の設定

モデムを電話線に接続します。minicom のような通信プログラムを起動し、 シリアルポートの設定メニューへ移ります。シリアルポートへモデムより 2 〜 3 倍速いビットレートを割り当てます。最適なスピードはをご覧ください。/dev/ttyS1 の ような、シリアルポートの完全な名前を記述します。ハードウェアフロー制御 (RTS/CTS) を使うように設定します。これらの設定を保存し、minicom を終了 します。minicom を再び動かし、モデムが $ cu -l ttyS1 AT (キーボードから入力・モデムが応答するか実験) OK (モデムの応答) ~. (キーボードから入力・cu の終了) ] Linux PC 用のモデム 内蔵と外付けのどちらが良いのか

PC 用のモデムには内蔵あるいは外付けのものがあります。内蔵のものは PC の内部に取り付けます(取り付けるためにはねじを外すなどが必要です)。 外付けのものは PC のシリアルポートコネクタへ差し込むだけです。内蔵モデ ムは低価格でバッファ溢れによるデータ喪失が発生しにくく、たいてい消費電 力も少なく机の上に余分な空間が要りません。 外付けモデムは取付けが非常に簡単で設定もほとんど必要ありません。そして 何が起こっているのかを知る手がかりになる表示灯があります。シリアルポー トとモデムが物理的に分かれていることは、トラブル解決にも役立ちます。ま た、外付けモデムは他のコンピュータへ簡単に移動できます。 残念なことに、多くの外付けモデムは非使用時に電源を切るスイッチがないの で、(壁のコンセントからプラグを抜かない限り)電源を切っていても若干の電 力を消費します。電気料金は年間 $1 程度でしょう。外付けモデムのもうひと つ不利な点は、115,200 kbps 以上の速度をサポートしないシリアルポートを 使わざるをえない場合があることです(しかし、1998年の終わりには多くの新 型の内蔵モデムでもこの速度は出ず、一部のものだけが出せませんでした)。 新型の内蔵モデムが 16650 UART を持っているなら、CPU の負荷は低くなりま す(しかし 1998 年の終わりごろには、そのようなものはほとんどありません でした)。 内蔵モデムは Linux で使用すると、固有の問題が発生します。しかし、MS Windows でしか動かないモデムを避ければ、正しく設定するために(ときには 非常に多くの)時間がかかるものの、外付けモデムと同様に動作します。残念 なことに、MS Windows でしか動作しないモデムの中には、その旨を明記して いないものもあります。。もし新しいモデムを買うなら、Linux で動作しなかっ た際に返品できるかどうか確かめてください。 新しいモデムの多くはプラグ&プレイであり、それを扱うには多くの方法 があります : ``isapnp'' プログラムを使用する 設定を行う PnP BIOS を手に入れる PnP Linux を作るためにカーネルにパッチを当てる(今は利用できません) 上記の手法にはそれぞれ欠点があります。(現在はまだ不完全な) Plug-and-Play-HOWTO が理解を助けるとはいえ、isapnp の文書は理解しにく いものです。PnP BIOS の設定を行いたいなら、PnP OS を使っていないことを PnP BIOS に伝えなければなりません。それでも正しく設定できないかもしれ ません。何をするのか知りたければ、 をご覧ください。以前はパッチを当てた カーネルが動作していました。しかし、現在有効なパッチは存在しないようで す。関連する Web サイトを御確認ください。 外付けモデムの方が簡単に入手して接続できると言う Linux ユーザが多くい ます。しかし、現在新しい周辺機器はたいていプラグ&プレイになりまし た。いずれ PnP を扱うことになるかもしれないのに、なぜやらないのでしょ うか? でもまだ今のところは、(空いているシリアルポートがあるなら)最も好 都合な(そして高価な)解決策は外付けモデムです。 外付けモデム PnP 外付けモデム

多くの外付けモデムは ``Plug and Play'' (PnP) のラベルがついていま すが、PnP ではないモデムとしても同様に正常に動作するはずです。固有の IRQ と IO アドレスを持つシリアルポートにモデムを接続するので、モデムに PnP の機能は必要ありません。しかし、デフォルトの設定で正常に動作しな い限り、シリアルポート自体には (IRQ と IO アドレスの)設定作業が必要で す。 PnP で設定しないのに、なぜ外付けモデムを PnP と呼ぶのでしょうか。PnP OS が(シリアルポートを通じて)読み込める特別な PnP 識別情報を、モデムは 自身の中に持っています。PnP OS にはモデムが特定のポートにつながってい ること、そしてモデムの型番が分かります。そして、モデムが (/dev/ttsS2 あるいは COM3 など)どのポートにつながっているのか、 アプリケーションを設定する必要がなくなるかもしれません。しかし、このよ うな PnP OS を持っていないなら、(/dev/ttyS2 といった)デバイス 識別子をアプリケーションに手動で設定する必要があるでしょう。 ケーブル接続とインストール

様々なタイプの「ヌルモデム」ケーブルを必要とするその他の装置をシリ アルポートへ接続することと比べて、外付けモデムを接続することは簡単です。 モデムは交差するピンのないストレートケーブルを使います。多くのコンピュー タショップはストレートケーブルを売っているはずです。正しいケーブルを手 に入れるよう気を付けてください。コンピュータに DB9 あるいは DB25 のシ リアルポートがあるなら、シリアルポートは常にオスコネクタであり、ケーブ ルはメスコネクタになります。シリアルポートへモデムを接続してください。 接続したポートのデフォルト IRQ と IO アドレスで構わないなら、これで通 信プログラムを起動しモデム自体の設定を行う準備が整いました。 [訳注 : DB9 は D-Sub 9 ピンコネクタ、DB25 は D-Sub 25 ピンコネク タです。] ライト (LED) の意味

TM テストモデム AA 自動応答 (on ならモデムは着信に応答します) RD データ受信線 = RxD SD データ送信線 = TxD TR データ端末レディ = DTR (PC がセットします) RI 着信音表示 (on なら誰かがモデムに電話をかけてきています) OH オフフック (off ならモデムが電話を切ったことを示します) MR モデムレディ = DSR ?? EC エラー訂正 DC データ圧縮 HS (そのモデムにとって)ハイスピード [訳注 : 訳者のモデムでは MR = Modem Ready で、モデムの電源が入っ ているときに ON になります。] 内蔵モデム

PC のカバーを取り外しマザーボード上の空きスロットへモデムボードを 挿入して、内蔵モデムを取り付けます。内蔵モデムにはISA スロット用のモデ ムがあり、その他には PCI スロット用のものがあります。外付けモデムはシ リアルポートへ(短いケーブルを介して)接続したのに対し、内蔵モデムにはモ デム自身の中にシリアルポートがあります。言い換えると、モデムボードはシ リアルポートとモデムの双方の役割をします。 昔は、シリアルポートへの IO アドレスと IRQ の設定を、ボード上のジャン パで行いました。ボード上のピンへ押し込む、5x4x2mm 程度の黒く小さい長方 形の「サイコロ」があります。PnP モデム(実際はモデムの一部であるシリア ルポート)は設定のためにジャンパは用いず、モデム(コンピュータの中にある ISA バスの IO アドレス空間)へ設定コマンドを送ることにより設定を行いま す。PnP BIOS、(ISA バスは) isapnp プログラム、あるいは PnP OS が、こう いった設定コマンドを送ることができます。モデムを設定する手段は、 Windows 95/98 には組み込まれています。Linux では、IO と IRQ の設定方法 は(常に簡単な方法はありませんが)いくつかの方法から選ぶことができます: 起動の度に ``isapnp'' を自動的に動かす (起動ごとに動く) PnP BIOS を単独で使用する Linux にパッチを当て PnP OS にする (内蔵)ソフトウェアモデム

ソフトウェアモデムはモデムとして必要な処理の多く(あるいはほぼすべ て)を(Pentium など)コンピュータの CPU へ委託します。複雑な専用ソフトウェ ア(ドライバ)が CPU でこの処理を行います。1998 年中頃以降に製造された内 蔵モデムの多くは Windows でしか動作しないソフトウェアモデムであり、 Linux では. A project to get winmodems to work under linux is at . They also have a mailing list. There is some effort underway at reverse-engineering with at least one report of a winmodem that has been made to work under linux (but not yet with full functionality). So by the time you read this there may be more linmodems. --> 1999 年の終りには、やっと 2 つのソフトウェアモデムが Linux で動作する ようになりました。残念なことに、Lucent Technologies 社は PCI ソフトウェ アモデムのドライバをバイナリを非公式に公開しているだけです。このドライ バの初期のバージョンにはバグがありました。PC-TEL 社は Linux 用の新しい ソフトウェアモデムを売り出しました。他の企業も先行企業に続いて、 ``linmodem'' を作るのでしょうか? Linux におけるモデムの動作状況一覧が にあります。ソフトウェアモデムを Linux で動作させようとするプロ ジェクトがあります。 をご覧ください。 メーリングリストもあります。現在、複数のリバースエンジニアリング作業が 進行中です。ソフトウェアモデムを Linux で動作させた報告が、少なくとも ひとつあります(しかし、まだすべての機能を利用できるわけではありません)。 従って、皆さんがこれを読むころには、linmodem がもっと増えているかもし れません。 ソフトウェアモデム(いわゆる winmodem) を Lunux で扱えるドライバが手に 入るようになったら、それを ``linmodem'' と呼ぶ人もいるでしょう。それで もまだ ``winmodem'' なのでしょうか? そのモデムは MS Windows でも動作 するので、恐らく ``winmodem'' ということになるでしょう。``Winmodem'' という単語は特定のタイプのソフトウェアモデムを指す登録商標です。 [訳注 : 原著ではソフトウェアモデム一般を ``winmodem'' と表記して いて、winmodem と linmodem を対比させる形になっています。] ここではソフトウェアモデムに関して、より正確な技術用語を解説します。 HSP (Host Signal Processor) とは電話回線に流す電気信号を生成するために 必要となる信号を、ホストのプロセッサ (CPU チップ)で作り出すことを意味 します。モデム自身は CPU が伝えた電気的な波形を生成しているにすぎませ ん。これとは対照的に、「制御装置のない」モデムは(モデム自身を制御でき ないものの)自分自身で波形を生成できます。HSP には送受信データを処理す る機能はありません。データ列を圧縮できず、誤りも検出できず、パケットに データを入れられません。言い換えると、HSP はモデムを制御できず、ソフト ウェアを使用し CPU がすべての作業を行います。Rockwell 社の HCF (Host Controlled Family) はこの作業を行います。このすべてを行うソフトウェア が Linux へ移植できたなら、前述の問題はなくなります。上記の問題が解決 したとしても、Linux からシリアルポートに見えないモデムは Linux では動 作ないでしょう。 特定の内蔵モデムが Linux で動くかどうかを判断するにはどうすれば良いの でしょうか? まず、ソフトウェアモデムを示す名前や記述があるかどうか確か めてください : HSP, HCF, HSF、制御装置なし、ホスト制御型、ホストベース、 そして soft- モデムなどです。ソフトウェアモデムの Linux ドライバが入手 できたごくまれな場合にのみ、正常に動作するでしょう。そのモデムの型名が 分からなくて、そして Linux PC に Windows も入っているなら、「コントロー ルパネル」で「モデム」のアイコンをクリックしてください。まず、4 つ前の 段落で述べた Web の一覧を確認してください。もしモデムが動作しない(ある いはうまく動かない)なら、モデムの箱(あるいはマニュアル) を見て、「最小 システム要件」あるいは「システム要求」といった記述のある部分を探すと良 いでしょう。それは小さな字で印刷されているかもしれません。じっくり読ん でください。要求の中に Windows が載っていたら、おそらく Linux では動作 しないでしょう。 一方、Windows が必要だと明言しないモデムは、Linux で動作するかもしれま せん。「Windows 用に設計した」ということは、Microsoft の PnP を完全に サポートしていることを意味しているだけかもしれません。Linux が同じ PnP 機能を使用しているなら問題なく動作します(しかし、Linux を使用して設定 するのは難しいです)。「Windows 用に設計した」という記述は、Linux で動 作するか否かを判断する手がかりにはなりません。製造元の Web サイトを確 かめるか、メールで尋ねるのが良いでしょう。あるモデルは Linux で動作し、 他のモデルは動作しないと明言する Web ページを、著者はかつて見たことが あります。 ドライバを手に入れるという問題のほかにも、ソフトウェアモデムには利害得 失があります。ソフトウェアモデムは処理の大部分に CPU を使用するのでボー ド上の電子部品が少なくて済み、製造コストが安くなります。ですが、モデム が CPU に高い負荷をかけるので、他の処理が遅くなる可能性があります。実 際、CPU を激しく使用するタスクが同時に動いていると、特に処理が遅くなり ます。もちろん、ソフトウェアモデムを使っていないときには、全く処理能力 の低下は発生しません。このコスト削減には価値があるのでしょうか? モデ ムをあまり使わなかったり、モデムの使用中に高い CPU 負荷をかけるタスク がない場合には、その答えは yes になります。このように、ソフトウェアモ デムの使用が経済的に正解である場合もあります。モデムにかける経費を削っ た分をつぎ込んで高性能の CPU を手にいれたところで、処理速度はほんのちょっ としか上がらないでしょう。しかし、モデムボードの電子部品は汎用 CPU よ りも効率的に処理を行えます。従って、多くの場合、多分ソフトウェアモデム の使用を避ける方が良いでしょう。 PCI モデム

PCI モデムボードは PC のマザーボード上の PCI バススロットへ挿入す るものです。不幸なことに、多くの PCI モデムが Linux では動作しないよう です。しかし、その一部をサポートする努力が進行中です。 をご覧ください。 Linux で動作しない内蔵モデムは?

など。 全く動作しません。 Linux ではめったに動作しません。 動くかもしれません。 しかし、PC の起動時に毎回、まず Windows あるいは DOS を起動する必要 があります。 モデムは動作するものの、 性能は劣ります。 MWave および DSP モデム

この種のモデムは DSP (Digital Signal Processor) を使っています。モ デムを使う直前に、ハードディスクから DSP のメモリへプログラムをダウン ロードするよう、DSP は作られています。不運にも、DOS あるいは Windows のプログラムでそのダウンロードを行うなら、Linux では動作しません。通常、 Linux で動作するモデムも DSP を持っていますが(パッケージに書いてあるか もしれません)、動作プログラムはモデム中に格納されています。これは本節 でいう意味の「DSP モデム」ではなく、Linux でも正常に動作するはずです。 DSP モデムの一例に IBM Aptiva の MWAVE があります。 DSP モデムがシリアルポートをシミュレートするなら、Linux でシリアルポー トを経由しモデムと通信できます。同じ PC 上に DOS あるいは Windows が入っ ているなら、モデムを使えるかもしれません : まず (Windows 用ドライバを 使わずに DOS を使って)、DOS でドライバをインストールします。DOS か Windows を起動し(モデムが初期化されることを確かめ)、電源を切らずに Linux を起動します。DOS から Linux へ移行する方法のひとつは、 loadlin.exe を使用することです (Config-HOWTO をご覧ください)。もうひと つの方法は CTRL-ALT-DEL を押すだけです。モデムは DOS で使用したものと 同じ COM ポート(同じ IO アドレス)を記憶しています。 [訳注 : JF プロジェクトによる日本語訳 ] Rockwell (RPI) ドライバ

Rockwell RPI (Rockwell Protocol Interface) ドライバを必要とするモ デムは、そのドライバが Windows でしか動かないにもかかわらず、Linux で使用 できます。なぜなら、MS Windows のソフトウェアはデータ圧縮とエラー訂正 しか行わないからです。データ圧縮とエラー訂正をせずにモデムを使えば、 Linux でも使用できます。そのためには、モデムの電源を入れる度に、モデム へ(初期化文字列で)「RPI 無効化」コマンドを送り、RPI を無効にする必要が あります。このコマンドは著者のモデムでは Multiport Modem Cards

These are internal modems, but there is more that one per card. 8 modems/card is common. You will need these if you want to have several people simultaneously dial in/out to your computer. Note that these modems are not digital modems and will thus not be able to use 56k for people who dial-in. So they are not suitable for ISPs. The cards listed claim to work with Linux and the websites should point you to a driver for them. --> マルチポートモデムボード

内蔵モデムには、1 枚のボード上に複数のモデムを持つボードもあります。 通常は、ボード 1 枚あたり 8 個のモデムがあります。あなたのコンピュータ へ、数人が同時にダイヤルインおよびダイヤルアウトできるようにしたいのな ら、マルチポートモデムボードが必要になるでしょう。こういったモデムはデ ジタルモデムではないので、ダイヤルインするユーザは 56k を使えないこと に、注意してください。従って、これは ISP には向いていません。以下に、 Linux で動作するボードの一覧を挙げます。Web サイトにドライバへのリンク があるはずです。 Multi-Tech Systems 社の MultiModemISI 56K あるいは 33.6K の PCI か ISA で、4 ポートまたは 8 ポートのモデムで、ISDN/56K 共用です。 Moreton Bay Products 社の RAStel PCI あるいはISA の 4 また は 8 ポートの56Kモデムで、2 つのモデムと 2 つの空きシリアルポートがあ ります。 Comtrol 社の RocketModem ISA の 4 あるいは 8 ポートの 33.6K モデム。 Digi 社の AccelePort (RAS Family) 電話会社へのデジタル回線が必要となる 56k モデムは多少複雑になります。 従って、ISP が使うモデムに関しては、この HOWTO では扱いません。 をご覧ください。Cyclades 社はここで製品を宣伝して います。ですから、購入前に製品を比較してください。デジタルモデムの載っ ている高価な専用 PCI ボードを買えば、PC を「リモートアクセスサーバ」の 代わりになることを、覚えておいてください。 モデムとシリアルポートの基礎

モデムを使用するあるいは取り付けるために、その基礎を必ずしも理解す る必要はありません。しかし、何か問題が起こった際にモデムの動作原理を理 解していれば、何が悪いのかを見定めるのに役立つかもしれません。本章を読 んだあと、更に理解を深めたいのなら、(まだ不完全ですが)本文書中の の章を読み たくなるでしょう。シリアルポートに関する(本章の内容以上の)詳細について は、Serial-HOWTO に記述があります。 [ 訳注 : JF プロジェクトによる日本語訳 ] モデムのデジタル-アナログ変換(およびその逆)

既に電話網の基幹部はほぼすべてデジタル回線になってるものの、家庭 (あるいはオフィス)への回線はたいていアナログ回線です。つまり、発声した 音声波形の正確な複製を電圧波形として送るように設計してあります。このよ うな電圧波形を「アナログ」と呼びます。オシロスコープで観測すると、アナ ログ波形は周波数と振幅が変化する正弦波のように見えます。デジタル信号は 方形波に似ています。例えば、3 ボルトは 1 に、0 ボルトは 0 に割り当てま す。(外付けモデムが使用する)大抵のシリアルポートは +12 ボルトが 0 を、- 12 ボルトが 1 を表します(いくつかは ±5 ボルトのものもあります)。 電話回線を通してコンピュータからデータを送るために、モデムはコンピュー タからのデジタル信号をアナログ信号に変換します。モデムはアナログ正弦波 を生成し、それを変調 (MODulating) します。変調の結果はデジタルデータを 表現しているので、この信号もまたアナログ信号ではなくデジタル信号と呼び ます。しかし、その信号はアナログ信号と類似しており、ほぼすべての人がア ナログ信号と呼んでいます。電話回線のもう一方の端で、他のモデムがこの信 号を復調し (DEModulate)、もとのデジタル信号を復元します。この変調 (MODulating) と復調 (DEModulate) をまとめて(2つの d のうちひとつを落と して)、モデム (modem) という語になります。従って、モデム (modem) とは 変調 - 復調器 (MODulator - DEModulator) を意味します。変調に関しては の節に記述があります。 シリアルポートとは? シリアルの基礎

シリアルポートは入出力装置です。 モデムにはコンピュータとの間にシリアルポートがあり、モデムと同様にシリ アルポートについても理解する必要があります。 ほとんどの PC はシリアルポートを 1 つあるいは 2 つ持っています。各ポー トはコンピュータの裏側に 9 ピン (25 ピンのこともあります)コネクタを持っ ています。コンピュータのプログラムは送信ピン(出力)にデータ(バイト列)を 送ることができますし、受信ピン(入力)からデータを受け取ることもできます。 他のピンはフロー制御と接地のために使います。 シリアルポートは単なるコネクタではありません。シリアルポートは並列のデー タを直列に変換し、データの電気的な表現を変えます。コンピュータ内部では、 データを表すビット群は並列に流れます(同時に複数の配線を用います)。デー タを直列に流すことは、1 本の配線(シリアルコネクタの送信ピンや受信ピン等) にビットのストリームを流すことです。シリアルポートでこのようにデータを 流すため、シリアルポートはデータを並列(コンピュータ内部の形式)から直列 に変換できなければなりません(その逆の変換も必要です)。 シリアルポートの電子回路のほとんどは、UART と呼ばれるチップ(あるいはチッ プの一部)です。UART の詳細については、 の章を見てください。しかし、 まずはこの章から読むとよいでしょう。全体における UART の位置づけが分か るからです。 ピンと配線

古い PC では 25 ピンのコネクタが使われていましたが、このうち実際に 使われていたのは 9 本のピンだけです。従って、現在ではほとんどのコネク タは 9 ピンです。9 本のピンはそれぞれ配線につながっています。データの 送信と受信用に 1 本ずつの配線が使われ、信号の接地用に 1 本のピン(配線) が使われます。各配線の電圧は、この接地電圧に対して計測されます。従って、 双方向のデータ送信に必要となる最小の配線数は3本です。接地線を用いなく とも動作しますが、この場合には性能が落ちたり、エラーが起きたりします。 他にも配線がありますが、これらは制御用(シグナリング)に使われるだけであ り、データの送信には使われません。全種類の信号を同じ線で共有することも できますが、シリアルポートはそうなっておらず、信号の種類ごとに別々の専 用線が用意されています。これらの制御用配線の一部(あるいは全部)は 「モデム制御線 (modem control line)」と呼ばれます。モデム制御線の状態は、 +12 ボルトの有効 (on) 状態か、-12 ボルトの無効 (off) 状態のどちらかです。 これらのモデム制御線の 1 つは、コンピュータにシリアルポートからのデー タ送信を止めさせる信号を送るためのものです。この反対に、シリアルポート に接続されたデバイスからコンピュータへのデータ送信を止めさせるための制 御線もあります。この他にも、接続されているデバイスがモデムの場合にモデ ムに電話を取るように指示したり、接続が確立していることや電話が鳴ってい る(誰かが電話をかけてきている)状態であることをコンピュータに教えるため の線もあります。ピンおよび制御信号の詳細については、Serial-HOWTO を ご覧ください。 [ 訳注 : JF プロジェクトによる日本語訳 ] 内蔵モデムのシリアルポート

内蔵モデムには9ピンのコネクタはありませんが、ちょうど前述の配線が 存在するかのように振る舞います。モデム制御線の12ボルト信号ではなく、内 蔵モデムには存在しない「配線」の状態を表すため、自分自身にメモリ(レジ スタ) を持ち、その状態ビットを使用します。コンピュータには、内蔵モデム のシリアルポートが本物のシリアルポートのように見えます。そして、通常の シリアルポートと同様に、115200 bits/sec といった回線速度制限もあります。 現在では不幸なことに、多くの内蔵モデムが上記のような方法では動作せず、 (CPU で動く)ソフトウェアがモデムの処理の大部分を行います。ときには、こ ういったソフトウェアは MS Windows 用のものしかありません(Linux へ移植 されていません)。こういったモデムの多くは Linux で動作しません。の節をご覧ください。 IO アドレスおよび IRQ

コンピュータはそれぞれのシリアルデバイスと通信する必要があるので、 OS はそれぞれのシリアルポートが存在することと、それらがある場所 (I/O アドレス)を知っていなければなりません。 また、OS はシリアルポートが CPU にサービスを要求するときにどの線(IRQ 番号)を使うかも知っている必要 があります。シリアルポートはこの線に割込みを送ることによってサービスを 要求します。したがって、それぞれのシリアルポートデバイスは I/O アドレ スと IRQ (Interrupt ReQuest number)の両方を不揮発性メモリに保存してい なければなりません。 の節をご覧くだ さい。PCI バスの場合は、全くこのように動作するわけではありません。とい うのも、PCI には独自の割込みシステムがあるからです。しかし、PCI 対応の BIOS はチップの設定を行って PCI の割込みを IRQ にマッピングするため、 見かけ上は先の説明の通りに動作します。ただし、割込みの共有が許されてい る点は除きます(2 つあるいはそれ以上のデバイスが同じ IRQ 番号を使うこと ができます)。 I/O アドレスはメモリのアドレスとは異なります。I/O アドレスがコンピュー タのアドレスバスに設定されると、他の配線に信号が流れます。この信号は、 メインメモリにアドレスを無視させることと、I/O アドレスを持っている全て のデバイス(シリアルポート等)にそのアドレスを監視させ、それがデバイスの アドレスにマッチするかどうかを調べさせることを指示します。もしアドレス がマッチすれば、その I/O デバイスはデータバス上のデータを読み込みます。 名前: ttyS0, ttyS1 など

シリアルポートには /dev ディレクトリには、それぞれのポートに関するスペシャルファ イルがあります。 ``ls /dev/ttyS*'' を実行してこれらのファイル を見てみましょう。ただし、 (例えば). This does for more details> --> (の節をご覧ください。このプログラムはハード ウェアそのものの I/O アドレスや IRQ の設定は行い の章をご覧ください。 割込み

電話回線を通じモデムにやってくるデータは、モデムがアナログからデジ タルへ変換します。そして、シリアルポートを通りコンピュータ中の目的地に 到着します。 シリアルポートは、ある数のバイトデータ(1, 4, 8, 14 のいずれかに設定さ れていると思います)のデータを FIFO バッファに受け取ります。すると、通 常はそのポートだけが使う特定の配線上に割込みとして知られる電気信号を流 すことにより、そのデータを取り込むように CPU に伝えます。このように FIFO は、ある数のバイトデータを待って、それから割込みを発行します。 しかし、この割込みは、次のバイトデータが届くのを待っている間に、予期し ない遅延が生じたときにも送られます(タイムアウトといいます)。このように、 (端末のキーボードで入力しているときのように)バイトデータがゆっくり受信 されていると、1 バイトを受け取るごとに割込みが発行されるかもしれません。 一部の UART チップでは、以下のような規則になります: 4 バイトを連続して 受け取れるかもしれなかったのに、これらの 4 バイトのデータがいずれも出 てこなければ、シリアルポートは次のバイトデータを待つのをあきらめ、現在 FIFO に入っているバイトデータを取得させるために割込みを発行します。も ちろん、FIFO が空であれば割込みは発行されません。 それぞれの(コンピュータ内部の)割込み線には番号 (IRQ) が付いており、シ リアルポートは信号を送るためにどの線を使うのかを知らなければなりません。 例えば、 外付けモデムに関しては、この現象をすみやかに防ぎオーバーフローを止める (フロー制御のような)方法はありません。内蔵モデムに関しては、16バイトの FIFO バッファがモデムボード上にあり、出来の良いモデムはバッファに空き がなければ書込みを行いません。従って、良い内蔵モデムはこの16バイトのバッ ファをあふれさせることがありません。しかし、モデム自体がオーバーフロー することを防ぐには を 使う必要があるかもしれません。以上のことは外付けモデムに対する、内蔵モ デムのひとつの利点になっています。 割込みは、シリアルポートが 16 バイトのデータを小さい送信バッファから外 部ケーブルに全て送り出した直後にも発行されます。この送信バッファには、 送り出すデータ用の 16 バイトの空きができます。割込みはこの事実を CPU に伝え、小さい送信バッファに送信すべき新しいデータを入れさせるために用 います。また、モデム制御ラインの状態が変化したときにも割込みが発行され ます。 前述のバッファはすべてハードウェアバッファのことです。シリアルポートは 主記憶上にも大きなバッファを持っています。これに関しては後ほど説明しま す。 割込みは多くの情報を伝えますが、これは間接的にしか行いません。割込みそ のものは、特定のポートが注意を求めていることを割込みコントローラと呼ば れるチップに知らせるだけです。割込みコントローラはこれを受けて CPU に 信号を送ります。CPU はシリアルポートにサービスを提供する特殊なプログラ ム(シリアルデバイスドライバの一部)を実行します。このプログラムは割込み サービスルーチン(または割込みハンドラ)と呼ばれます。割込みサービスルー チンはシリアルポートで起きた出来事を調べ、その問題 (シリアルポートのハー ドウェアバッファのデータ入出力など)を処理します。このルーチンはシリア ルポートで起きたことを簡単に知ることができます。というのも、シリアルポー トのレジスタはシリアルデバイスドライバが知っている I/O アドレスにある からです。このレジスタは、シリアルポートの状態に関する情報を保持してい ます。デバイスドライバはこのレジスタを読んでその内容を調べることにより、 シリアルポートで起きたことを知り、適切な動作を行うことができます。 (モデムによる)データ圧縮

シリアルポートの基礎を続ける前に、モデムが行っているデータ圧縮に関 して理解する必要があります。コンピュータの CPU がソフトウェア処理によ りこの圧縮を行うこともあります。しかし不幸なことに、現在ではこういった ソフトウェアは MS Windows 上でしか動作しません。これは Linux でモデム を動作させるために必ず発生する問題であり、この議論はモデム自身がどこで 圧縮を行うのかに関するものです。 電話回線を通じデータをより高速に送るためには、ひとつにはデータに依存し た特定の符号化方式を用いて圧縮を行う方法があるでしょう。符号化したデー タはもとのデータよりも小さくなり、短い時間でインターネットを通じて送る ことができます。この過程を「データ圧縮」と呼びます。 インターネットからファイルをダウンロードする際、ファイルは既に圧縮して あり、モデムが更に圧縮を試みてもうまくいきません。モデムは既に圧縮済み のものを感知し、更なる圧縮を試みないかもしれません。対向するモデムから 圧縮済みのデータを受け取ったたら、モデムはデータを展開し、電話回線を通 じ送られたデータより多くのデータを作成します。従って、モデムからコン ピュータへ送られるデータ量は、電話回線上での流量よりも多くなるでしょう。 これらの流量の比率を圧縮率と呼びます。圧縮率は最高でも 4 程度ですが、 ほとんどありえないことです。 エラー訂正

モデムがエラー訂正を行うように設定されているかもしれません。これは データ圧縮に似ています。エラー訂正には送信速度(フローレート)を減少させ るオーバーヘッドが伴うものの、エラー訂正はスタートビットおよびストップ ビットを削ぎ落し、送信速度を向上させます。 外界とのインターフェイスであるシリアルポートは、各 8 ビット(1バイト)に スタートビットおよびストップビットの 2 ビット分を付加します。エラー訂 正がなければ、これらの付加されたスタートビットおよびストップビットは、 モデムと電話回線を通過していきます。しかし、エラー訂正を有効にすると、 こういった付加ビットは取り除かれ、8 ビット分がパケットに入ります。パケッ トヘッダおよびエラー訂正用の付加情報があるにも関わらず、これは効率が良 くより高い送信速度をもたらします。 データフロー(速度)

(文字、画像などを表すバイト列である)データはコンピュータからモデム へと流れ、電話回線を通じ外界へ、あるいはその逆方向に送られます。データ が流れる速度である (56k (56000) ビット/秒などの)フローレートは、(不正 確ですが) 「速度」と呼ばれます。ですが大抵の人は「フローレート」ではな く「速度」の方を使います。もしデータ圧縮を行わなければ、コンピュータか らモデムへのフローレートは電話回線上での伝送速度と等しいはずです。 実際、電話回線の終端にはふたつの異なったスピードがあります。 モデム - モデム間の電話回線そのものの速度(DCE スピード) シリアルポートからモデムまでの速度(DTE スピード) 電話回線のもう一端にあるモデムに電話をかけて接続すると、モデムは `` 内蔵モデムの場合には、モデムがコンピュータの内部にあってほとんどコン ピュータの部品なので、モデムからコンピュータへの DTE 速度には速度上の 限界はないでしょう。しかし、内蔵モデムは内部に専用のシリアルポートがあ ります。 平均速度は仕様で決められている速度よりも遅い場合が多いことを理解してお くことが大切です。待ち時間(あるいはアイドル時間)があると、平均速度は低 くなります。このような待ち時間には、 による 1 秒程度もある長い待ち時間も含まれます。別の極端な例とし ては、バイトデータを送る間の数ミリ秒という非常に短い待ち時間があります。 それに加え、電話回線の状態が良くない場合、モデムは速度を落とすこともあ ります。 最良の DTE 速度に関する議論は の章をご覧ください。 フロー制御

フロー制御とは、配線を流れるバイトデータを止める機能のことです。こ れには、バイトデータを失うことなくデータを再び流し始める機能も含まれま す。フロー制御は、モデムが瞬間のフローレートを非連続的に変えられるよう にするために必要です。 フロー制御の例

例として、33.6k の外部モデムを短いケーブルを使ってシリアルポートに 接続する場合を考えましょう。このモデムは電話回線上で 33.6k bps (ビット 毎秒)でデータを送受信します。データ圧縮やエラー訂正は全く行わないもの とします。シリアルポートの速度は 115.2k bps に設定してあり、データをコ ンピュータから電話回線に送ります。すると、コンピュータからモデムへは短 いケーブルを通って 115.2k bps でデータが流れます。しかし、モデムから電 話回線へは 33.6k bps でしかデータが流れません。データが出て行くよりも 速くデータが入ってくるので、モデムは超過分のデータ (115.2k -33.6k = 81.6k bps)をバッファに保持しなければなりません。 115.2k bps のデータの 流れが止まらない限り、結局はこのバッファは溢れて (空き容量がなくなって) しまいます。 ですが、ここでフロー制御が役立ちます。モデムのバッファが溢れそうになる と、モデムはシリアルポートに停止信号を送ります。シリアルポートはこの停 止信号をデバイスドライバに渡し、115.2k bps のデータの流れは停止します。 モデムは、今までバッファに蓄えたデータを取り出しながら、そのまま 33.6k bps でデータを送り続けます。するとバッファには何も入ってこないため、バッ ファ内のデータ量は減り始めます。バッファ内のデータがほとんどなくなると、 モデムは開始信号をシリアルポートに送り、コンピュータからモデムへ再び 115.2k bps でデータが流れ始めます。フロー制御により事実上、短いケーブ ル上での平均的なフロー速度(この場合は 33.6k bps)は、データを「流し続け た」場合の速度である 115.2k bps よりもずっと遅くなります。これが「開始- 停止」フロー制御です。 上記の簡単な例はコンピュータからモデムへの流れのフロー制御でしたが、反 対向きの流れ(モデムからコンピュータへの向き)に対して用いるフロー制御も あります。すなわちモデム(または他のデバイス)からコンピュータの向きです。 どちらの向きの流れにも 3 つのバッファ(1. モデム内のバッファ、 2. UART チップ(いわゆる FIFO)の内部、3. シリアルドライバが管理するメインメモリ 中のバッファ)があります。フロー制御は、特定のバッファが溢れないように 保護します。小さい UART FIFO バッファはこのような保護を受けていません が、その代わりに、このバッファが発行する割込みへの応答が高速であるこ とを期待して動作します。FIFO は「First In, First Out(先に入ったデータ が先に出る)」という、バイトデータの扱い方を表しています。 3 つのバッファ 全てが FIFO の規則で動作しますが、これを名前として持っているのは 1 つ だけです。これがフロー制御の本質ですが、説明することはもっとたくさんあ ります。 この(モデムから PC への)方向のフロー制御は必要ないことが多いです。これ が必要となる複雑な例に関しては Serial-HOWTO の ``複雑なフロー制御の例'' をご覧ください。しかし、モデムとコンピュータ間(シリアルポート)に充分に 高速な設定がない場合、モデムから PC への流れを減らす必要があります。そ のためには、電話回線からのデータの流入を停止しなければなりません。モデ ムは対向するモデムに送信を停止するよう伝えなければいけません。 をご覧ください。 [ 訳注 : JF プロジェクトによる日本語訳 ] ハードウェアフロー制御対ソフトウェアフロー制御

可能であれば、できるだけ「ハードウェア」のフロー制御を使いましょう。 これは専用の「モデム制御線」を 2 本使い、「停止(stop)」と「開始(start)」 の信号を送るものです。 最近のモデムはシリアルポートとの間で、ハードウェアフロー制御をほぼ常時 用います。 ソフトウェアフロー制御は、制御信号を送るために ASCII 制御文字の DC1(開 始)と DC3(停止)を使います。この制御文字は単に、通常のデータストリーム 内に挿入されます。ソフトウェアのフロー制御は反応が遅いだけでなく、特別 な対策を講じなければモデムを使ってバイナリデータを送ることもできません。 バイナリデータには大抵、フロー制御用の制御文字 DC1, DC3 が入っています。 従って、特殊な対策を立てて、フロー制御の停止信号である DC3 とバイナリ コードの一部である DC3 を区別しなければなりません。DC1 についても同様 です。 バイナリデータに対してソフトウェアフロー制御を行うためには、モデム(ハー ドウェア)とソフトウェアの両方での対応が必要です。 フロー制御がないときの症状

フロー制御の理屈が分かっていると、実際に役立つこともあります。例え ば、著者はモデムを使ってインターネットにアクセスし、問題なく稼動してい るかに見えました。しかし、数ヶ月後に PC から ISP へ大きなファイルを送 ろうとした際、大量の再送および送信誤りが生じました。(結局 Kermit は多 くの再送をしたののち、ファイルを送ることができました。) (ISP から著者 への)逆方向の受信では快適に動いていました。この問題はモデムのフロー制 御が無効になるハードウェアの欠陥によるものでした。著者のモデムはデータ 送信を止めるための「停止」信号をコンピュータに送らなかったので、大きな 送信ファイルでバッファがオーバーフロー(オーバーラン)しました。モデムか らコンピュータへの方向では、電話回線上の流量よりも( 115.2k という)モデ ムからコンピュータへの容量のほうが常に大きいため、問題が発生しませんで した。初期化文字列にフロー制御を有効にするコマンドを付加しフロー制御を 有効にすることで、この問題を解決しました(デフォルトで有効になっている はずなのに、何かがおかしくてそうなっていませんでした)。 モデム間のフロー制御

これは電話回線を通じ 2 つのモデム間でデータを送る際の、フロー制御 に関する記述です。エラー訂正が有効な場合のみ、モデム間のフロー制御は可 能となります。実際、エラー訂正を行わなければ、モデム間のソフトウェアフ ロー制御を有効にできますが、バイナリデータの送信を妨げるかもしれないの で、あまり用いません。 データフロー経路 - バッファ

この話題については、フロー制御、(ハードウェアが持つ) 16 バイトの FIFO バッファの対、モデムにある大きなバッファ対を含めた大部分を既に説 明しました。しかし、これ以外にもまだバッファの対があります。メインメモ リ上にある大きな(多分 8kB の)バッファがあり、これもシリアルポートのバッ ファと呼ばれます。アプリケーションプログラムがデータをシリアルポート (そしてモデム)に送ると、このデータはまずメインメモリ上の方の(シリアル ポートの) 送信バッファに格納されます。バッファの対はデータの流れの向き が反対である、送信バッファと受信バッファの組み合せです。 シリアルポートのデバイスドライバは、例えば 16 バイトのデータを 1 バイ トずつ送信バッファから取り出し、これをシリアルポートのハードウェアが送 信用に持っている送信バッファに入れます。一度データが送信バッファに入る と、その送信を止める方法はありません。そしてこのデータはシリアルポート から適切な大きさ(恐らく 1KB )のバッファを持つモデムへ送り出されます。 デバイスドライバが(フロー制御の指示を受けて)コンピュータから送信される データの流れを止めたとき、実際に止まるのはメインメモリ上の大きな送信 バッファから送り出されるデータの流れです。データが止められ、モデムへ送 り出されるデータの流れが止まった後であっても、アプリケーションプログラ ムは、8kB の送信バッファがいっぱいになるまでは、ここにデータを送り続け ることができます。 このバッファがいっぱいになると、アプリケーションプログラムはそれ以上の データを送る(C 言語では ``write'' 文を使います) ことができなくなり、ア プリケーションの実行を一時的に停止してバッファに空きができるのを待ちま す。このように、フロー制御の ``stop'' 信号は結局、データを送るプログラ ムを止めることができます。このプログラムが止まっても、コンピュータは計 算を止める必要はありません。フロー制御の stop 信号を受けて待っている間 は、別のプロセスに切替えればよいのです。以上の説明は多少簡略化しすぎて いますが、``write'' 文を待っている間にアプリケーションプログラム自体に 別処理をさせる方法がこれとは別にあるからです。 モデムコマンド

通信ソフトウェアはデータを送る配線と同じ配線を用いて、モデムへコマ ンドを送ります。このコマンドは短い ASCII 文字列です。例えば、 `` モデムを他のモデムに接続した(オンラインモードの)とき、コンピュータから モデムへ送ったすべてのデータはもう一方のモデムへ直接到達し、コマンドの ようにモデムが解釈することはありません。オペレーションモードから、送信 データすべてをモデムが解釈するコマンドモードへ「エスケープする」方法が あります。コンピュータが特定の時間間隔で `` has links to a couple of such web-sites. Different models and brands of modems do not use exactly the same set of such commands. So what works for one modem might not work for another. Some common command (not guaranteed to work on all modems) are listed in this HOWTO in the section --> インターネット上には多くのモデムコマンドのリストがあります。 の節では、こういったウェブサイトへの リンクを載せています。異なった型番やブランドのモデムは、異なったコマン ドセットを使用します。従って、あるモデムのコマンドが他のモデムでは動作 しない可能性があります。(すべてのモデムで動作する保証はありませんが)共 通のコマンドは、この HOWTO の の節に載せてあります。 シリアル操作ソフトウェア: デバイスドライバモジュール

シリアルポート用のデバイスドライバは、シリアルポートを操作するソフ トウェアです。現在はこれはシリアルモジュールとして用意されています。こ のモジュールは普通、必要なときに自動的に読み込まれます。バージョン 2.2 以降のカーネルはこれを行います。これより古いカーネルでは、必要なときにモ ジュールを自動的に読み込むためには /etc/modules に明示的に列挙する 必要がありました。モジュールが Linux で一般的になる前は、シリアルドラ イバはカーネルに組み込むのが普通でした。もし、シリアルドライバがまだカー ネルに組み込んであるのなら(カーネルのコンパイル時にそう選択したのかも しれません)、シリアルモジュールをロードしてはいけません。もしこれをロー ドしてシリアルドライバが 2 つになってしまうと、シリアルポートは使えな くなります。この場合にシリアルポートをオープンしようとすると ``I/O error'' となります。 シリアルモジュールが読み込まれると、存在するシリアルポートに関するメッ セージが画面に表示されます(間違った IRQ を表示することもよくあります)。 しかし、一度 をご覧ください。 カーネルのソースコードを編集してドライバを修正することができます。シリ アルドライバの大部分は ] 設定の概要

MS Windows あるいは DOS 上のみでモデムを使いたいなら、たいていのモ デムはただ取り付けるだけでよく、正しく動作するでしょう。外付けモデムで ない限り、Linux ではたいていの場合このように簡単にはいきません。 (``Plug and Play'' とラベルが貼ってあるとしても) 外付けモデムは正しく 動作するはずです。しかし、最近の内蔵モデムの多くはプラグ&プレイ (PnP) であり、PnP のシリアルポートがあります。ISA のモデムなら、Linux の ``isapnp'' プログラムを使う必要があるかもしれません。詳細は Plug-and-Play-HOWTO をご覧ください。 [訳注 : JF プロジェクトによる日本語訳 ] モデムはシリアルポートと連携するため、モデムの設定にはふたつの部分があ ります。 モデム自身の設定 - 通信端末で設定する モデムのシリアルポートの設定 - *一部だけ*を通信端末で設定する (推奨項目であって必要ではない)上記設定の多くは、モデムとともに使う 上記の設定作業では、シリアルポートの IO アドレスや IRQ をハードウェア とドライバに設定するような、低レベルの設定は行いません。運が良ければ、 Linux を起動する際に自動的に設定されます。以前はジャンパでハードウェア の設定を行いましたが、現在は「プラグ&プレイ」によりソフトウェアで 設定します。 しかし、深刻な問題があります - (1999年の終りでは) Linux はプラグ& プレイのオペレーティングシステムではありません。しかし、使いにくいけれ どもプラグ&プレイを設定できるツールがあります。次節では更に詳しく 述べます。 シリアルポートの設定 PCI バスはまだサポートされていません

カーネル 2.2 のシリアルドライバは PCI バスをサポートしていません。 しかし、カーネル 2.3 と 2.4 では、ついに一部の PCI シリアルボード(およ びモデムボード)に対応します。ほとんどの PCI ボードは、ドライバによる特 殊なサポートが必要です。ドライバはボードにデジタル的に格納されている ID を読み込み、そのボードにどうやって対応するか(あるいはサポートするか どうか)を決めます。確実にソフトウェアモデムではないのに動作しない PCI ボードをお持ちであれば、そのボード用のドライバを作る手助けができます。 そのためには、シリアルドライバのメンテナである Theodore (Ted) Y. Ts'o さんに連絡する必要があります。 この際には、`` です。 PCI モデムはあまり標準化されていません。一部のボードは PC との I/O に メインメモリを使います(ISA ボードはこういった場合には I/O アドレス空間 を使います)。一部のボードは、特殊な方法を使わないと IRQ が有効になりま せん。``lspci'' の出力を見れば、ボードがサポートされているかどうかを調 べる役に立つでしょう。細かい話があまり難しくなければ、筆者がこの方法に ついて調べ、この文書の将来のバージョンで説明するかもしれません。 設定の概要

多くの場合、設定は自動的に行われるので、ユーザがすることは何もあり ません。しかし場合によっては設定を行う必要があります(単に設定を確かめ るだけのこともあるでしょう)。こういった場合に最初にすべきことは、Linux におけるシリアルポートの設定の 2 つの部分を知ることです。 最初の部分(低レベル設定)は、I/O アドレス、IRQ、名前 ( 2 番目の部分(高レベルの設定)は速度(38.4K ビット/秒など)の設定やフロー 制御の選択などです。これはときには PPP や minicom といった通信プログラ ムや、 Plan to use more than 2 serial ports Installing a new serial port (such as an internal modem) Having problems with serial port(s) --> 3 つ以上のシリアルポートを使う場合 新しいシリアルポート(内蔵モデムなど)をインストールする場合 シリアルポートで問題が起きた場合 バージョン 2.2 以降のカーネルでは、割込みの共有を使えば低レベルの設定 を行わなくても 3 つ以上のシリアルポートを使えます。この共有はシリアル ポートのハードウェアが対応している場合にのみ動作しますが、低レベルの設 定より簡単とはいえません。 をご覧ください。 低レベルの設定(IRQ と I/O アドレスの設定)は、(高レベルの設定と比べると) 比較的問題を起こしやすいようです。多くの場合は完全に自動で、何も設定す ることがないのにです。そこで、この章の大部分はその話題を扱います。シリ アルドライバが正しい IRQ と I/O アドレスを知るまでは、ポートは全く動作 しないでしょう。Linux では検出さえされないでしょう。検出されたとしても、 IRQ が間違っていれば、動作は極めて遅いかもしれません。 を見てください。 Wintel の世界では、I/O アドレスと IRQ は「リソース」と呼ばれます。従っ て、我々は特定のリソースを設定していることになります。しかし、「リソー ス」には多くの種類があるので、この単語には他にも色々な意味があります。 復習になりますが、低レベルの設定は 2 つの値(IRQ 番号と I/O )アドレスを 2 つの場所に設定することです: デバイスドライバ(多くの場合、起動時に `` シリアルポートのハードウェアそのもののメモリレジスタ 起動(= ブート時)メッセージを見てください。これは通常は正しいです。しか し問題が起きている場合には、これらのメッセージの一部がハードウェアの正 しい設定を示していない(そして正しくないと思われる)可能性が高いです。 を ご覧ください。 ありふれた間違いで起きた低レベル設定のやり直し

多くの人がやってしまう一般的な間違いを示します: /proc/interrupt: シリアルポートが使われていないときは、 その割込みは /proc/interrupts に現われないが、それを見てシリ アルポートが見つからない(あるいは割込みが設定されていない)と誤って信じ てしまう /proc/ioports: このファイルが(たぶん間違いで) I/O アドレスと IRQ: 起動時のメッセージ

多くの場合、ポートの低レベルの設定は起動時に自動的に行われます(し かし常に正しいとは限りません)。何が起きているか調べるには、画面上の起 動メッセージを見ましょう。Linux がロードされる前に BIOS が出すメッセー ジ(例は挙げません)の確認も怠らないでください。BIOS のメッセージは Pause キーを押せば一旦止まります。スクロールして流れてしまったメッセー ジを見るには、Shift-PageUp を使います。Shift-PageDown では下向きにスク ロールします。/dev/ttyS0 と同じである点に注意してください。 検出されたものが最初に表示されます(ただし IRQ は大雑把に推定したものに 過ぎません): Serial driver version 4.27 with no serial options enabled ttyS00 at 0x03f8 (irq = 4) is a 16550A ttyS01 at 0x02f8 (irq = 3) is a 16550A ttyS02 at 0x03e8 (irq = 4) is a 16550A 保存された値が後で表示されますが、これも正しいとは限りません: Loading the saved-state of the serial devices... /dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A /dev/ttyS1 at 0x02f8 (irq = 3) is a 16550A /dev/ttyS2 at 0x03e8 (irq = 5) is a 16550A ちょっとした不一致がある点に注意してください。最初のメッセージでは IRQ=4 に 2 番目のメッセージは、起動時に実行される 最初のメッセージは、Linux がシリアルポートの探査を行った結果ですが、 IRQ を検出できていません。ポートがここに現われた場合、そのポートは存在 しますが、IRQ は間違っていることがあります。Linux は IRQ のチェックは 行いません。なぜなら、チェックをしてもフールプルーフにならないからです。 Linux は IRQ が先に示した値であることを仮定します。なぜなら、これらが 「標準的」な値だからです。 BIOS のメッセージに表示されるデータ(最初に表示される)はハードウェアに 設定されている値です。シリアルポートがプラグ&プレイならば、 また、プラグ&プレイのシリアルポートをお使いの場合には、プラグ& プレイのソフトウェアがハードウェア内部の IRQ と I/O を設定しなければ、 Linux はこれらを検出しません。これは、物理的に存在するシリアルポートが 起動メッセージで表示されない一般的な理由です。PC のハードウェア(PnP BIOS) はこのようなシリアルポートの低レベルな設定を自動的に行います。 PnP の設定は後で説明します。 シリアルポートの現在の I/O アドレスと IRQ の設定は?

前の節では、起動メッセージを見て設定を調べる方法を説明しました。起 動メッセージで十分な情報が得られれば、この節を読む必要はありません。情 報が十分でなければ、これを調べる方法がいくつかあります。 「I/O と IRQ の設定はどうなっているの?」という問への答えは実際には 2 通りあります。 デバイスドライバに設定されている値(たいてい setserial で設定と表 示を行います)。 実際にハードウェアに設定されている値。 両者は同じ値でなければなりません。そうなっていないと、ドライバが持って いる物理的なシリアルポートに関する情報が間違っているので、問題を引き起 こします。間違った I/O アドレスがドライバに設定されていると、ドライバ は存在しないポートにデータを送ろうとします。あるいはもっと悪いケースと しては、シリアルポートでない実在のポートにデータを送ろうとします。間違っ た IRQ がドライバに設定されていると、ドライバがシリアルポートからの割 込みサービス要求を受け取れずに、シリアルポートのバッファが溢れたり反応 が非常に遅くなる可能性があります。 をご覧ください。 ドライバに設定されている UART のモデルが間違っている場合にも問題が起き やすいです。I/O - IRQ の組がドライバとハードウェアで同じかどうかを確か めるには、ドライバとハードウェアの双方がどのように設定されたか確かめる 必要があります。 デバイスドライバの設定は?

これを調べるのは簡単です。単に起動メッセージを見るか、 ``setserial - g /dev/ttyS*'' を実行するだけです。シリアルポー トがうまく動作していれば、この表示内容がハードウェアにも設定されている でしょう。この情報を調べる別の方法としては、/proc ディレクト リにある「ファイル」を見る方法があります。このような別の方法を説明する 重要な理由は、これらはデバイスドライバに設定されている情報しか表示しな いことに注意してもらうためです。一部の人は、/proc ディレクト リにある特定のファイルを見て、これがハードウェアに設定されていると勘違 いしてしまいますが、「必ずしもそうではありません」。 /proc/ioports は、ドライバが使っている I/O アドレスを表示しま す。 /proc/interrupt は、現在動作している(デバイスをオープン した)プロセスのドライバが使っている IRQ を表示します。上記のいずれの場 合も、表示されるのはドライバの設定内容であり、ハードウェアの実際の設定 内容では必ずしもありません。/proc/interrupt は、それぞれのデ バイスに対して割込みがいくつ発行されたのかも表示します(数千個のことも よくあります)。この情報から問題解決の手がかりをつかむことができます。 なぜなら、大量の割込みが発行されていれば、その割込みを使っているハード ウェアがどこかにあるということだからです。割込みが少ししか表示されない ことは、ときにその割込みが実際にはどのシリアルポートによっても物理的に 生成されていないことを意味します。従って、使おうとしているシリアルポー トに対してほとんど割込みが発行されていなければ、ハードウェアには割込み が設定されていないかもしれず、つまりドライバが間違った割込みを使ってい るということかもしれません。現在実行中の(``minicom'' のような)プログラ ムをチェックするために /proc/interruputs を見るには、このファ イルを見ている間はずっとプログラムを実行し続ける必要があります。これを 行うには、プログラムを終了せずにシェルに行ってみましょう。 シリアルポートのハードウェアの設定は?

PnP シリアルポートは、電源を切ったときに設定をハードウェアに保存し ません。これは、電源を切っても設定が変わらないジャンパ(非 PnP)と対照的 です。ISA PnP シリアルポートをお使いであれば、シリアルポートが全く I/O アドレスや IRQ を持たず、事実上使えない状態になる可能性があります。こ の場合でもまだ、 ISA バスでのプラグ&プレイの場合、 PnP ポートを調べるに当たっては、DOS/Windows での設定内容はあまり役に立 ちません。Windows は設定情報をレジストリに保存しますが、これは Linux では使われません。これは何らかの情報付きで BIOS の不揮発性メモリに設定 されることもありますが、レジストリ内にある Windows の現在の設定とは同 期が取れていないことがあります。Linux の起動時に PnP BIOS に自動設定を させているのならば(そして Linux を起動する際には、PnP オペレーティング システムでないと BIOS を設定しているならば)、Linux は BIOS の不揮発性 メモリ内の設定を使うはずです。 シリアルの IRQ の選択

OS か PnP BIOS が全てのデバイスを設定するという本物のプラグ&プ レイ設定を行っているならば、IRQ を選ぶことはありません。PnP は最も良い と思われる割り当てを選んでこれを設定します。しかし、Linux でプラグ &プレイ用のツール (isapnp と pcitools) を使っている場合には、IRQ の選択を行う必要があります。使いたい IRQ を既に知っている場合には、こ の節を飛ばしてもかまいませんが、IRQ 0 の使い方が特殊であることだけは知っ ておいてください(次の段落を読んでください)。 IRQ 0 は IRQ ではない

IRQ 0 は実際には(ハードウェアでは)タイマですが、setserial を使った シリアルポートの設定においては特殊な意味を持っています。この指定は、そ のポートには割込みがないことをドライバに伝え、ドライバはポーリングを使っ た動作を行います。ポーリングは非常に効率が悪いのですが、割込みが衝突し た場合や、割込みの設定ミスがあった場合には試すとよいでしょう。 IRQ 0 を設定する利点は、ハードウェアに設定されている割込み番号を知る必要がな い点です。IRQ 0 は、実際に使える割込みが見つかるまでの急場をしのぐため だけに使うべきです。 割込みの共有とバージョン 2.2 以降のカーネル

一般的な規則では、全てのデバイスが固有の IRQ を持ち、IRQ の共有を 行わないことになっています。しかし大抵のマルチポートを使う場合のように、 IRQ の共有が許されている場合もあります。ただし、共有が許されているとし ても、効率は良くないかもしれません。というのも、共有されている割込みが 与えられる度に、どこで割込みが発行されたのかを調べなければならないから です。したがって、可能であれば、全てのデバイスに固有の割込みを与えると いいでしょう。 バージョン 2.2 より前のカーネルでは、IRQ はほとんどのマルチポートボー ド同士だけでしか共有できませんでした。バージョン 2.2 のカーネル以降は、 場合によっては全てのシリアルポートで IRQ を共有できます。バージョン 2.2 のカーネルで共有を動作させるには、 What IRQs to choose?

The serial hardware often has only a limited number of IRQs it can be set at. Also you don't want IRQ conflicts. So there may not be much of a choice. Your PC may normally come with /proc/interrupts will show which IRQs are being used by programs currently running. You likely don't want to use one of these. Before IRQ 5 was used for sound cards, it was often used for a serial port. --> どの IRQ を選ぶか?

シリアルポートのハードウェアには、限られた IRQ しか設定できないこ とがよくあります。しかし IRQ が衝突するも嫌でしょう。したがって、選択 の余地はあまりありません。PC では普通、/proc/interrupts を見れば、現在動作中のプログラムがどの IRQ を使っているのかがわかります。このような IRQ は使わない方がいいでしょ う。昔は IRQ 5 はサウンドカードが使っていましたが、よくシリアルポート でも使われていました。 以下に、Greg (Serial-HOWTO の元々の著者)がどのように /etc/rc.d/rc.serial を設定しているかを示します。 /sbin/setserial /dev/ttyS0 irq 3 # my serial mouse /sbin/setserial /dev/ttyS1 irq 4 # my Wyse dumb terminal /sbin/setserial /dev/ttyS2 irq 5 # my Zoom modem /sbin/setserial /dev/ttyS3 irq 9 # my USR modem --> /sbin/setserial /dev/ttyS0 irq 3 # シリアルマウス /sbin/setserial /dev/ttyS1 irq 4 # Wyse 製のダム端末 /sbin/setserial /dev/ttyS2 irq 5 # Zoom 製のモデム /sbin/setserial /dev/ttyS3 irq 9 # US Robotics 製のモデム

標準の IRQ 割り当てを示します: IRQ 0 タイマチャネル 0 (「割込み無し」を意味することもあります。詳しくは後述します) IRQ 1 キーボード IRQ 2 コントローラ 2 へのカスケード IRQ 3 シリアルポート 2 IRQ 4 シリアルポート 1 IRQ 5 パラレルポート 2, サウンドカード IRQ 6 フロッピーディスク IRQ 7 パラレルポート 1 IRQ 8 リアルタイムクロック IRQ 9 IRQ2 にリダイレクト IRQ 10 割り当て無し IRQ 11 割り当て無し IRQ 12 割り当て無し IRQ 13 数値コプロセッサ IRQ 14 ハードディスクコントローラ 1 IRQ 15 ハードディスクコントローラ 2 割込みを選ぶための決定的な方法はありません。割込みをマザーボードや、 他のボードが使っていないことを確かめるしかありません。2, 3, 4, 5, 7, 10, 11, 12, 15 を選ぶことができます。IRQ 2 と 9 は同じであることに注意 してください。IRQ 2 と 9 のどちらを使っても、シリアルドライバはこれを うまく認識します。非常に古いシリアルボードをお使いの場合には、8 以上の IRQ は使えないかもしれません。 IRQ 1, 6, 8, 13, 14 は使わないでください! これらの IRQ はマザーボード が使うからです。マザーボードが使っている IRQ を取り上げると、とても悲 しいことになります。設定が終わったら、割込みを使うプログラムを実行す るときに /proc/interrupts を再確認し、IRQ の衝突が起こっていな いことを確かめてください。 アドレスの選択 --ttyS3 と衝突するビデオボード

IBM 8514 ビデオボード(とその類似品)の I/O アドレスは、聞くところで は ほとんどの場合は、可能であればデフォルトのアドレスを使うべきです。ここ で言うアドレスは、8 バイトの範囲の最初のアドレスを表しています。例えば、 ttyS0 address 0x3f8 ttyS1 address 0x2f8 ttyS2 address 0x3e8 ttyS3 address 0x2e8 --> ttyS0 のアドレス 0x3f8 ttyS1 のアドレス 0x2f8 ttyS2 のアドレス 0x3e8 ttyS3 のアドレス 0x2e8 I/O と IRQ のハードウェアへの設定 (ほぼ PnP 向け)

これをハードウェアに設定した後には、 Using a PnP BIOS CMOS setup menu (usually only for external modems on ttyS0 (Com1) and ttyS1 (Com2)) Letting a PnP BIOS automatically configure a PnP serial port See Doing nothing if you have both a PnP serial port and a PnP Linux operating system (see Plug-and-Play-HOWTO). Using Using pciutils (pcitools) for the PCI bus --> PnP BIOS の CMOS 設定メニューを使う(普通は PnP BIOS に PnP シリアルポートを自動的に設定させる。 を 参照してください PnP シリアルポートと PnP 対応の Linux を使っているならば何もし なくてかまいません(Plug-and-Play-HOWTO を参照) PCI でない PnP シリアルポートの場合には PCI バスの場合には pciutils (pcitools) を用いる I/O アドレスと IRQ は電源を入れる度に(PnP を使って)シリアルポートのレ ジスタに設定しなければなりません。というのも、PnP ハードウェアは電源が 切られたときの設定内容を覚えていないからです。これを行う簡単な方法は、 PnP OS を使っておらず、起動する度に BIOS が自動的に設定を行うことを PnP BIOS に教えてやることです。(PnP OS である)Windows が PnP OS でない と BIOS に設定して Windows を起動すると、問題が起こることがあります。 詳しくは Plug-and-Play-HOWTO をご覧ください。 [訳注 : JF プロジェクトによる日本語訳 ] プラグ&プレイは IO と IRQ の設定を自動化するために設計されました。 しかし現時点の Linux では、話をややこしくしているだけです。標準の Linux カーネルはプラグ&プレイをあまりうまくサポートしていません。 Linux カーネルをプラグ&プレイ OS にするパッチを使っているならば、 上記のことは全て OS が自動的に処理できるはずです。しかし、これを使って シリアルポート以外のデバイスの設定を自動化しようとしても、手動でドライ バの設定をしなければなりません。というのも、Linux のドライバは PnP 対 応の Linux 向けに書かれていないからです。 ] PnP BIOS を使った I/O アドレスと IRQ の設定

PnP OS や isapnp を使って IO と IRQ の設定を行う方法の説明がそれら のソフトウェアに付いてくるにもかかわらず、PnP BIOS にそういった設定を させようと思っていたらそれは間違いです。全ての PnP BIOS がこれを行える わけではありません。BIOS には普通、最初の 2 つのシリアルポートを設定す るための CMOS メニューがあります。このメニューは見つけにくいかもしれま せんが、Award 製の BIOS ならば `` をご覧ください。 好むと好まざるとに関わらず、PC を起動すると PnP BIOS が PnP によるハー ドウェアデバイスの(I/O と IRQ の)設定を始めます。PnP BIOS が行う処理が 不十分で、残りの設定が(読者の皆さんがおそらく持っていない) PnP OS に残 されるかもしれません。あるいは PnP OS を持っていないと設定されている場 合には、全ての PnP デバイスを完全に設定するかもしれませんが、デバイス ドライバの設定は行いません。これは読者の皆さんが望む動作ですが、PnP BIOS が行った設定を正確に調べることは必ずしも容易ではありません。 PnP OS を持っていないことを BIOS に設定してあれば、PnP BIOS は最初の 2 つだけでなく全ての PnP シリアルポートの設定を行うはずです。 BIOS の動 作を間接的に制御する方法は(もし MS Windows9x を同じ PC で使っていれば)、 Windows における設定を「強制」することです。 Plug-and-Play-HOWTO を 「forced」で検索してください。Windows 上で「強制」した設定を CMOS BIOS メニューを使って上書きするのは簡単です。この「上書き」機能の設定・解除 が行える BIOS オプションがあると思います。 [訳注 : JF プロジェクトによる日本語訳 ] 新しい PnP デバイスが追加されると、BIOS は PnP 設定を変更して調整を行 わなければなりません。衝突を避ける必要が生じれば、既存のデバイスの I/O と IRQ の設定が変わることもあります。この目的のため、非 PnP デバイスの I/O と IRQ をどのように設定しているのかを BIOS に教えてあれば、BIOS は 非 PnP デバイスのリストを保存しています。これを BIOS に教える方法の一 つは、DOS/Windows 上で ICU と呼ばれるプログラムを実行することです。 しかし、この情報でデバイスドライバを設定するために、BIOS が行った設定 を調べるにはどうすればよいでしょうか? BIOS 自身もある程度の情報を出し ます。これは設定メニューや、コンピュータの起動時に画面に現われるメッセー ジを通じて得られます。 をご覧ください。 IRQ と I/O アドレスを setserial に与える

ハードウェアの IRQ と I/O アドレスをいったん設定すると(あるいは PnP で割り当てられるようにすると)、Linux を起動する度に ``setserial'' コマンドを実行する必要があります。 をご覧ください。 その他の設定 ハードウェアフロー制御 (RTS/CTS) の設定

解説が にあるので、そち らもご覧ください。可能ならば常にハードウェアフロー制御を使う方がいいで しょう。通信プログラムあるいは `` You need to add the following to such a file for each serial port (example is ttyS2) you want to enable hardware flow control on: --> 上記の設定によりハードウェアフロー制御を完全に有効にできない場合、自分 でその設定を行わなければいけません。モデムでは初期化文字列あるいはデフォ ルト設定により、ハードウェアフロー制御設定を行うことを確認してください。 デバイスドライバに設定を伝える必要がある場合、起動時に実行するファイル に書きこむのが良いでしょう。 をご覧ください。ハードウェアフロー制御を行いたい(例えば ttyS2 な どの)シリアルポートそれぞれについて、こういったファイルに以下の記述を 追加する必要があります。 stty crtscts < /dev/ttyS2 フロー制御が有効になっているかどうか見たいなら、以下のようにしてくださ い: minicom (あるいは類似の)ソフトウェアで、モデムの設定を見る際には stty -a < /dev/ttyS2 をタイプし、(ハー ドウェアフロー制御無効を示すマイナス符号がない) `` Modem Configuration (excluding serial port)

モデムの設定に多くの時間を費やす前に、モデムを検出できているか、そ して AT コマンドなどをモデムへ送出できるかどうか確認する必要があります。 従って、まず最初に使用予定の通信プログラムを非常に単純な設定で動かして、 正常に動作するか確かめることを勧めます。動作しているなら、モデムを検出 できています。動作しなければ、 をご覧ください。ソフトウェアモ デムは検出が難しく、Linux で動作しないかもしれません。 AT コマンド

モデムを接続するシリアルポートの設定が必要であると同時に、モデム自 体にも設定が必要です。データを送信するのと同じシリアル回線へ AT コマン ド(あるいはそれに類似したコマンド)を送って、モデムを設定します。 多くのモデムは AT コマンドセットを使用します。すべてのコマンド文字列は このようなコマンド文字列は通信プログラムが自動的に送るか、あるいはあな たが直接入力します。多くの通信プログラムはモデムへ直接コマンドを送れる 画面を提供しています。電源を切ったあとでもモデムの設定を記憶しているの で、この画面でモデムを設定することは良い方法です。 モデムのマニュアルを持っているのなら、恐らくそのモデムの AT コマンドセッ トを調べることができます。その他に、インターネット上でコマンドセットを 探してみるのも良いでしょう。サーチエンジンを使い、コマンドに関して記述 しているけれどもコマンドリストを載せていないサイトの発見を避けるために、 実際のコマンドを検索語句に含めて検索することも良いかもしれません。 に挙げるいくつかのサイトを見てみる のも良いでしょう。 初期化文字列: 保存および再呼出し

ここでの例は Hayes AT モデムコマンドセットを取り上げます。すべての コマンド文字列は AT の 2 文字で始めなければなりません(例えば、 充分でないのなら、格納済みの設定を変更するか、モデムを使うたびに「初期 化文字列」と呼ぶコマンド文字列を送って設定する人もいるでしょう。通常、 通信プログラムがこれを行います。どのような初期化文字列を送るのかは、通 信プログラムの設定、Kermit を使うならスクリプトの記述に依存します。た いてい通信プログラムが使う初期化文字列は編集でき、どんな文字列にでも変 更できます。ときには、通信プログラムはユーザにモデムの型名を選択させ、 プログラムが最適だと考える初期化文字列を使用することもあります。 最初にモデムの電源を入れた際に使用する設定は、初期化文字列で表現できま す。この文字列を(プロファイルと呼ぶ)デフォルト「文字列」だと考えても構 いません。通信プログラムがモデムへ(初期化文字列を含む)他の文字列を送る と、この文字列はデフォルトの設定を変更します。例えば、初期化文字列が 2 つのコマンドを含んでいたなら、この 2 つの項目だけが変更されます。しか し、いくつかのコマンドはモデム内部の保存済みのプロファイルを呼び出し、 ひとつのコマンドで設定のすべてを変更できます。 最近のモデムには、(電源を切っても消えない)不揮発性メモリ中に保存する、 いくつかの異なったプロファイルがあります。著者のモデムには(変更できな い 0 と 1 )ふたつの工場設定プロファイルがあります。そして、(0 と 1 の) ふたつのユーザ定義プロファイルもあって、ユーザが設定しそれを保存できま す。あなたのモデムはより多くのプロファイルを持っているかもしれません。 電源を入れた際にユーザ定義プロファイルのうちどれを使用するかは、プロファ イルに保存済みのもうひとつの項目に依存します。 4 つの格納済みプロファイルのいずれかを呼び出す(プロファイルを使用する) コマンドもあります。こういったコマンドを初期化文字列の中に入れる人もい るでしょう。もちろん、電源投入時に自動的に読みこむプロファイルと同じ設 定を初期化文字列が再び呼び出したとしても、最初から有効になるプロファイ ルが変わらない限り、設定は何も変わりません。たとえプロファイルを再び呼 び出すだけでも、設定を変更したあと、数種の初期化文字列を使うことは良い 考えです。 保存済みのプロファイルの再呼出し (0 ではなく 1 を指定するとプロファイ ル 1 を使用する): ユーザ定義プロファイル 0 を呼び出しリセットする(電話を切るなど) 工場出荷時プロファイル0を呼出す モデムへコマンドを送って設定したら、(工場出荷時のプロファイルを呼び出 して若干変更する場合も含んで) その設定をユーザ定義プロファイルへ保存し たくなるでしょう : 多くの人はモデムを使う度に長い初期化文字列をモデムに送ることを面倒に思っ て、代わりにモデムへ設定を保存します。また、初期化文字列で工場出荷時の デフォルト設定を呼び出し、その後ろにコマンドを追加して設定を少し変更す ることもできます。この方法により、電源投入時に読み込むユーザ定義プロファ イルを変更したことで問題を引き起こすことがなくなります。 あなたのモデムに適切だと思う初期化文字列を人からもらい、それを使用する のも良いでしょう。いくつかの通信プログラムは、その中から選択できるよう に初期化文字列のライブラリを持っています。最も難しい方法(そして、あな たがモデムに関する多くのことを学べること)は、モデムのマニュアルを研究 して初期化文字列を自分で書くことです。また、初期化文字列を不要にするた め、設定をモデムの中に保存できます。3 つ目の代替手法は、他人が書いた初 期化文字列をを目的に合わせて変更し、それを使ってモデムをスタートするこ とです。 通信プログラムが使用する初期化文字列を見ると、モデムコマンドにはない文 字があるかもしれません。この文字は通信プログラム自身のコマンド ( Other Modem Commands

Future editions of Modem-HOWTO may contain more AT commands but the rest of this section is mostly what was in the old Serial-HOWTO. All strings must start with AT. Here's a few Hayes AT codes that should be in the string (if they are not set by using a factory default or by a saved configuration). --> その他のモデムコマンド

Modem-HOWTO の将来のバージョンには、より多くの AT コマンドを載せる かもしれません。ですが、本節の残りのうち大部分は古い Serial-HOWTO のも のです。すべてのコマンド文字列は E1 command echo ON Q0 result codes are reported V1 verbose ON S0=0 never answer (uugetty does this with the WAITFOR option) --> E1 コマンドエコー ON Q0 リザルトコードレポート有効 V1 冗長出力 ON S0=0 出力無し (WAITFOR オプションを用いて uugetty が行う) モデム制御線の DCD と DSR に関係するコマンドを挙げます : &ero;C1 接続後のみ DCD を on &ero;S0 DSR 常時 on このコマンドはモデムが電話をかけときと切るときの挙動に影響します。DTR がどのような動作をするのか設定しても構いませんが、その設定方法は更に複 雑になります。

モデムにプロファイルを保存できないのなら、設定ファイルなどへ Greg Hankins has a collection of modem setups for different types of modems. If you would like to send him your working configuration, please do so: You can get these setups at . -->

Greg Hankins さんはいろいろなモデムの設定集を持っています。あなた の設定を彼に送りたいのなら、そうしましょう : に て、こういった設定ファイルを手に入れることができます。

確認: DTR が落ちたとき USR Courier V.34 モデムを正しくリセットする には、Greg Hankins さんは Note: some Supra modems treat DCD differently than other modems. If you are using a Supra, try setting

確認: いつかの Supra のモデムでは DCD の扱いが他のモデムと異なりま す。Supra を使っているなら、 Serial Port Devices /dev/ttyS2, etc.

デバイスディレクトリにデバイスを作るには、Serial-HOWTO: 「/dev ディレクトリにおけるデバイスの作成方法」をご覧ください。 [ 訳注 : JF プロジェクトによる日本語訳 ] シリアルポートデバイスの名前と番号

Linux ではデバイスにメジャー番号およびマイナー番号があります。 /dev ディレクトリにおいて、各々のシリアルポートは をご覧くださ い。 DOS/Windows は COM 名を使いますが、/dev/tty0, /dev/tty1 などのデバイスと混同してはいけません。「標準的」な 場合の (COM1 など) DOS 上の名前と IO アドレスを以下に示します。(あなた の場合では異なるかもしれません) set- IO dos serial major minor major minor address COM1 tty00 /dev/ttyS0 4, 64; /dev/cua0 5, 64 3F8 COM2 tty01 /dev/ttyS1 4, 65; /dev/cua1 5, 65 2F8 COM3 tty02 /dev/ttyS2 4, 66; /dev/cua2 5, 66 3E8 COM4 tty03 /dev/ttyS3 4, 67; /dev/cua3 5, 67 2E8 すべてのディストリビューションは linux% ls -l /dev/cua* linux% ls -l /dev/ttyS* ttySN を /dev/modem へリンク?

いくつかのインストレーションでは、モデム用の /dev/modem およびマウス用の /dev/mouse という2つの特別なデバイスを作りま す。両者とも、インストール時に明示した /dev 以下にある適切な デバイスへのシンボリックリンクです(バスマウスを持っているなら、 /dev/mouse はバスマウスのデバイスを指しているでしょう)。 /dev/mouse および /dev/modem の利点に関しては、いく らかの議論がありました。これらのリンクを使用することは推奨しません。と りわけ、ダイヤルインにモデムの使用を考えているのなら、 /dev/modem を使用するとロックファイルが正常に動作しないため、 問題が発生するかもしれません。好みでこれらのリンクを使うのなら、 cua デバイス

各々の 何が違うのでしょうか? Interesting Programs You Should Know About What is setserial ?

決してノート PC (PCMCIA) で /usr/doc/setserial.../ or the like. It should tell you how setserial is handled in your distribution of Linux. --> ひとつかふたつのシリアルポートしかないのなら、setserial を使わなくても たいてい正しく設定できます。そうでなければ(あるいはシリアルポートに何 か問題があったなら)、setserial を使う必要があるでしょう。 /usr/doc/setserial.../ などにある情報を調べてください。使用中の Linux のディストリビューショ ンがどのように setserial を扱っているのかわかるでしょう。 起動時にシェルスクリプトが /etc/serial.conf を除き)カーネルが消してしまいます。従って、 設定を回復させるために --> 適切なオプションを使えば、/dev/ttyS2 を検出させたいなら、setserial が推測 した をご覧ください。 setserial はシリアルポートのハードウェアに IRQ も I/O アドレスも設定し ません。その値はジャンパあるいはプラグ&プレイでハードウェアに設定 されます。ハードウェアに設定したものと同一の値を setserial に伝えなけ ればなりません。あなたが使いやすいと思った数値を捏造したり、その数値を setserial に伝えることだけはやめてください。I/O アドレスを知っていて IRQ を知らない場合には、IRQ を見つけるために setserial を試してみるの も良いでしょう。 (通常トラブル解決の際に使用する、冗長出力の -v といった1 文字のオプショ ンを除き)引数なしで setserial -g /dev/ttyS* デバイスドライバがポートをどのように設定したか、若干の情報を見られるで しょう。更に情報を見たければ、`` Probing

In order to try to find out if you have a certain piece of serial hardware you must first know (or guess) its I/O address (or the device driver must have an I/O address for it, likely previously set by setserial). To try to detect the physical hardware use the -v (verbose) and 検出

シリアルポートのハードウェアを見つけ出すには、まず I/O アドレスを 知らなければなりません(あるいは推測しなければなりません)。またはデバイ スドライバがハードウェアのために setserial で事前に適切に設定した I/O アドレスを知っていなければなりません。物理的なハードウェアを見つけるた めには、= 2.15, your last probe test may be saved and put into the configuration file /etc/serial.conf which will be used next time you start Linux. The script that runs UART の型名を検出するほかにも、setserial は IRQ を自動検出できますが、 常に正しくは動作しません。setserial のバージョンが 2.15 以上なら、最後 の検出結果を、Linux が次回の起動時に使用する設定ファイル /etc/serial.conf へ格納するでしょう。起動時に Can Linux Configure The Serial Devices Automagically?

Yes, but ... Your distribution may already do this on startup. But you may want to customize it. It's easy to do for setserial < 2.15. Just add some lines to the file that runs setserial on start-up. See For example, for ttyS3 you would add: --> Linux は自動的にシリアルデバイスを設定できますか?

はい、しかし... 使用しているディストリビューションが起動時に既に設 定しているかもしれません。ですが、カスタマイズしたくなるかもしれません。 それは setserial の 2.15 未満を使えば簡単です。起動時に setserial を動 かすファイルへ、数行を追加してください。 をご覧ください。例えば、 /sbin/setserial /dev/ttyS3 auto_irq skip_test autoconfig to the file that runs setserial on startup. Do this for every serial port you want to auto configure. Be sure to give a device name that really does exist on your machine. In some cases this will not work right due to the hardware so you may want to assign it an irq and/or a uart type. For example /sbin/setserial /dev/ttyS3 irq 5 uart 16550A skip_test --> /sbin/setserial /dev/ttyS3 auto_irq skip_test autoconfig 自動的に初期化したいすべてのシリアルポートに関して、同様にしてください。 コンピュータ上に実際に存在するデバイス名を与えているか、確かめてくださ い。いくつかのケースでは、ハードウェアが原因で正常に動作せず、IRQ ある いは UART のタイプを指定した方が良いかもしれません。例えば、 /sbin/setserial /dev/ttyS3 irq 5 uart 16550A skip_test (使用中のディストリビューションがこの変更を行っているなら) バージョン 2.15 以上では、起動時に setserial を動かす /etc/init.d/setserial などのファイルをユーザが編集することは 想定していないので、自動検出の設定はもっと難しくなります。以前のバージョ ンにはあったような役立つコメントがなくなっているかもしれません。 起動時の設定

カーネルがシリアルモジュールを読み込むと(あるいは「モジュール」が カーネルに組み込まれていると)、 setserial に本当の IRQ を伝えて、このような衝突(あるいは他の理由による 衝突) を解決できるような、/usr/doc/setserial.../ などに追加情報があります。 /etc/serial.conf を用いた新しい設定手法

バージョン 2.15 (1999年) 以前では、setserial の設定方法は起動時に setserial を動かすシェルスクリプトを手動で編集することでした。 /etc/serial.conf から設定情報を得ます。 しかし、serial.conf は通常は編集しません。その代わりに、 setserial で変更したものは、通常シャットダウンあるいはリブート時に設定 ファイル (/etc/init.d/setserial (Debian) あるいは /etc/init.d/serial (Redhat) などです。しかし、通常はこのファ イルも編集すべきでありません。 シリアルポートを無効にするには、/etc/serial.conf は似てい ます。自動保存を使わないなら、/etc/serial.conf を手で編集する のも良いでしょう。バージョン 2.15 に関しては、Debian は自動保存を有効 にしてシステムをインストールしますが、RedHat 6.0 は /usr/doc/setserial-2.15/rc.serial があるだけで、それを /etc/init.d/ へ移動しなければなりません。 バグ : 1999 年 6 月現在では、次のようなバグおよび問題があります。 ``setserial -G /dev/ttyS?'' (ここで /etc/init.d/{set}serial stop. The "stop" command will save the current configuration but the serial ports still keep working OK. --> setserial でセットした現在の設定を、シャットダウンせずに設定ファイル (serial.conf) へ保存するには、シャットダウンの際に通常動作することを行 えば良いのです : シェルスクリプトを動かしてください。 /etc/init.d/{set}serial stop。`` いくつかのケースでは、古典的な設定手法と新しい手法の双方を使えるように してあるかもしれませんが、起動時にそのうちひとつのみを動かすことが望ま しいです。Debian では ``...pre-2.15'' はすでに旧式だとしています。 古典的な設定手法 : スクリプトの編集

2.15 (1999年) より前は、setserial の設定ファイル /etc/serial.conf がありませんでした。従って、起動時に setserial を動かしているファイルを探す必要があります。そのファイルが存 在しなかったら、それを作らなければなりません。(あるいは起動時の早い時 期に動くファイルへ追加する必要があります。) このようなファイルを現在使 用しているなら、多分 /etc ディレクトリのどこかにあります。し かし、Redhat 6.0 より前ではそのファイルは /usr/doc/setserial/ にあり、使う前に /etc へ移動しなければなりません。こういった ファイルを探すために `` あなたが探しているものは /etc/rc.d/rc.serial was commonly used in the past. The Debian distribution used /etc/rc.boot/0setserial. Another file once used is /etc/rc.d/rc.local but it's not a good idea to use this since it may not be run early enough. It's been reported that other processes may try to open the serial port before rc.local runs resulting in serial communication failure. --> 昔は、/etc/rc.d/rc.serial を一般的に使用していました。Debian は /etc/rc.boot/0setserial を使います。かつて、 /etc/rc.d/rc.local を使用していました。しかし、充分に早い段階 で動かないので、これを使うことは良い方法ではありません。 IRQs

By default, both ttyS0 and ttyS2 share IRQ 4, while ttyS0 and ttyS3 share IRQ 3. But sharing serial interrupts is not permitted unless you: 1. have kernel 2.2 or better, and 2. you've complied in support for this, and 3. your serial hardware supports it. See If you only have two serial ports, ttyS0 and ttyS1, you're still OK since IRQ sharing conflicts don't exist for non-existent devices. --> 割込み (IRQ)

デフォルトでは カーネル 2.2 あるいはそれ以上 IRQ 共有をサポートするようカーネルをコンパイルする シリアルのハードウェアが共有をサポートしている をご覧ください。シリアルポートが 内蔵モデムを追加した上で isapnp とは何でしょう?

/etc/isapnp.conf に追加できるフォーマッ トでデバイスの設定を出力する ``pnpdump'' などの、他のプログラムも入っ ています。モデム内部にあるシリアルポートの IO アドレスと IRQ を表示す るために、 What is wvdialconf ?

wvdialconf とは?

What is stty ?

stty とは何でしょう?

stty -a < /dev/ttyS2'' と タイプすると、 stty は以下の 2 つの項目を設定します : crtscts によるハードウェアフロー制御 モデムからの DCD 信号 ``clocal'' を無効にする モデムが DCD 信号を送らず clocal が無効(つまり stty が -clocal を表示 する)ならば、プログラムはシリアルポートを開けません。ポートを開けない と、プログラムはモデムからの DCD 信号を(ときには無駄に)待ち、動かなく なってしまうかもしれません。 minicom を動かすと自動的に clocal を設定するので、何も問題はありません。 しかし、-clocal で回線の設定をしようとすると、Kermit バージョン 6.0.192 は動かなくなりました。-clocal を設定すると DCD 信号がなくなり、 ``stty'' コマンドさえも動かず、表面上は clocal を設定する手段が( minicom を動かすことを除き)なくなります。しかし、minicom は -clocal が 設定してあっても、それを元に戻します。-clocal が設定してある状態から脱 出するひとつの方法は、minicom を使って (DCD 信号を受け取るために) モデ ムへ ``Trying Out Your Modem (Dialing Out)

Once you've plugged in your modem and know which serial port it's on you're ready to try using it. Before you try to get the Internet on it or have people call in to you, first try something simpler like dialing out to some number to see if your modem is working OK. Find a phone number that is connected to a modem. It you don't know what number to call, ask at computer stores for such phone numbers of bulletin boards, etc. or see if a local library has a phone number for their on-line catalog. --> モデムを試す (電話をかける)

モデムに電話線を差し込み、どのシリアルポートにつながっているのか分 かれば、試してみる準備ができました。インターネットへの接続を試す前に、 そして誰かがあなたに電話をかけてくる前に、ますモデムが正常に動作してい るか調べましょう。そのためには、いくつかの番号へ電話をかけるなど、単純 なものから試してください。まず、モデムにつながる電話番号を探してくださ い。電話番号が分からないなら、コンピュータショップで掲示板 (BBS) など の電話番号を尋ねるか、地元の図書館にオンライン目録サービスの電話番号あ るかどうか調べてください。 電話をかける準備が整ったことを確認してください。( を、詳細については をご覧ください。設定すべき速度がわから ないなら、広告上のモデムの速度より 2-3 倍速い速度をシリアルに設定して ください。「ハードウェアフロー制御」あるいは ``RTS/CTS'' といったオプ ションを選択するメニューがどこにあるのかも、覚えておいてください。動作 する電話線をモデムに差し込みましたか? ダイアルトーンが聞こえるか確か めるために、この電話線を本物の電話機につないでみるのも良いでしょう。 それから、電話をかける通信(ダイアル)プログラムを選ぶ必要があります。ダ イアルプログラムには minicom, (X window system の) seyon および kermit もあります。通信プログラムに関しては、 をご覧ください。次に 2 つの例、、および を挙げます。 Minicom で電話をかける

Minicom は多くの Linux ディストリビューションに付属しています。設 定するには root にならなければいけません。設定するためには、``minicom -s'' とタイプしてください。すると設定メニューが出てきます。あるいは、 ``minicom'' を起動し、ステータスラインを表示させるために オプションの多くは、単なる発信のためには設定する必要はありません。設定 しなければならない基本的な項目は、/dev/ttyS2 といったモデムが つながっているシリアルポートの名前、および 115200 などのシリアルポート の速度です。これはシリアルポートメニューで設定します。シリアルポートメ ニューへ移動し、設定してください。(可能なら)ハードウェアフロー制御 (RTS/CTS) も設定してください。そして、設定を保存してください。速度の設 定をしている際、`` さあ、電話をかける準備が整いました。しかしまず、`` `` Dialing Out with Kermit

You can find the latest version of . For example, say your modem was on ttyS3, and it's speed was 115200 bps. You would do the following: --> Kermit で電話をかける

にあります。例えば、モデム が ttyS3 につながっており速度が 115200 bps のときには、以下の ようにしましょう : linux# kermit C-Kermit 6.0.192, 6 Sep 96, for Linux Copyright (C) 1985, 1996, Trustees of Columbia University in the City of New York. Default file-transfer mode is BINARY Type ? or HELP for help. C-Kermit>set line /dev/ttyS3 C-Kermit>set carrier-watch off C-Kermit>set speed 115200 /dev/ttyS3, 115200 bps C-Kermit>c Connecting to /dev/ttyS3, speed 115200. The escape character is Ctrl-\ (ASCII 28, FS) Type the escape character followed by C to get back, or followed by ? to see other options. ATE1Q0V1 ; you type this and then the Enter key OK ; modem should respond with this ATDT7654321 ここで、7654321 は電話番号です。もしダイヤル回線を使っているなら、 To get back to the Ctrl-\-C (Back at linux) C-Kermit>quit linux# これは原始的な「手動」ダイヤリング手法を用いたテストです。通常の方法で は、内蔵モデムデータベースおよび自動的に電話をかける機能を用いて、 linux# kermit C-Kermit 6.0.192, 6 Sep 1997, for Linux Copyright (C) 1985, 1996, Trustees of Columbia University in the City of New York. Default file-transfer mode is BINARY Type ? or HELP for help C-Kermit>set modem type usr ; Select modem type C-Kermit>set line /dev/ttyS3 ; Select communication device C-Kermit>set speed 115200 ; Set the dialing speed C-Kermit>dial 7654321 ; Dial Number: 7654321 Device=/dev/ttyS3, modem=usr, speed=115200 Call completed. Connecting to /dev/ttyS3, speed 115200 The escape character is Ctrl-\ (ASCII 28, FS). Type the escape character followed by C to get back, or followed by ? to see other options. Welcome to ... login: ダイヤルイン

ダイヤルインとは、あなたの電話番号をダイヤルしてあなたの PC を使え るように、あなたの PC を設定することです。「視点」はあなたの PC 側にあ ります。あなたの PC から発信すると、他のコンピュータへダイヤルインする ことになります。(あなた自身のコンピュータへ電話をかけないでください) ダイヤルインは以下のように動作します。誰かがモデムであなたの電話番号を ダイヤルします。あなたのモデムは応答し、接続します。発信者とつながると、 あなたの PC はログインプロンプトを発信者へ送ります。そして、発信者はあ なたの PC へログインします。あなたの PC を使うことは、発信者がシェルア カウントを有し、コンソール(あるいはテキスト端末)からログインした場合と 全く同じように、あなたの PC を使えることを意味します。また、発信者がイ ンターネットへ接続できることにもなります。あなたの PC 上でこのダイヤル インを扱うプログラムを ログインの後、発信者をインターネットへ接続するような他のプログラムが動 くこともあります。この HOWTO ではログインの後に動くこのようなプログラ ムは対象としていません。インターネットへつなぐためには、たいてい PPP プログラムが動きます(もうすぐ新しいバージョンが出る予定の PPP-HOWTO を ご覧ください)。通信プログラムがログイン名とパスワードを毎回自動的に入 力し、ログインを自動化しているかもしれません。 [訳注 : JF プロジェクトによる日本語訳 ] 56k でダイヤルインできるようにするつもりなら、以下のことをしない限り不 可能です : 電話会社へトランクサイド T1 あるいは ISDN などでデジタル接続する。 特別なデジタルモデムを使用する。 デジタルモデムに「コンセントレータ」などの、電話会社のデジタル回 線へつなぐインタフェースがある。 「コンセントレータ」を「モデムコンセントレータ」あるいは「リモートアク セスコンセントレータ」とも呼びます。モデムがつながる「リモートアクセス サーバ」にも、コンセントレータがあるかもしれません。もし上記の条件すべ てを満たせるなら、あなたは ISP (プロバイダ)でしょう。 getty

/etc/inittab が呼び出さなければなりません。このファイルの中に、 若干変更が必要となる getty を呼び出す例が見つかるかもしれません。例に 挙げたものとは異なる getty プログラムを使うのなら、オプションの形式が 異なるので、/etc/inittab を大幅に変更する必要があるでしょう。

ダイヤルインのために使える、4 つの異なる getty プログラムがありま す : /etc/inittab で使用する getty に合った正しい文法を使うよう確認してください。 mgetty について

および で見つけられます。 uugetty について

をご覧ください。その他の getty はそれに 付属している文書で充分です。 getty_em について

これは uugetty の簡易版です。getty_ps および uugetty に複雑なサポー トファイルが必要になって完全に途方に暮れたので、Vern Hoxie さんが書き ました。 getty_em は において FTP で 入手可能な、Vern Hoxie さんのシリアルポートユーティリティおよび情報コ レクションの一部です。このコレクションの名前は ``About agetty and mingetty

agetty および mingetty について

What Happens when Someone Dials In ?

The caller runs some sort of communication program that dials your telephone number and your telephone rings. There are two different ways that your PC can answer the phone. One way is for the modem to automatically answer the call. The other way is for getty to sense the ringing and send a command to the modem to answer the call. Once the call is answered, your modem sends tones to the other modem (and conversely). The two modems negotiate how they will communicate and when this is done your modem sends a "CONNECTed" message (or the like) to ダイヤルインの際に何が起こりますか?

発信者はあなたの電話番号をダイヤルする通信プログラムを動かし、あな たの電話が鳴ります。ここで PC は 2 つの異なる方法で電話に応答できます。 ひとつはモデムが自動的に応答するものです。もうひとつは getty が着信を 感知し、モデムに応答するようコマンドを送るものです。いったん応答すると、 モデムは対向するモデムへ(逆方向に)信号を送出します。2 つのモデムはどの ように通信するのか取り決め、それが済むとモデムは `` 着信に応答する 2 つの方法をより詳しく述べます。モデムの S0 レジスタを 3 に設定すると、モデムは 3 回目のベルで自動応答します。0 に設定すると、 電話が鳴っている間に getty がモデムに `` 「手動」応答では起動時に 自動応答時には、接続の確立を検知するため、モデムからシリアルポートへの CD (Carrier Detect = キャリア検知)配線を使用します。これは以下のように 動作します。起動時に 手動応答時には CD 信号がないため、getty がどのようにしてシリアルポート を開くのか不思議に思うかもしれません。たとえ CD 信号がなかったとしても、 ポートを開くよう強制するプログラムを書く方法があります。 なぜ手動応答が最も良いのか

コンピュータが停止していてもモデムがまだ動作している場合、応答にお ける 2 つの手法間で違いが現れます。手動応答では `` Callback

Callback is where someone first dials in to your modem. Then, you get a little info from the caller and then call it right back. Why would you want to do this? One reason is to save on telephone bills if you can call the caller cheaper than the caller can call you. Another is to make sure that the caller really is who it claims to be. If a caller calls you and claims to be calling from its usual phone number, then one way to verify this is to actually place a new call to that number. --> コールバック

コールバックでは、誰かがあなたのモデムへまずダイヤルし、発信者の情 報を得て折り返し電話をかけます。なぜこんなことをしたいのでしょうか? ひとつには、発信者があなたに電話をかけるよりも、あなたが発信者にかける ほうが料金が安いのならば、電話料金を節約できるからです。もうひとつは、 発信者が本当に接続してよい人物かどうかを確認するためです。発信者があな たに電話をかけて、ある電話番号からかけていると主張したなら、これを確か めるひとつの方法はその番号へ電話をかけなおすことです。 Linux には mgetty とともに動作する ``callback'' という名のプログラムが あります。 にあります。どの ように callback (および PPP) をインストールしたのか、手順を追った解説 書が にあります。 ボイスメール

ボイスメールはコンピュータが動かす応答装置のようなものです。ボイス メールを扱うためには、モデムが「音声」をサポートしていること、および補 助ソフトウェアが必要です。テープにメッセージを保存するのではなく、ディ スク上にデジタル形式で保存します。誰かがあなたに電話をかけてきたときに、 応答メッセージを聴いてからメッセージを残せます。より高度なシステムは、 発信者がメールボックスや応答メッセージを選択できるでしょう。Linux にも 簡易な可能にするフリーソフトウェアがありますが、高性能なものはまだでき ないようです。 著者は Linux の 2 つの異なるボイスメールソフトウェアを知っています。ひ とつは非常に小さいものです( をご覧ください)。もうひとつは をご覧ください。 現在 Uugetty for Dial-In (from the old Serial-HOWTO)

Be aware that you could use mgetty as a (better?) alternative to for a brief comparison of these 2 gettys. --> ダイヤルイン用の uugetty (古い Serial-HOWTO から引用)

mgetty を をご 覧ください。 getty_ps のインストール

uugetty は getty_ps の一部なので、まず最初に getty_ps をインストー ルしなければなりません。手元になければ、 から最新バー ジョンを手に入れてください。特に、(57600 あるいは 115200 bps の)高速通 信をしたいなら、バージョン 2.0.7j 以降が必要です。また、libc 5.x 以降 も必要です。

デフォルトでは、/sbin に入っていて、設定ファ イルは /etc/conf.{uu}getty.ttyS/var/lock に作ります。ディレクトリ /var/lock があることを確認してください。

FSSTND に従いたくないなら、バイナリは /etc に、設定ファイ ルは /etc/default/{uu}getty.ttySN になり、ロックファ イルは、/usr/spool/uucp に入ります。もし UUCP を使うなら、こ の方法を勧めます。なぜなら、UUCP は自分の知らないところへロックファイ ルを移すと問題を起こすことがあるからです。

更に、getty_pssyslogd を使ってメッセージの記 録を取ります。もし、まだ syslogd を動かしていないのなら、 syslogd(1)syslogd.conf(5) の man ページを見て設 定して下さい。メッセージは優先度付きで syslogd を使いたくなければ、getty_ps のソースファイ ルの中にある tune.h を編集してメッセージ出力やデバッグにはロ グファイルを使用するように変更しましょう。省略時のログファイル名は /var/adm/getty.log になります。

FSSTND 基準と syslogd の機能を採用するか決めてください。もちろん 2 つを組み合わせることも出来ます。Makefile, tune.h お よび config.h を、決定通りに編集します。パッケージに含まれる 説明に従ってコンパイルし、インストールします。 uugetty の設定

/dev/cuaN を電話をかけるために使うと述べ ています (uugetty は /dev/ttyN で動いています)。しかし、他の 人はダイヤルインとダイヤルアウトの両方で /dev/ttyN を使わなけ ればならないと言います。どちらが正しいのでしょう??? [訳注 : /dev/cuaN/dev/ttyN に関する議論は にあります。] /etc/gettydefs にモデムのエントリを追加します。 /etc/gettydefs の編集が終ったら、以下のようにして記述が正しい か確認できます : linux# getty -c /etc/gettydefs 最近のモデム

データ圧縮機能を持つ 9600 bps 以上のモデムでは、シリアルポートをひ とつの速度へ固定できます。例えば : # 115200 fixed speed F115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #F115200

RTS/CTS ハードウェアフロー制御を行うよう設定するなら、 # 115200 fixed speed with hardware flow control F115200# B115200 CS8 CRTSCTS # B115200 SANE -ISTRIP HUPCL CRTSCTS #@S @L @B login: #F115200 古い低速のモデム

(9600 bps 以下の)低速モデムでは、特定の速度用に 1 行記述する代わり に、いくつかの速度を試すために複数の行が必要です。 # Modem entries 115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #57600 57600# B57600 CS8 # B57600 SANE -ISTRIP HUPCL #@S @L @B login: #38400 38400# B38400 CS8 # B38400 SANE -ISTRIP HUPCL #@S @L @B login: #19200 19200# B19200 CS8 # B19200 SANE -ISTRIP HUPCL #@S @L @B login: #9600 9600# B9600 CS8 # B9600 SANE -ISTRIP HUPCL #@S @L @B login: #2400 2400# B2400 CS8 # B2400 SANE -ISTRIP HUPCL #@S @L @B login: #115200

ログインバナー

お望みなら、 @B The current (evaluated at the time the @B is seen) bps rate. @D The current date, in MM/DD/YY. @L The serial line to which uugetty is attached. @S The system name. @T The current time, in HH:MM:SS (24-hour). @U The number of currently signed-on users. This is a count of the number of entries in the /etc/utmp file that have a non-null ut_name field. @V The value of VERSION, as given in the defaults file. To display a single '@' character, use either '\@' or '@@'. --> @B 現在の通信速度 (bps, @B を変換するときに調べる) @D MM/DD/YYであらわされる年月日 @L uugetty が属するシリアルライン (ttySN) @S システム名 @T HH:MM:SS で表される時分秒 (24時間制). @U 現在の接続ユーザー数     これは、 /etc/utmp ファイル内の ut_name フィールド     のうち有効なレコードの数です。 @V バージョン デフォルトファイルで指定した OS バージョン '@' そのものを表示したければ、 '\@' か '@@' を使ってください。 uugetty のカスタマイズ

各ポートを自在に制御できる数多くのパラメーターが揃っています。それ ぞれのポートを個別に設定できるようポート単位の設定ファイルが用意されて います。/etc/conf.uugettyuugetty 共通の 設定ファイルで、/etc/conf.uugetty.ttySN がそのポート だけの設定ファイルです。たいていの linux ディストリビューションに付属 している getty_ps のソースファイルの中に、これらのサンプルファ イルが含まれています。スペースの関係で、ここには掲載しません。(2.0.7e 以前の)古いバージョンの uugetty を使っているか、FSSTND 互換に しなかった場合は、設定ファイルは /etc/default/uugetty.ttySN になっていることに注意し て下さい。著者の /etc/conf.uugetty.ttyS3 は、次のようなもので す。 # sample uugetty configuration file for a Hayes compatible modem to allow # incoming modem connections # # alternate lock file to check... if this lock file exists, then uugetty is # restarted so that the modem is re-initialized ALTLOCK=cua3 ALTLINE=cua3 # line to initialize INITLINE=cua3 # timeout to disconnect if idle... TIMEOUT=60 # modem initialization string... # format: ... (chat sequence) INIT="" AT\r OK\r\n WAITFOR=RING CONNECT="" ATA\r CONNECT\s\A # this line sets the time to delay before sending the login banner DELAY=1 #DEBUG=010 次に、/etc/inittab へ以下に示す行を追加します。シリアルポート に対して uugetty が動くよう、(2345 あるいは 345 といった)ラン レベル、設定ファイルの場所、ポート、速度、そしてデフォルトの端末タイプ などの環境に合わせて正しく設定してください。 S3:2345:respawn:/sbin/uugetty -d /etc/default/uugetty.ttyS3 ttyS3 F115200 vt100 linux# init q /etc/inittab において、速度パラメータとしてモデムがサポートす る最高速度を使いたいでしょう。

これで、シリアルポートへの接続を Linux が監視します。別のマシンから 電話をかけ、Linux へログインしてください。

uugetty と呼ばれる) getty(1m) のマニュアルを見 てください。この他にもスケジューリング機能やコールバック機能があります。 [訳注 : マニュアルの管理コマンドセクション What Speed Should I Use with My Modem?

By "speed" we really mean the "data flow rate" but almost everybody incorrectly calls it speed. For all modern modems you have no choice of the speed that the modem uses on the telephone line since it will automatically choose the highest possible speed that is possible under the circumstances. But you do have a choice as to what speed will be used between your modem and your computer. This is sometimes called "DTE speed" where "DTE" stands for Data Terminal Equipment (Your computer is a DTE.) You need to set this speed high enough so this part of the signal path will not be a bottleneck. The setting for the DTE speed is the maximum speed of this link. Most of the time it will likely operate at lower speeds. --> モデムで使うべき速度は?

著者は「速度」を「データ転送速度」のつもりで使っていますが、ほとん どの人は間違って速度と呼んでいます。最近のモデムは状況が許す最も高い速 度を自動的に選択するので、ユーザがモデムの電話回線上での速度を選べませ ん。しかし、モデムとコンピュータ間の速度なら選べます。この速度を「DTE 速度」と呼ぶこともあります。ここで、``DTE'' は Data Terminal Equipment を表します(コンピュータは DTE です)。信号が流れる経路の中でこの部分が ボトルネックにならないよう、この速度を充分に速く設定する必要があります。 DTE 速度の設定は、この接続で可能な限り高い速度にします。多くの場合、恐 らくそれより低い速度でしか使わないでしょう。 外付けモデムでは、DTE 速度はモデムと PC の間のケーブルを流れるデータの 速度です (bit/sec で表現します)。内蔵モデムでは、シリアルポートのよう に動作するので、外付けモデムと同じように考えます。モデムボードとコン ピュータはかなり高速なバスで直接接続されているので、速度に限界があるこ とはおかしいと感じるかもしれません。しかし、モデムボードには速度に限界 のある(そして速度を設定できる) 専用のシリアルポートがあるのです。 速度とデータ圧縮

どのような速度を選びましたか? 「データ圧縮」がなければ、モデムの 速度とちょうど同じ DTE 速度を選ぶ人もいるでしょう。データ圧縮はコンピュー タからモデムへ送るデータを扱い、より少ないデータへ符号化します。例えば、 PC からモデムへの速度が 20,000 bytes/sec (bps) で圧縮率が 2:1 なら、 10,000 bytes/sec のデータだけが電話回線上を流れます。従って、圧縮率が 2:1 だと、電話回線上での最も高いモデムの速度の2 倍を設定する必要があり ます。圧縮率が 3:1 なら、3 倍高速に設定しなければなりません。 どこで速度を設定するの?

通常、DTE 速度は通信プログラムのメニューや、ダイヤルインの際に使う getty コマンドのオプションで設定します。モデム間の DCE 速度は設定でき ません。 充分に高い速度へ設定できない

ハードウェアがサポートする最も高い速度を知る必要があります。1998 年の終りには、多くのハードウェアは 115.2K bps 程度の速度をサポートして いました。そして、少数の 56K 内蔵モデムだけが 230.4K bps をサポートし ていました。最近の Linux カーネルは (115.2K 以上の)速い速度をサポート していますが、以下に挙げる複数の理由により、それを利用するには困難が伴 うかもしれません。 アプリケーションプログラム(あるいは stty) が 速い速度に対応できない。 setserial のデフォルト速度は 115,200 bps である (しかし、変更は簡単です)。 どのようにハードウェア中で速度が設定されているか : 除数とボーレート

ここに、通常使用する除数の一覧を挙げます。(最高速度が 115,200 なら) 対応する速度は : 1 (115.2K), 2 (57.6K), 3(38.4K), 6 (19.2K), 12 (9.6K), 24 (4.8K), 48 (2.4K), 96 (1.2K) などです。シリアルドライバは (正の整数の) 「除数」だけを送り、ハードウェアに速度を設定します。この 「除数」でハードウェアの最高速度を割り、より遅い速度になります(明らか ですが、除数 1 はハードウェアに最高速度で動作するよう命令します)。 通常、(通信プログラムか stty で) 115.2k の速度を指定したなら、シリアル ドライバはポートのハードウェアを、最も速い速度を指定する除数 1 に設定 します。最高速度が 230.4k のハードウェアをたまたま持っていたなら、 115.2k を指定すると除数が 1 となり、実際に設定される速度は 230.4k にな ります。設定の 2 倍になります。事実、どの速度に設定しても、本当の速度 は設定の 2 倍になります。460.8k で動作するハードウェアでは、本当の速度 は設定した速度の 4 倍になります。 速度設定のおまけ

(必ずしも問題を解決できるとは限りませんが)この状態を修正するため、 ``setserial'' の setserial /dev/ttyS2 spd_cust baud_base 230400 divisor 1 Don't try using "divisor" for any other purpose other than the special use illustrated above (with spd_cust). --> それほど好ましくはないのですが、もうひとつおまけがあります。(setserial で) setserial /dev/ttyS2 spd_cust baud_base 230400 divisor 1 ( --> 通信プログラムで設定できないような高速の設定を使いたいとしても、上の例 と同じくらい簡単にはいきません。しかし、同じ原理が適用できます。 をご覧ください。 水晶の振動数は baud_base ではありません

たいてい、設定した 速度表

56k モデムがあるので、最低でも 16650 UART を使うのがもっとも良いで す。しかし、ほとんどのモデムは 56k を出せません。次に良いのは、230,400 bps を出すよう 16650 UART を調整することです。モデムの速度によって異な る、望ましいシリアルの速度をここに挙げます : 56K (V.90) モデムでは 115200 bps あるいは 230400 bps (もう数 % 速く ?) 28.8K (V.34), 33.6K (V.34) モデムでは 115200 bps V.42bis データ圧縮付き 14400 bps (V.32bis) モデムでは 57600 bps V.42bis データ圧縮付き 9600 bps (V.32) モデムでは 38400 bps 9600 bps (V.32) より低速のモデムではモデムがサポートする最高速度 通信プログラムとユーティリティ

PPP は非常に広く使われており、インターネットへの接続に使用します。 公立図書館、あるいは掲示板などへ電話をかけるためには、 Minicom vs. Kermit

Minicom is only a communications program while Kermit is both a communications program and a file transfer protocol. But one may use the Kermit protocol from within Minicom (provided one has Kermit installed on one's PC) . Minicom is menu based while Kermit is command line based (interactive at the special Kermit prompt). While the Kermit program is free software, the documentation is not all free. There is no detailed manual supplied and it is suggested that you purchase a book as the manual. However Kermit has interactive online help which tells all but lacks tutorial explanations for the beginner. Commands may be put in a script file so you don't have to type them over again each time. Kermit (as a communications program) is more powerful than Minicom. --> Minicom と Kermit

Minicom はただの通信プログラムです。一方、Kermit は通信プログラム でもありファイル転送プロトコルでもあります。しかし、(Kermit を PC にイ ンストールしたなら) Minicom を使用中に Kermit プロトコルを使う人もいる かもしれません。Minicom はメニューベースで、Kermit は(専用プロンプトで の対話的な)コマンドラインベースです。Kermit はフリーソフトウェアですが、 ドキュメントはすべてがフリーと言うわけではありません。詳細なマニュアル はなく、マニュアルとして書籍を購入するよう勧めています。しかし、Kermit はすべての項目について対話的なオンラインヘルプがあるものの、初心者向け のチュートリアルがありません。コマンドはスクリプト中に記述するので、毎 回コマンドをタイプする必要がありません。(通信プログラムとしての) Kermit は Minicom よりも強力です。 Minicom のドキュメントはすべてフリーであるものの、Kermit の文書ほど広 範囲にわたる記述はありません。商用ディストリビューションに Kermit を収 録するには許可が必要です。文書が完全にフリーではないため、Kermit を収 録しないディストリビューションもあります。著者の意見では、Minicom の設 定はより簡単で、学ばなければいけないことも少ないです。 プログラムのリスト

FTP で入手できる通信プログラムの一覧を挙げます。ディストリビューショ ンに含まれていないなら、この一覧から選んでください。まず、ダイヤルアウ トを行うプログラムを比較したいと思います。最も人気のないものは既に時代 遅れなのでしょうか? 最も人気のないダイヤルアウトプログラム

最も人気のあるダイヤルアウトプログラム

- ファ イル転送、文字コード変換、そして zmodem をサポートする移植性の高いス クリプトが組めるシリアルと TCP/IP の通信プログラム Fax

ボイスメールソフトウェア

は Linux 用の非常に小さいボイスメールソフトウェアです。 vgetty はモデム用のボイスメールを扱う mgetty の拡張です。 mgetty の新しいバージョンに同梱されています。 (getty を用いた) ダイヤルイン

(1999 年の始めでは、ボイスメールに関する部分を除いて) モデム用 の をご覧ください。 をご覧ください。 その他

をご覧ください。 SLIP と PPP のソフトウェアは で 見つけられます。 他には あるい は多くのミラーサイトで見つけられます。これらはシリアル通信に関連した プログラムがあるディレクトリです。 SLiRP と term

UNIX 系のマシンにダイヤルアップのシェルアカウントしかなく、認証な しで(あるいは追加料金を払いたくないなどの理由で) PPP アカウントと同等 の機能を使いたい場合、 What Are UARTs? How Do They Affect Performance?

(この節は Serial-HOWTO にもあります) UART ( UART の目的は PC のパラレルバスからやってくるバイトデータを、シリアルの ビットストリームに変換することです。シリアルポートから出ているケーブル はデータをシリアルに送るようになっており、データが流れる方向それぞれ について 1 つしか線がありません。シリアルポートは一度に 1 ビットずつ ビットストリームを送ります。逆に、外付けケーブルを経由してシリアルポー トに入ってきたビットストリームは、コンピュータが処理できるパラレルな バイトデータに変換されます。UART はデータをバイト単位で扱います。この 単位は都合がいいことに ASCII 文字の大きさでもあります。 PC にぶら下がっている端末があるものとします。ユーザが文字を入力すると、 端末はその文字をトランスミッタに (UART にも)送ります。トランスミッタは そのバイトデータをシリアル回線に送り、送信は 1 バイトずつ、特定の速度 で行います。PC 側では、受信を行う UART がビット列を全て受け取り、(パラ レルの)バイトデータに復元し、これをバッファに入れます。 シリアルとパラレルの変換に加えて、UART は主な処理の副産物(副作用)とし て他の処理もいくつか行います。ビット列を表すために使う電圧も変換(変更) します。バイトデータを送信する前に、それぞれのバイトに対して追加のビッ ト(いわゆるスタートビットとストップビット)を加えます。詳しくは Serial-HOWTO の「電圧の波形」の節を見てください。また、コンピュータ内 部のパラレルバス上のフローレート(バイト/秒)は 非常に高く、シリアルポー ト側の UART から出るフローレートはこれよりもずっと遅いです。UART はい くつかの決められたフローレート(速度)の組を持っていて、これをシリアルポー トインタフェースで使うことができます。 [ 訳注 : JF プロジェクトによる日本語訳 ] 2 種類の UART

UART の基本的な種類は 2 つ(ダム UART と FIFO UART) あります。ダム UART は 8250, 16450, 初期型 16550, 初期型 16650 です。これらは時代遅れ のものですが、これらの動作の仕組みがわかれば、FIFO UART (最近の 16550, 16550A, 16c552, 最近の 16650, 16750, 16950) の動作を理解するのも容易で す。 16550 については紛らわしい点がいくつかあります。初期モデルにはバグがあ り、(FIFO を持たない) 16450 としてしか正しく動作しません。バグが修正さ れた最近のモデルには 16550A という名前が付いていますが、多くのメーカー は名前を変更しておらず、16550 と呼び続けています。現在使われている 16550 の大部分は 16550 のようです。ハードウェアのマニュアルに 16550 で あると書かれていても(あるいはラベルにそのように刻印されていても)、 Linux は 16550A であると認識してくれます。同様の事情が 16650 にもあり ます(こちらの方が深刻です。というのも、聞いた話ではメーカーがバグを認 めなかったからです)。Linux は最近の 16650 を 16650V2 として認識します。 16650 と認識された場合には残念ながら、1 バイトのバッファしか持ってい ないように動作します。 FIFO

ダムと FIFO (キューの動作がファーストイン・ファーストアウト (First In, First Out) である)の違いを説明するために、まずは UART が 1 バイト のデータを送受信した場合のことを調べてみましょう。UART 本体は自分を通 るデータに関しては何も行わず、単にデータを送受信するだけです。元々のダ ム UART の場合は、バイトデータが送受信される度に CPU がシリアルデバイ スから割込みを受け取ります。CPU はこれを受けて、受信したバイトデータ を UART のバッファから取り出してメモリ上のどこかに置くか、送信すべき次 のバイトデータを UART に渡すかの、どちらか動作を行います。8250 と 16450 UART には 1 バイトしかバッファがありません。つまり、1 バイトのデー タを送受信する度に CPU に割込みがかかります。転送速度が低ければこれ でも大丈夫です。しかし、転送速度が高速である場合には、UART の処理の負 荷が CPU にかかりすぎるため、他の処理をうまく行えるだけの時間がなくなっ てしまいます。場合によっては、CPU の割込み処理が間に合わなくなってし まい、バイトデータが上書きされてしまいます。なぜなら、データが入ってく るのが速過ぎるからです。これは「オーバーラン (overrun)」あるいは「オー バーフロー (overflow)」と呼ばれます。 これが FIFO UART が役立つ理由です。16550A (あるいは 16550) の FIFO チッ プには 16 バイトの FIFO バッファが付いています。つまり、CPU に割込み がかかるまでに 16 バイトまでを受け取る(送る)ことができるのです。たくさ んのバイトデータを待つことができるだけではなく、CPU は 14 バイト(また はそれ以上)のバイトデータを同時に転送できます。これは、バッファを 1 バ イトしか持っていない他の UART に対して特に優れている点です。CPU が受け る割込みも少なく他の処理に回せますし、データがなくなることもなく皆幸 せになれます。FIFO バッファの割込みの閾値(トリガレベル)には 14 以下 の値が設定できる点に注意してください。この他には 1, 4, 8 が選べます。 大抵の PC には 16 バイトのバッファを持つ 16550 しか付いていませんが、 高級な UART にはもっと大きなバッファがあります。割込みはバッファがいっ ぱいになる直前 (16 バイトのバッファでは 14 バイトのいわゆる「トリガレ ベル」の時点)に発行される点に注意してください。こうすることにより、割 込みサービスが実行される間にも何バイトかのデータを受け取れる余裕が残り ます。このトリガレベルには、カーネルのソフトウェアが許可した色々な値を 設定することができます。トリガレベルを 1 にすると、ダム UART とほぼ同 等になります (ただし、割込みを発行した後にもさらに 15 バイトを受け取る 空きが残っている点が異なります)。 BBS に入っているときに何か文字を入力した場合、入力した文字はシリアルポー ト経由で送り出されます。入力した文字が画面に表示されるのは、その文字が 電話回線・モデム・シリアルポート経由で画面にエコーバックされているから です。シリアルポートに 16 バイトのバッファが付いている場合(これは 14 バイト集まるまで文字を送ってくれません)、入力した文字が表示されるまで には文字をたくさん入力しなければならないでしょう。とても紛らわしいので すが、これを防ぐための「タイムアウト」があります。従って、普通は文字を 入力すると、その文字はすぐに画面に表示されます。 UART の受信バッファの場合、この「タイムアウト」は 以下のように動作しま す : 文字が次々とやってきても、割込みは発行されるのは、バッファに例え ば 14 個文字がたまったときだけです。しかし、ある文字が届いた後にしばらく 次の文字が届かなくても割込みが発行されます。この割込みはたとえバッ ファに 14 個文字が入っていなくても発行されます (1 文字でも入っていれば 発行されます)。したがって、このバッファを通して文字を入力すると、バッ ファの大きさが実際には 16 バイトであっても(あなたが文字を打ち込む速さ が普通の 100 倍でなければ) 1 バイトのバッファのように動作します。同様 の「タイムアウト」が送信バッファにもあります。 UART のモデル番号

以下の UART の一覧を示します。 8250, 16450, 初期の 16550: バッファの大きさが 1 バイトである時代遅れの UART です 16550, 16550A, 16c552: 16 バイトのバッファがあります (TL=1,4,8,14) 16650: 32 バイトのバッファがあります。460.8 Kbps までの速度に対 応しています 16750: 16750: 64 バイトの送信バッファ、56 バイトの受信バッファ があり ます。921.6 kbps までの速度に対応しています Hayes ESP: 1K バイトのバッファがあります 時代遅れの UART がうまく動作するのは 14.4k より遅いモデム (DTE 速度は 38400 bps まで)の場合だけです。最近のモデムでは、少なくとも 16550 (初 期型 16550 は含みません)が必要です。V.90 規格の 56k モデムの場合に は、 16650 を使うと数パーセント速くなることがあります(特に圧縮されていない ファイルをダウンロードするとき)。16650 を使う主な利点はバッファのサイズ が大きいことであり、モデムの圧縮比が高くなければ必要以上の速度が必要 ない点です。一部の 56k 内蔵モデムには 16650 が載っていないものがあり ます(筆者は確かめていません)。 UART でなくインテリジェントなマルチポートボードでは、DSP チップを使っ てさらなるバッファリングと制御を行っています。したがって、CPU の負荷は さらに軽くなっています。例えば、Cyclades 社製の Cyclom や Stallion 社 製のEasyIO ボードは Cirrus Logic CD1400 RISC UART を使って、これ以外の 多くのボードは 80186 CPU や特殊な RISC CPU さえ使ってシリアル I/O を処 理します。 最近の PC のほとんど (486, Pentium 以降のマシン)には 16550A (普通は単 に16550 と呼ばれます)が載っています。実は古いチップが載っていたという 場合には、既存の 16450 チップを外して、新しく買った 16550A チップと置 き換えることにより、アップグレードすることができます。他のタイプのチッ プが載っていた場合は、残念ながらあきらめてください。UART がソケット形 式ならば、(置き換えるチップさえあれば)アップグレードは簡単でしょう。新 しいチップと古いチップのピン配置は互換です。新しいシリアルボードをイン ターネットで購入することもできるかもしれません(現在はシリアルボードを 扱っている小売店はほとんどありません)。 トラブルシューティング

内蔵モデムを既に取り付けた、あるいは外付けモデムがつながっているシ リアルポートがわからない場合は、次の課題はシリアルポートを検出すること です。 をご覧ください。この節では、モデムが接続してい るシリアルポートを検出することに関して述べます。 ``wvdialconf'' という使用中のシリアルポートからモデムを探し出すプログ ラムがあります。`` をご覧ください。 Linux では使えないソフトウェアモデムなどが原因の問題かもしれません。 をご覧 ください。``setserial'' はシリアルポートを検出するために使いますが、ポー トにつながっているモデムの検出はしません。従って、まず ``wvdialconf'' を試すのが最も良い方法です。 ポート上にモデムがあるかどうか確かめるもうひとつの方法は、``minicom'' を起動することです ( をご覧くだ さい。 56k モデムで 56k に近い速度が出ません

56k 近い速度で通信するには、回線のノイズが非常に低いことが必要です。 電話回線の品質が非常に悪く、56k よりもずっと遅い (28.8k あるいは更に遅 い) 速度しか得られないことがあります。同一の回線に接続した内線電話は、 問題を引き起こすこともあります。これを確かめるため、(他の人が許してく れるなら)回線に何もつながっていない状態で、回線がビルの中へ引き込まれ ている場所に直接モデムを接続してみるのも良いでしょう。 アップロード(ダウンロード)したファイルが壊れる、あるいは遅い

(PC あるいはモデムで)フロー制御が有効になっていないかもしれません。 (115.2k などの)速い DTE 速度を設定したなら、モデムから PC への流れは正 常に動作するでしょう。しかし、逆方向では電話回線がボトルネックになるの で、多くのデータが正常に送れないかもしれません。従って、多くのエラーと パケット再送が発生します。ファイルを送るのに非常に長い時間がかかる、あ るいは送れないかもしれません。また、ファイルを全く作れない場合もあるで しょう。(モデムのデータ圧縮を使いながら) 大きな無圧縮ファイルやウェブ ページをダウンロードしているとき、フロー制御がないためにダウンロードも うまくいかないこともあります。 ダイヤルインの際に ``line NNN of inittab invalid'' と出続ける

/etc/inittab の記述法は異なり ます。また、I Keep Getting: ``Id "S3" respawning too fast: disabled for 5 minutes''

Id "S3" is just an example. In this case look on the line which starts with "S3" in /etc/inittab. This is causing the problem. Make sure the syntax for this line is correct and that the device (ttyS3) exists and can be found. Make sure your modem is configured correctly. Look at registers ``Id "S3" respawning too fast: disabled for 5 minutes'' と出続ける

Id ``S3'' はただの例です。この場合には、/etc/inittab の ``S3'' で始まる行を見てください。この行が問題を引き起こしています。こ の行の記述方法が正しいか、デバイス ( If you use uugetty, verify that your /etc/gettydefs syntax is correct by doing the following: --> uugetty を使っているのなら、/etc/gettydefs の記述を、以下に示 すような方法で確かめてください。 linux# getty -c /etc/gettydefs の節をご覧くださ い。 誰かが電話を切ったあとモデムが止まる、あるいは uugetty が再生 成しない

DTR 信号が切れたときにモデムがリセットされないと、この現象が起きま す。Greg Hankins さんはこの現象が起きたとき、RD と SD の LED がおかし くなるのに気付きました。モデムをリセットする必要があります。多くの Hayes 互換モデムは uugetty Still Doesn't Work

There is a /etc/conf.{uu}getty.ttyS uugetty がいまだに動作しない

/etc/conf.{uu}getty.ttyS D_OPT 001 option settings D_DEF 002 defaults file processing D_UTMP 004 utmp/wtmp processing D_INIT 010 line initialization (INIT) D_GTAB 020 gettytab file processing D_RUN 040 other runtime diagnostics D_RB 100 ringback debugging D_LOCK 200 uugetty lockfile processing D_SCH 400 schedule processing D_ALL 777 everything Setting D_OPT 001 オプションの設定 D_DEF 002 デフォルトのファイル処理 D_UTMP 004 utmp/wtmp の処理 D_INIT 010 回線の初期化 (INIT) D_GTAB 020 gettytab ファイルの処理 D_RUN 040 他の実行時診断 D_RB 100 リングバック-デバッグ D_LOCK 200 uugetty ロックファイル処理 D_SCH 400 スケジュール処理 D_ALL 777 すべて まずは If you are running /tmp/getty:ttyS/tmp/uugetty:ttyS/var/adm/getty.log. Look at the debugging info and see what is going on. Most likely, you will need to tune some of the parameters in your config file, and reconfigure your modem.

You could also try

/tmp/getty:ttyS/tmp/uugetty:ttyS/var/adm/getty.log に載ります。デバッグ情報を見て何が起きてい るのか調べてください。恐らく、設定ファイルでいくつかのパラメータを調整 し、モデムを再設定する必要があります。

Troubleshooting --> 以下の節は Serial-HOWTO にも Modem-HOWTO にもあります : 物理的にはシリアルポートがあるのに、検出されません

(モデムなどの)装置がシリアルポート上で動作しているなら、明らかにポー トを検出できています。全く動作しないなら、シリアルポートを検出できるよ うに、手当てする必要があります。 BIOS のメニューと出力メッセージを確認しましょう。ISA バス上の PnP シリ アルポートの場合には、``lspci を使用してください。setserial を使って検出を行ってもよ いでしょう。 の項目を参照してくださ い。シリアルポー トにデータが何も流れていないようであれば、シリアルポー トはあっても割込みが間違っているかもしれません。 の節をご覧ください。 [訳注 : JF プロジェクトによる日本語訳 ] この上なく遅い: テキストがすごく遅れてゆっくり画面に表示されます

これは割込みの設定が間違っているか、衝突しているためでしょう。 初めてモデムや端末、プリンタを使おうとしたときに出会うような現象をいく つか示します。場合によっては、入力した文字が何秒も経たないと表示されな いことがあります。入力した最後の文字しか表示されないこともあります。 また、その文字が単に目に見えない<改行>文字で、カーソルが 1 行下 に移動したことしかわからないこともあります。また別の場合としては、 画面にデータはたくさん表示されるのですが、16 文字ごとのかたまりでしか 表示されないこともあります。そして、あるかたまりの次のかたまりが表示さ れるまでには何秒もの長い待ち時間が続きます。 「input overrun (入力オーバーラン)」のエラーメッセージが表示される(ある いはログに残る)こともあります。 詳しい症状とそれが起こる理由については、Serial-HOWTO の「割込みの問 題に関する詳しい説明」の節を見てください。 プラグ&プレイデバイスがある場合には、Plug-and-Play-HOWTO も見てく ださい。 [訳注 : JF プロジェクトによる日本語訳 および ] 本当に割込みの問題かどうかを簡単に調べるには、``setserial'' で IRQ を 0 に設定してください。これにより、ドライバは割込みではなくポーリングを 使うようになります。これで「遅い」問題が解決するようであれば、割込みの 問題が起きています。しかし、ポーリングはコンピュータの資源を大量に消費 して処理速度を低下させることもあります。ポーリングに頼らず、きちんと割 込みの問題を解決すべきです。 割込みの衝突を見つけだすのは容易ではないかもしれません。というのも、 Linux は割込みの衝突を全く許さず、衝突を起こそうとすると エラーを送っ てくるようです。しかし、``setserial'' が誤った情報を持っていると、本当 の衝突が発生します。このように、``setserial'' を使っただけでは衝突は発 生しないでしょう (``setserial'' の情報に基づく /proc/interrupts を見ることもないでしょう)。どこが悪いのか指 摘するためには、やはり ``setserial'' の設定を知る必要があります。ハー ドウェア中の本当の設定がわかったら、設定を変更してください。 こういった場合に行うべき作業は、ジャンパや PnP 設定ソフトウェアを使っ て、ハードウェアに実際に設定されている情報を調べることです。PnP の場合 は、`` Somewhat Slow: I expected it to be a few times faster

One reason may be that whatever is on the serial port (such as a modem, terminal, printer) doesn't work as fast as you thought it did. A 56k Modem seldom works at 56k and the Internet often has congestion and bottlenecks that slow things down. --> なぜか遅い: あと数倍は速いはずなのですが

考えられる理由の一つは、シリアルポートを使っているデバイス(モデム や端末、プリンタ)が、あなたが考えているほど速く動作していないことです。 56k モデムはほとんど 56k で動作することはなく、そしてインターネットは ときには輻輳を起し、速度を低下させるボトルネックが発生します。 考えられる別の理由は、あなたが使っているシリアルポートが古い(UART 8250, 16450 や初期の 16550)とシリアルドライバが認識していることです。 を参照し、``setserial -g /dev/ttyS*'' を使ってください。その結果として 16550A より性能がよ くない UART が表示されたら、これは多分設定の問題です。この場合は、 ``setserial'' の設定に問題があれば、これを変更します。詳しくは を見てください。当然のこと ですが、実際は古いシリアルポートを使っているのに setserial をだまそう としても、単に事態が悪化するだけです。 システム起動時の画面で、シリアルポートの IRQ が間違っていると 表示されます

Linux カーネルはシステムの起動時に IRQ の検出は全く行いません。 serial モジュールがロードされたときに、シリアルデバイスの検出が行われる だけです。したがって、カーネルが IRQ に関して行う表示は無視してくださ い。なぜなら、この時点では標準の IRQ を決め打ちしているからです。この ようになっているのは、IRQ 検出は当てにならず、間違うことがあるからです。 しかし setserial が起動スクリプトから実行された場合には、setserial は IRQ を変更し、新しい(そして多分正しい)状態を起動画面に表示します。間違っ た IRQ が後で訂正されて画面に表示されなければ、何か問題が起こっていま す。 よって、IRQ 5 に設定されている ttyS02 at 0x03e8 (irq = 4) is a 16550A と表示されます(古いカーネルでは `` "Cannot open /dev/ttyS?: Permission denied"

Check the file permissions on this port with "ls -l /dev/ttyS?"_ If you own the ttyS? then you need read and write permissions: crw with the c (Character device) in col. 1. It you don't own it then it should show rw- in cols. 8 & 9 which means that everyone has read and write permission on it. Use "chmod" to change permissions. There are more complicated ways to get access like belonging to a "group" that has group permission. --> "Cannot open /dev/ttyS?: Permission denied" というエラーが出ます

`` "Operation not supported by device" for ttyS?

This means that an operation requested by setserial, stty, etc. couldn't be done because the kernel doesn't support doing it. Formerly this was often due to the "serial" module not being loaded. But with the advent of PnP, it may likely mean that there is no modem (or other serial device) at the address where the driver (and setserial) thinks it is. If there is no modem there, commands (for operations) sent to that address obviously don't get done. See --> ttySx について "Operation not supported by device"

このエラーは、カーネルがサポートしていないために、setserial や stty 等が要求した操作が行えないという意味です。以前は ``serial'' モジュー ルがロードされてないことが原因の場合が多かったのですが、PnP の登場によ り、このエラーはドライバ(および setserial)が考えているアドレスにモデム (あるいは他のシリアルデバイス)がないことを示すことが多くなりました。こ ういったアドレスにモデムがなければ、そのアドレスに送られた(操作のため の)コマンドは当然ながら処理されません。 の節をご覧ください。 ``serial'' モジュールがロードされていないのに、そのモジュールはさっき ロードしたと ``/etc/modules.conf または /etc/modules に記述しておき ます。モジュールそのものは /lib/modules/.../misc/serial.o に あるはずです。 "Cannot create lockfile. Sorry"

何らかのプログラムがポートを「オープン」するとき、ロックファイルが /var/lock/ に作られます。ls -ld /var/lock'' を使います。 普通は全員に対してchmod 1777 /var/lock を実行してください。詳細は chmod(1) をご覧ください。 JF プロジェクトによる日本語訳 ] "Device /dev/ttyS? is locked." (デバイス /dev/ttyS? がロックされています)

このメッセージが出た場合にはおそらく、誰か他の人(あるいは他のプロセ ス)がシリアルポートを使っています。このポートを「使用中」のプロセスを 見つける方法はいくつもあります。一つの方法は、ロックファイル (/var/lock/LCK...)の中身を見ることです。これは、ポートを使っ ているプロセスの ID のはずです。プロセス ID が 例えば 261 ならば、 `` "/dev/ttyS?: Device or resource busy"

This problem can arise when you are trying to dial out with a modem when DCD or DTR are not implemented correctly. DCD should only be on (asserted) when there is an actual connection (ie someone has dialed in), not when "/dev/ttyS?: Device or resource busy"

モデムで電話をかけようとしたときにDCD あるいは DTR が正常に動作し ないと、この問題が起こります。DCD は ``resource busy'' は多くの場合、(ttyS2 の場合)「他のデバイスが ttyS2 の割込みを使用中なので、ttyS2 を使うことはできません」という意味です。 ``setserial'' の設定による割込みの衝突の可能性があります。このエラーメッ セージをもっと正確に言うと、「ttyS2 を使えません。setserial のデータが、 他のデバイスが ttyS2 の割込みを使っていると示しています」となるでしょ う。 これには 2 つの可能性があります。ひとつは割込みが実際に衝突している場 合で、これは修正しなければなりません。しかし、setserial が誤った割込み を設定しているのなら、 Troubleshooting Tools

These are some of the programs you might want to use in troubleshooting: --> トラブル対処のためのツール

トラブルに対処する時に使うとよいプログラムがいくつかあります:

``lsof /dev/ttyS*'' は開いているシリアルポートを表示し ます。 ``setserial'' は(ドライバが存在すると考えた)ポートの低レベルハー ドウェア設定の表示と設定を行います。 をご覧ください。 ``stty'' は (``setserial'' が扱う部分を除き) ポートを設定し、表 示します。Serial-HOWTO の ``stty'' の節をご覧ください。 ``modemstat'' と ``statserial'' は、モデムの各種信号線(DTR, CTS など)の現在の状態を表示します ``irqtune'' を使えば、シリアルポートの割込みの優先度を上げて 性能を向上させることができます ハードディスクのチューニングを行う ``hdparm'' もいくらか役に立 つかもしれません ``lspci'' は PCI バス上のハードウェアに実際に設定されている IRQ などを表示します。 ``pnpdump --dumpregs'' は ISA バス上の PnP デバイスについて、ハー ドウェア中に実際に設定されている IRQ を表示します。 /proc にある ( フラシュメモリのアップグレード

多くのモデムでは、インターネットから手に入れたアップグレードプログ ラムを使い、フラッシュメモリ中にあるプログラムを入れ替えることができま す。PC からシリアルポートを通してモデムへこの「プログラム」を送り、こ のプログラムを(電源を切っても内容が消えない)不揮発性メモリに記憶します。 たいていインストール説明書には Windows での方法が書いてあるので、 (Windows でアップグレードを行いたい場合を除き) どのようにして Linux で 同等の作業を行うのか理解する必要があります。モデムにプログラムを送るこ とを、ダウンロードと呼ぶこともあります。 HOWTO の最新バージョン( をご覧ください)でもこの依頼文が載っていたなら、他の人の役に 立つのでアップグレードの体験談を著者まで送ってください。 アップグレードの一般的な考えをここに挙げます。次に来るデータはフラッシュ メモリのアップグレードデータだとモデムへ伝えるコマンドが、まず必要にな るでしょう。 次に、モデムへ直接ファイル(ときには 2 つのファイル)を送る必要がありま す。(minicom のような)通信プログラムは、モデムへ(そしてモデムを越えて) ファイルを送るために、zmodem や kermit を使用することもあります。しか し、これらはファイルへへッダを追加してパケットにします。ファイルを変更 せずに正確にモデムへ送りたいのです。通信プログラム kermit には( kermit パケットを使わずに) ファイルを直接送る ``cat upgrade_file_name > /dev/ttyS2 (if your serial port is ttyS2). Then go back to the communication program (type fg at the command line prompt in minicom) to see what happened. --> ファイルを送るもうひとつの方法があります。通信プログラムから離れてシェ ルへ移行し (minicom では cat upgrade_file_name > /dev/ttyS2 とタイプします。そし て、(minicom のコマンドプロンプトで 特定の Rockwell 社製モデムでの例を挙げます ( - Run minicom - Type AT** : see "Download initiated .." - C-a J - cat FLASH.S37 > /dev/modem - fg : see "Download flash code .." - C-a J - cat 283P1722.S37 > /dev/modem - fg : see "Device successfully programmed" --> - minicom を起動する - AT** をタイプする : "Download initiated .." を得る - C-a J - cat FLASH.S37 > /dev/modem - fg : "Download flash code .." を得る - C-a J - cat 283P1722.S37 > /dev/modem - fg : "Device successfully programmed" を得る 他の情報源 その他

マニュアル : Your modem manual (if it exists). Some modems come without manuals. --> (もしあるのなら)モデムのマニュアル。マニュアルのないモデムもあります。 Vern Hoxie さんによる は Linux のシリアルポートの扱いに関する推薦品のコレクションで、いくつか の簡単なプログラムがあります。 Linux のシリアルポートに関するメーリングリスト。 参加するには、本文に `` へ送ってください。 本文に `` 書籍

モデムに関する新しくて良い書籍を見つけられませんでした。 Gilbert Held さんの The Complete Modem Reference, 1997. 時代遅れの話題に関する多くの情報が載っています。 インターネットでもっと新しい情報が見つかるでしょう。 Tina Rathbone さんの Modems For Dummies, 1996. (一度も見たことがありません) Cass R. Lewart さんの Ultimate Modem Handbook, 1998. HOWTO

Cable-Modem mini-howto ISDN Howto (LDP の Howto ではありません) : ISDN 「モデム」のド ライバ非常に関連のある情報が載っていますが、ドイツ語です。 Modems-HOWTO: フランス語です。 (この Modem-HOWTO を書くために参考にしていません) NET-3-4-HOWTO: SLIP, CSLIP および PPP を含むネットワーク全般 PPP-HOWTO: モデム設定を含む PPP のヘルプ Serial-HOWTO には端末と集合モデム双方のために、 マルチポートシリアルボードを使用する情報が載っています。 この HOWTO よりも詳細なシリアルポートに関する記述があります。 Serial-Programming-HOWTO: シリアルポートプログラミングの 観点からのものです。 Text-Terminal-HOWTO: モデムとの接続に関する記述もあります。 UUCP-HOWTO: UUCP 設定のための情報 [訳注 : JF プロジェクトによる日本語訳 , , , , , および ] ニュースグループ

comp.os.linux.answers Linux に関する FAQ, How-To, README など comp.os.linux.hardware Linux オペレーティングシステムでのハードウェア互換性について comp.os.linux.setup Linux のインストールとシステム管理 comp.dcom.modems すべての OS でのモデムの話題 [訳注 : 次のようなニュースグループがあります。 fj.os.linux Linux 一般 fj.os.linux.setup Linux のインストールおよび設定について fj.os.linux.networking Linux のネットワークについて fj.net.modems モデムについて fj.net.modems.fax FAX モデムについて ] Web サイト

Hayes AT モデムコマンド Modem FAQs: 56k モデムに関する多くの情報 Linux で動作する/しないモデムの不完全な一覧 [訳注 : に、シリアルポートやモデムに関する情報へのリンク集が あります。] 付録 A: (技術的に)モデムがどのように動作するのか (未完成)

この章では通常のモデムがどのようにして変調を行うのか、その手法を述 べます。 がときどき使用 する、高速モデムが使う(係数変換などの)手法については記述しません。しか し、56k モデムは以下に述べる変調手法も使用しています。 変調とは (0 か 1 の)二進法で表現しているデジタル信号を、正弦波のような アナログ信号へ変換することです。情報を伝えるために調整された正弦波の 「キャリア」から、変調した信号はできあがっています。周波数と電圧を変更 していないキャリア正弦波は、(キャリアが存在するという事実を除き)全く情 報を伝達しません。情報を伝えるために、このキャリアを変更(あるいは変調) します。変調には 3 つの基本的な形式、周波数変調、振幅変調、そして位相 変調があります。次節で説明します。 周波数変調

最も単純な変調方式は周波数変調です。周波数は正弦波が 1 秒間に何回 周期を成すかで測ります。それは 1 秒間に正弦波形が繰り返した回数です。 これは 1 秒間に最高値へ達した回数と同じです。「へルツ」(省略して Hz) は「1 秒間の周期数」の意味で使います。 周波数変調の簡単な例は、ある周波数が二進数の 0 を表し、それ以外が 1 を 表すものです。例えば、時代遅れの 300 ボーのモデムでは、1070 Hz は 0 を 表し、1270 Hz は 1 を表していました。これを「周波数移動方式」と呼びま す。たった 2 つの周波数ではなくより多くの周波数を使えば、更に多くの情 報を送信できます。(A, B, C そして D という) 4 つの異なる周波数があった なら、それぞれの周波数は 2 ビットを表現します。例えば、00 を送るために 周波数 A を用います。01 には B、10 には C、11 には D を使用します。同 様に、8 個の異なる周波数を用い、周波数シフト 1 回で 3 ビットを送ること ができます。使用する周波数の数を 2 倍にするごとに、送信できるビット数 は 1 ずつ増えます。 振幅変調

上記の周波数変化 1 回で複数のビットが表現できる周波数変調の例を理 解したなら、振幅変調および位相変調とも簡単に理解できます。正弦波の周波 数を変更するのと似たように、振幅変調は正弦波の高さ(電圧)を変更します。 単純な場合では、ひとつが 0、もうひとつが 1 を表現するように 2 つの振幅 を使用します。周波数変調についての説明と同様に、より多くの振幅を用いれ ば 1 回の振幅変調でより多くの情報を送れるようになります。 位相変調

正弦波の位相を変更するために、ある瞬間にそれ以前の正弦波の送信を止 め、すぐに同一の周波数と振幅の新しい正弦波を送り出します。古い正弦波の 送信を止めたときと同じ電圧レベル(そして勾配)で新しい正弦波を送り始めた なら、位相に変化はありません(そして変化も検知できません)。しかし、正弦 波形の異なる点から、新しい正弦波を開始すると考えてください。すると、古 い正弦波を止めて新しい正弦波を開始する際、突然電圧が変化するでしょう。 これが位相の変化であり、角度の単位「度」で測ります。0 度(あるいは 360 度)の位相変化は何も変化しないことを意味し、180 度の位相変化は正弦波の 電圧(と勾配)が逆転します。言い換えると、180 度の位相変化は送信の瞬間に 半周期 (180 度)だけとばします。もちろん、90 度や 135 度などの変調もで きます。周波数変調の例では、更に位相の変更も可能であり、1 回の位相変化 でより多くの情報を表現できます。 複合変調

周波数変調、振幅変調、あるいは位相変調からひとつを選択するだけでは なく、複数の変調方法を混用することもできるでしょう。256 の周波数があれ ば、1 回の変調で 1 バイト (8 ビット)を送れます(なぜなら、2 の 8 乗は 256 です)。また、256 の異なる振幅があれば、各々の変調で 1 バイトを表現 できます。更に、256 の位相が使える場合を考えてください。すると、やがて ある人が、周波数、振幅、そして位相の 3 種類の変調ができるかもしれない と、指摘するでしょう。これで一回の送信で 3 バイトを送れます。 現在、実際にこれを行っている変調方式はありません。3 種類の変化をすべて 検出するには比較的長い時間がかかり、現実的ではありません。位相の頻繁な 変化が、実際にはない周波数の変化を引き起こしてしまうのです。 この難点を避けるため、(周波数は変化させず)位相と振幅だけを同時に変化さ せる方法もあるでしょう。これを位相 - 振幅変調と呼びます(ときには Quadrature Amplitude Modulation = QAM と呼びます)。現在、この手法は 14.4k, 28.8k, そして 33.6k のモデムで一般的に使われています。現在、こ の変調手法を使っていない重要な例は 56k モデムです。しかし、56k モデム も PC から電話回線への方向ではもっぱら QAM (位相 - 振幅変調)を使用して います。回線の状態が良くないときは、逆方向も QAM に戻ります。このよう に、今でも QAM (位相 - 振幅変調)は通常の電話回線では最も広く使用され続 けています。 56k モデム (v.90)

上に挙げた 33.6k モデムが使用する「変調」方式は、通常の位相 - 振幅 変調と完全に異なるわけではありません。一般的な通話は電話会社の市内局で デジタル信号に変換されます。従って、通常の電話で送れる最高速度は、電話 会社が使うデジタル伝送部分と同じ速度になります。この速度はどのくらいな のでしょうか? それはほぼ 64kbps です。64k ではあるのですが、同期の目 的のためときどきビットが「抜け落ち」ます。しかし、電話会社が回線はデジ タルだと分かっているなら、情報の損失はないかもしれません。64k の場合を 示し、そしてなぜ本当の速度が低いのか説明します(56k かそれ以下 --たいていかなり少ないです)。 通常の電話はデジタル音声を送るよう設計されたデジタル回線を使用しており、 絶対的な最高速度は 64k です。64k を使うためには、電話会社がアナログ信 号をどのようにデジタル信号へ変換しているかを、モデムが正確に知らなけれ ばなりません。この仕事は両側の端末がアナログインターフェイスだけしか持っ ていないと、非常に複雑になります。しかし、一方にデジタルインターフェイ スがあるなら、(少なくとも一方向に関しては)可能になります。ISP に電話会 社へのデジタルインターフェイスがあるなら、ISP は PC へ向けて電話回線を 通じ一定のデジタルデータを送っても問題ありません。ISP からのデジタル信 号は PC に近い(恐らく自宅にも近い)市内局で、アナログ信号に変換されます。 従って、もとのデジタル信号が何なのかを正確に見つけることが、あなたのモ デムの仕事になります。これができれば、(電話会社のデジタル信号の速度で ある) 64k の送信がこの方向については可能になります。 アナログ信号をデジタルへ符号化するために、電話会社はどんな手法を使うの でしょうか? 電話会社はアナログ信号の振幅を毎秒 8000 回の割合で標本化 します。各々の標本化した振幅は 8 ビットの (ASCII に似た)バイトへ変換し ます(確認 : 8 x 8000 = 64k)。 この操作を「パルス符合変換 (Pulse Code Modulation)」 = PCM と呼びます。そして、このバイト列を電話会社のデジタ ル回路で送ります。この回路は「時分割多重」として知られている仕組みを使っ て、複数の回線が一本の回路を共有しています。最後に自宅に近い電話局でデ ジタル信号を分流し、PCM で作成したもとのデジタル信号と同じものを得ます。 この信号をアナログ信号に変換し、自宅まで送ります。各バイトはアナログ信 号の特定の振幅を生成します。モデムの仕事は検出した振幅に基づいて、 PCM 信号 1 バイトを決定することです。 これは「振幅復調」の類ですが、本来の振幅復調というわけではありません。 キャリアがないので、振幅復調ではありません。正しくは、PCM の逆変換で 「係数変換」と呼びます。電話会社がアナログ信号生成に使ったもとのデジタ ル信号を決定するためには、アナログ信号を生成する際に、モデムは電話会社 と全く同じ瞬間にアナログ信号の振幅を標本化しなければなりません。これを 実現するため、アナログ電話回線を流れる残りの 4 kHz 信号から、同期信号 を生成します。自宅あるいは事務所へ 8k サンプル/秒 で送る信号列は、4kHz の信号を生成します。他のサンプルそれぞれが逆極性だと考えてみてください。 すると、4kHz の正弦波に似た波形ができあがります。ある意味、各々のサン プル点は 8 ビットを表現するシンボルであり、振幅を標本化することは「シ ンボルタイミング」として知られています。 PCM 符号化は線型ではありません。振幅が小さい場合には、信号が大きい場合 と比べると、PCM の値が 1 増えてたとしてもアナログ信号の振幅は非常に小 さくしか増加しません。従って、振幅が小さいと、隣接したサンプル値と識別 することが難しくなります。その識別を容易にするために、非常に小さな振幅 になるような特定の PCM 符号は使用しません。これより、各々の振幅間でよ り大きな差を作ることができ、モデムは正確な振幅を容易に検出できるように なります。v.90 では使用できる振幅のうち半数を使いません。これは(各々の 振幅に割り当てた)それぞれのシンボルが、8 ビットではなく 7 ビットを表現 することと等価です。つまり、7 ビット/シンボル × 8k シンボル/秒 = 56k bps となります。もちろん、実際には各シンボルは 8 ビットで生成します。 しかし、使用可能な 256 バイトのうち 128 バイトのみを使用します。つまり、 8 ビット表現の 128 バイトを 7 ビット表現の 128 バイトへ変換する表があ るのです。 [訳注 : 電話網の PCM 符号化は対数圧縮(μ-law 圧縮)を使用するので、 振幅が小さい場合には量子化の間隔が小さくなります。] しかし、これは少々複雑です。回線の状態がそれほど良くなかったら、使用で きる振幅レベル数(シンボル数)がより少なくなり、転送速度は 56k を下回り ます。また、アメリカ合衆国政府の規則が電話回線に高出力を流すことを禁じ ているため大きな振幅を使用できず、``56k'' モデムなのに最高でも約 53.3k しか出なくなります。 電話回線網のデジタル回線部分は双方向であることに注意してください。この 2 つの回路は送受信それぞれについて、1 つづつ使用します。家庭や事務所か ら ISP への方向にはひとつのアナログ接続回路しかありません。この方向に は(53.3k ではなく)最大 36.6k の伝統的な位相振幅変調方式を使います。(こ こでは説明しませんが)高度なキャンセレーション手法により、同時に双方向 の通信を実現できます。 [訳注 : 通常、一対しかない電話線でデータの送受信を行います。その まま受信したのでは、受信信号中に送信信号が混入してしまいます。しかし、 端末は自身が送信した信号を知っているので、受信信号から自身が送信した信 号を減算します。すると、受信信号のみを取り出せます。このようにして、一 対の電話線で双方向の通信を行います。] 付録 B: ``ボー'' と ``bps'' 簡単な例

恐らく、コンピュータおよび電気通信の分野で、``ボー'' と ``bps'' は 最も誤用が多い単語のひとつです。多くの人がこの 2 つの単語は同じ意味だ と考えて使います。しかし、実際にはそうではありません! 単に、bps は 1 秒間に転送するビット数です。ボーレートは 1 秒間に何回信号が変化するか を表す尺度です。典型的なシリアルポートでは、1 のビットは -12 ボルトで、 0 のビットは +12 ボルトになります。38,400bps なら 010101... の連鎖は、 電圧が毎秒 38,400 回正負の間を往復するので、38,400 ボーになります。ま た、111000111... の連鎖では、連鎖中に 3 つの 1 があるので電圧は -12 ボ ルトに留まったままになるので、電圧変化はより少なくなるでしょう。この場 合でも、1 秒間に 38,400 回の電圧変化が可能なので、やはり 38,400 ボーに なります。 別の方法で考えてみましょう。(電圧が変化していないと思っても) 各ビット を区切る架空の記号を置いてみてください。38,400 ボーは 1 秒間に 38,400 個の記号が置けることを意味します。変化できる瞬間に存在するこの記号は、 実際にハードウェアの生成する同期信号が印を付けます。この同期信号は外部 に取り付けたケーブルには出ていきません。 前の例で挙げた(±12 ボルト) 2 種類の「変化」より、電圧が多くの種類に変 化できる場合を考えてみてください。判別可能な 4 種類の電圧に変化できる と仮定しましょう。各々の電圧は (01 のような) 2 ビットを表現できます。 例えば、- 12v は 00、-6v は 01、+6v は 10、そして +12v が 11 を表しま す。この例では、ビットレートがボーレートの 2 倍になります。毎秒 3000 回の変化がそれぞれ 2 ビットを生成すると、6000 bps になります。言い換え ると、3000 ボーが 6000 bps になります。 実際の例

上に挙げた例は非常に簡単です。実際にはもっと複雑ですが、同じ考え方 に基づいています。2400 ボーで動作しているモデムが、どのようにして 14400 bps (あるいはそれ以上の)速度を出せるのか、ここで説明します。モデ ムは 1 回の変調(変化)で多くのビットを符号化することにより、ボーレート より高いビットレートを出せます。従って、1 回の変調で 2 ビットあるいは それ以上のビットを符号化すると、ビットレートはボーレートの値を越えます。 モデム間の接続速度が 14400 bps だったなら、2400 ボーで一回の変調につき 6 ビットを送っています。28800 bps では、9 bit/ボー で 3200 ボーで動作 しています。ボーという単語を誤用する人は、(33.6K といった)モデム速度の 意味で使っているかもしれません。 以前はモデムのビットレートは 50, 75, 110, 300, 1200, 2400, そして 9600 bps でした。シリアルポートとモデム間のビットレートも同様でした。現在、 モデム間のビットレートは 14.4k, 28.8k, 33.6k, そして 56k です。しかし、 シリアルポートとモデム間のビットレートは等しくはなく、19.2k, 38.4k, 57.6k, 115.2k になります。(最高 1/4 の圧縮を行う) V.42bis データ圧縮で モデムを使用すると、33.6k モデムでも 115.2kbps に達するビットレートが 可能になります(56k モデムでは 230.4kbps が可能になります)。 56k モデムを除き、多くのモデムは 2400, 3000 あるいは 3200 ボーで動作し ます。音声品質の電話回線では帯域に限界があるため、2400 ボー以上のボー レートを出すのは難しく、回線品質が良いときだけ使用します。 ビットレートとボーレートの混同はどのようにして始まったのでしょうか? さて、旧式の低速モデムが高速モデムと呼ばれていた頃に戻ってみましょう。 ビットレートとボーレートは実際に等しかったのです。1 ビットはひとつの位 相変化で符号化していました。ビットレートもボーレートも同じ値だったので、 みんな bps とボーを区別なく使っていました。例えば、300 bps のモデムは 300 ボーでした。高速モデムが世に出たとき、大きな変化がありました。ビッ トレートがボーレートを上回ったのです。``ボー'' は非同期電報プリンタを 発明した Emile Baudot さんにちなんで名付けられました。この問題を解決す るひとつの方法は、「ボー」ではなく「シンボルレート(変調速度)」を使うこ と、そして「ボー」という単語の使用を避けることです。 付録 C: 端末サーバ接続

この章は Text-Terminal-HOWTO を編集したものです。 端末サーバは多くのモデム(あるいは端末)を複数のコンピュータへ接続できる、 賢いスイッチのようなものです。これは機械的なスイッチではないので、通過 するデータの速度とプロトコルを変換できます。Xyplex, Cisco, 3Com, Computone, Livingston などの、多くの企業が端末サーバを作っています。多 くの種類と特性を持つがあります。(Linux PC で自分のターミナルサーバを作 る可能性を含み) 他の HOWTO にはそれらの比較と説明をする必要があります。 多くの人は直接端末へ接続するよりも、モデムを用いて接続しています。 端末サーバの使用法のひとつは、ホストコンピュータに接続する高速ネットワー クへ多くのモデムを接続することです。もちろん、端末サーバには高い演算能 力とネットワークプロトコルを動作させるソフトウェアが必要です。端末サー バはユーザと互いに会話し、どのコンピュータと接続するかなどを尋ねます。 あるいは、何も尋ねずに接続するかもしれません。端末サーバを通じて、プリ ンタへ印刷ジョブを送る人もいるでしょう。 現在、各シリアルポートにハードウェア割込みが必要なことを除いて、PC は ターミナルサーバを務めるには充分な演算能力を持っています。PC には追加 するシリアルポート用の予備の割込みが 2-3 しかありません。そして、ソフ トウェアではハードウェアの割込みを作れません。その解決法は、自分自身に 割込みを持っている上等なマルチポートシリアルボードを使用することです。 (また、安いモデルでは、複数のポートが PC のひとつの割込みを共有してい ます。) 詳細は Serial-HOWTO をご覧ください。こういった PC 上で Linux が動作し、多くのシリアルポートで getty が動いていたなら、端末サーバと 考えることができるでしょう。ネットワークを通じて他の PC と接続したり、 データを通過させ 14 バイト毎などにシリアルポートの割込みを処理するなら、 事実上端末サーバになります。``radius'' というソフトウェアを使用するこ ともあります。 現在、実際の端末サーバはただの端末以上のサービスを提供します。端末をエ ミュレートする PC にサービスを提供したり、ときには電話回線につないだ集 合モデムと接続します。モデムを内蔵したものさえあります。端末(あるいは PC がエミュレートする端末)が直接モデムに接続しているなら、回線の反対側 にあるモデムは端末サーバへ接続できます。テキスト端末が生成しない PPP パケットを、端末サーバがデフォルトで待ち受けていることもあります。 [訳注 : JF プロジェクトによる日本語訳 , ] 付録 D: 他の種類のモデム

現時点では、この HOWTO は通常のアナログ電話回線でPC を接続するため に使う、一般的なタイプのモデムしか扱っていません。他にもモデムにはいろ いろな種類があります。モデムと呼ぶものの実際にはモデムではないものもあ ります。 デジタル「モデム」

モデムの標準的な定義は、場合によっては「デジタル」モデムを含むまで に拡張されます。現在、デジタル接続サービスが多くの家庭や事務所に提供さ れ、コンピュータは電話回線にデジタル信号を直接送り出せます。しかし、コ ンピュータのデジタル信号を、電話回線が許容する形式へ変換する装置が必要 です。ときにはこの装置はモデムと呼ばれます。この HOWTO ではこういった モデムは扱いませんが、この HOWTO の最初にリンクを載せています。次の 3 つの節は ISDN, DSL および 56k のデジタル接続「モデム」についての解説で す。 ISDN 「モデム」

この「モデム」は正しくはターミナルアダプタ (TA) です。Debian の ``isdnutils'' パッケージが利用できます。ドイツ語の ISDN HOWTO が英語に 翻訳され、 にあ ります。Linux の SuSE ディストリビューションがこれを公開しており、恐ら く SuSE で使えるドライバに関するものです。isdn4linux パッケージとニュー スグループ de.alt.comm.isdn4linux があります。投稿の多くはドイツ語です。 (DejaNews のような)サーチエンジンで、``isdn4linux'' をキーワードにして 探してみてください。 デジタル加入者線 (Digital Subscriber Line = DSL)

DSL は自宅から最寄りの電話局まで、既存のより対導線を使います。(56k の)通常のモデムがよりも高速の送信を電話回線が許容するなら、DSL を使え ます。近くの電話局にあるアナログ-デジタルコンバータを、より高速でデー タ転送が可能なコンバータへ置き換えます(もちろん、送信形式は異なります)。 コンピュータのデジタルデータを電話回線で使用するデジタル信号へ変換する 装置もまた、モデムと呼びます。 [訳注 : デジタル加入者線 (ADSL) の HOWTO があります。JF プロジェ クトによる日本語訳 ] 56k デジタルモデム

家庭や事務所で動いている 56k モデムに対向するモデムはすべて、電話 会社のデジタルシステムへ直接接続していなければいけません。従って、回線 のもう一端にある ISP は、顧客へ 56k サービスを提供する特別なデジタルモ デムを入手する必要があります。それに加えて、(T1, E1, ISDN PRI あるいは より高速な) 同時に多数の回線を提供できる高速回線へ集合モデムで多重化し ます。これにはコンセントレータや「リモートアクセスサーバ」が必要です。 たいてい、(PC ににているけれど非常に効果で専用の OS を使う) スタンドア ローンの装置がこの役割を果たしていました。現在は、PC の PCI バスに挿し て同様な処理を行う、いくつかのボードがあります。 専用線モデム

これはデジタルモデムではなく、アナログモデムです。この特別なモデム は電話会社から借りあげた回線で使用します。場合によっては長距離接続を行 います。通常の公衆回線用モデムは、こういった回線では正常に動作しません。 通常の回線では、使用していないときには約 40〜50 ボルトの電圧がかかって いて、モデムは送信にこの電圧を用います。そして、電話会社には着信や通話 中などを知らせる特別な制御信号があります。通常のモデムはこの制御信号を 待ち受けて、応答します。長距離回線には制御信号がないので、こういったモ デムを 2 つ接続しても動作しません。 通常の専用線は 9600 ボーで V.29 を使用する、(各方向に 1 本づつ使う) 4 線式の回線です。他社のモデムと互換性のない専用線モデムもあります。 [訳注 : 専用線に関する mini-HOWTO があります。JF プロジェクトによ る日本語訳 ] 日本語訳について

日本語訳は Linux Japanese FAQ Project において行いました。翻訳に関 するご意見は JF プロジェクト v0.08j, 23 Jan. 2000 翻訳 : さいとうかん