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 を見るには、このファ
イルを見ている間はずっとプログラムを実行し続ける必要があります。これを
行うには、プログラムを終了せずにシェルに行ってみましょう。
シリアルポートのハードウェアの設定は? デバイスのハードウェアに実際にどの I/O アドレスと IRQ が設定されて
いるのかを調べるにはどうすればいいのでしょうか? Linux が起動を始める前
に、多分 BIOS のメッセージがある程度の情報を教えてくれるでしょう。
Shift-PageUp キーを使って起動メッセージの表示を戻し、BIOS が出した一番
最初のメッセージを見ましょう。これは Linux が起動する前の設定です。
setserial はこの設定を変えることはできませんが、isapnp や pciutils は
設定を変えることができます。
大雑把な方法の一つとして、`` を見てください。PCI シリアルポートの場合
には、``/proc/pci を見てください)。お使いのシリアルポートがプラグ
&プレイならば、以下の 2 つの節を見てください。
ジャンパで設定したポートの場合は、これはジャンパで設定した内容です。ポー
トがプラグ&プレイ(PnP)ではないけれど DOS プログラムを使って設定さ
れている場合には、そのプログラムを実行した人が設定したように設定されて
います。
PnP シリアルポートのハードウェアの設定は?
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.
-->
/dev/ttyS2 などのシリアルポートデバイス
デバイスディレクトリにデバイスを作るには、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 ?