Linmodem-Mini-HOWTO (DRAFT) Sean Walbran sean(at)walbran.org and Marvin Stodolsky stodolsk(at)erols.com v0.26, 28 September 2000 翻訳:川岸 良治 (kawagisi@yk.rim.or.jp) 日本語訳:2000年10月16日 このドキュメントは、Linux における Linmodem (winmodem ハードウェア)の サポートについて説明しています。このようなサポートは、現時点では極めて 限定的です。ほとんどはメーカで作成され、サポートは無く、バイナリ形式の カーネル・モジュールのみです。このドキュメントは、ソースコードではな く、これらのバイナリ・モジュールを扱う上で特有のやっかいな状況について 言及します。特にバイナリとカーネルが一致しない組み合わせで使うことに焦 点をあてます。 ______________________________________________________________________ 目次 1. はじめに 1.1 版権 1.2 免責 1.3 謝辞 1.4 更新と修正 2. Linmodems 2.1 Linmodem とは何か? 2.2 どの Linmodem ハードウェアがサポートされているか? 2.2.1 Conexant/Rockwell HSF 2.2.2 Ambient Technology (公式には Cirrus Logic): 2.2.3 Lucent LT 2.2.4 PCTel 2.2.5 ESS 2.2.6 3Com Mini-PCI 2.3 私の GeeWhiz 9.8.7 モデムやラップトップに、これらのチップセットが あるかどうかは、どうすれば分かりますか? 2.3.1 システムからの情報 2.3.2 モデムの名前とID 番号 2.3.3 ラップトップ、内蔵モデム、あなたのものではないマシン 3. 一般的な設定とカーネルモジュールの問題 3.1 カーネルモジュールのサポート 3.2 ISA プラグ・アンド・プレイ 3.3 PCI モデム 3.4 コンパイル済みのモジュールとカーネルバージョン: insmod -f, Fixscripting, ppp.o 3.4.1 insmod -f 3.4.2 Fixscripting 3.4.3 ppp.o と新しいカーネル 4. 具体的なインストールの方法 4.1 最初にこれを読んでください 4.2 ISA 4.3 ドライバパッケージの入手 4.4 モジュール挿入を試す 4.5 モジュールとカーネルバージョンの調整 4.6 必要かつ希望するなら 2.2.14 ppp.o をフィックスする 4.7 モジュールをモジュールディレクトリにコピーする 4.8 デバイスファイルを作成する 4.9 /dev/modem をデバイスファイルにリンクする 4.10 モジュールをカーネルに挿入する 4.11 シリアルポートの設定を変更する 4.11.1 古いカーネル (2.0.x) 4.11.2 新しいカーネル 4.12 最小のターミナルプログラムで試してみましょう 4.13 ppp ダイアラの設定 4.14 ダイアルアップ 4.14.1 動いた! 4.14.2 動かない! 4.15 インストール後 5. FAQ 5.1 私は winmodem を持っていますが Linux で動くでしょうか? 5.2 "device or resource busy" というエラーがでました。 5.3 fixscript または insmod で "unresolved symbols" になりました。 5.4 SuSE (または他の)カーネルで ppp2214.o が動作しません。 5.5 PCTel のモデムが動作しません。 5.6 モデムがダイヤルして接続できますが、コネクションが落ちます。 5.7 コネクションを閉じるか、ドライバをアンロードするとカーネル・パニックが 起きます。 5.8 何も動いていないようにみえます。誰に助けを求めればよいでしょう? 5.9 winmodem のドライバは誰が書いたのですか。彼(女)と連絡をとるには どうすればよいですか? 6. トラブルシューティング 7. 付録:便利なスクリプトとその他の情報 7.1 Fixscript: バイナリモジュールのカーネルバージョン情報の変更 (Mark Spieth) 7.2 ppp 関連モジュールの挿入と削除の一致 (Marvin Stodolsky) 7.3 PPP スクリプトの例 (Marvin Stodolsky) 7.4 PCTel モジュールパラメータ: カントリーコード 8. 日本語訳について ______________________________________________________________________ 1. はじめに これは、Linux Linmodem Mini-HOWTO ドキュメントです。いわゆる winmodem を Linux で動作させる方法はあるのか、もしあるとすれば、それはどのよう にすればよいのか、ということを援助するためのクイックリファレンスとなる ことを目的としています。あなたは winmodem に対するサポートは、たぶん ない ことを最初に理解しておく必要があります:現時点では、このようなモ デムのための限定的なサポートがありますが、多くの場合ベンダで作成される もののベンダはサポートしないという形で、バイナリのみのカーネル・モジュ ールです。しかし、少数のオープンソース・プロジェクトが存在します。利用 可能な Linmodem ドライバに関する最新情報は Rob Clark のサイト 【訳注1: Winmodems are not modems というタイトルの Winmodem に関する最も有名な サイト】と Linmodems.org のサイトをを訪ね てください。一般的なモデムの問題(例えば IRQ の設定とダイヤルアップ・ス クリプト)は、 Modem-HOWTO , Serial-HOWTO , PPP-HOWTO で、そして他の関係する HOWTO は Linux Documentation Project のサイトで、より総合的にずっと完全 に扱われます。 【訳注2】これらの HOWTO を日本語に翻訳したものが JF プロジェクト にあります。 【訳注3】その他の日本語による Winmodem/Linmodem の情報: Winモデムはモ デムではない (前記の Winmodems are not modems というサイトの翻訳)、 Winmodems-and- linux-HOWTO (日本語訳) 、 Lin モデム(linmodem)ドライバで Win モデ ム(winmodem)を動かそう 【訳注4】 このドキュメントでは、メールアドレスの @ は、全て (at) と なっています。原著者に確認したところ、SPAM メール対策のためにこういう 表記にしたとのことです。従って、例えば hoge(at)fuga.org のようになって いるものは、hoge@fuga.org と読み替えてください。 1.1. 版権 Copyright (c) 2000 by Sean Walbran, Marvin Stodolsky このドキュメントを自由にコピーしどのようなフォーマットででも配布(売 る、またはただであげる)してください。訂正やコメントをドキュメントのメ インテナーに送ることが要請されています。以下の条件を満たす場合に限り、 派生的作品を作成し、配布することができます。 o あなたの派生的な仕事(sgmlのような最適のフォーマットで)を LDP (Linux Documentation Project) か、それに類する団体にインターネット 上でポストして送ってください。 LDP でなければ、LDP がそれを利用でき るところを知らせてください。 o これと同じライセンスまたは GPL を使って派生的な仕事をライセンスして ください。著作権に関する告知と、少なくとも使用するライセンスのポイ ンタを含めてください。 o もとの著者と主な貢献者に、しかるべき謝辞を与えてください。 あなたが翻訳以外の派生的な作業をすることを考えているなら、そのプランを 現在のメインテナーと論議することが要請されます。 1.2. 免責 このドキュメントの情報は、あなた自身の責任で使ってください。私は、この ドキュメントの内容のどんな潜在的義務も否認します。このドキュメントの概 念、例、および/またはその他の内容を使用することは、全面的にあなた自身 の責任です。 全ての著作権は明記されない限り、そのオーナーによって所有されます。この ドキュメントでの専門用語の使用は、いかなる商標あるいはサービスマークの 妥当性にも影響を及ぼすものと考えられてはなりません。特に、"Winmodem" という用語は US Robotics/3Com 社の商標であるため、我々はここでは "winmodem" という用語を Rob Clark が行ったのと同様に使います。つまり 「Winmodems(tm), host-based モデム、HCF-モデム、HSP-モデム、と全てのモ デムのようなハードウェアに類似したもの」を "winmodem" と読み替えます。 Linux は、Linus Torvalds の商標です。 特定の製品名またはブランド名を推奨するものとみなさないでください。 あらゆるインストール手順の前に重要な、そして/または関連するファイルの バックアップを作ることを強く推奨します。 1.3. 謝辞 このドキュメントに含まれる大量の情報は、 Rob Clark のサイト , Linmodems.org , と、そのメーリングリスト、および Werner Heuser のページ LiLAC: Linux with LAptop Computers のような様々なすばらしいソースを元にしてい ます。 ESS モデムの情報ですばらしい貢献をした Willie Green (willjr(at)lcc.net) に感謝します。 Mark Spieth (mark(at)digivation.com.au) に感謝します。彼は、Linmodem メーリングリスト (ここ) でモジュール・カーネル・バージョ ンの編集に関する討論、アドバイス、そして彼の "fixscript" で貢献しまし た。これの新しいバージョンがこのドキュメントの付録に入っています。 Werner Heuser (wehe(at)snafu.de) に感謝します。古いカーネルでシリアル パラメータを設定するための助言と、沢山の他の良いポインタを示してくれま した。 他の個別の謝辞は、テキストの本文の中の適切なところにあります。 このドキュメント自体は、Stein Gojen によって作成された SGML HOWTO テン プレート HOWTO-HOWTO を使って作りました。 1.4. 更新と修正 このドキュメントの最新の HTML バージョンは に、SGML は にあり、また他の フォーマットも同じディレクトリ内にあります。 あなたは、ここに記載されていないけど動作する Linmodem を持ってますか? ドライバを開発していますか?このドキュメントのどこかが不正確、またはま ぎらわしいと思いますか?あなたか他の誰かの成果がここで使われているが、 適切な謝辞が無いと思いますか?ためらうことなく、訂正と提案を私 sean(at)walbran.org 宛てに電子メールでお送りください。 2. Linmodems 2.1. Linmodem とは何か? Linmodem は、winmodem(「免責」の項参照)の Linux 用の実装です。これら のモデムは、伝統的にモデム上のハードウェアによって処理されてきた機能 を、程度の差はあれ、ソフトウェアに頼って処理しているという意味で、モデ ム「未満」であると言えます。この根本的な理由は、もちろんソフトウェアが ハードウェアより安価であり、(通常は)ネジ回しを使わなくてもアップグレ ード/拡張/改良が可能である、ということです。しかし、とにかくモデムが機 能するには、その人が好むオペレーティングシステムで実行可能なソフトウェ アを必要とします。 2.2. どの Linmodem ハードウェアがサポートされているか? これを書いている時点では、Linux で動作する winmodem はごくわずかです: 2.2.1. Conexant/Rockwell HSF にドライバがあります。これはごく 最近 (2000年9月) Denis Havlik (denis(at)mandrakesoft.com によって「発 見」されました。このページはフランス語ですが、このページにあるインスト ールコマンドはボールド(太字)体の赤い文字で書かれています。要約すると、 パッケージをダウンロードし、それを tar -zxvf で展開し、インストールス クリプト ins_all を実行します。このドライバに関して既に分かっているこ とは以下の通りです。 o これは RedHat 6.2 kernel 2.2.14-5.0 に対してコンパイルされていま す。 o これはフランスの電話システム用にチューニングされています。 Mark Allen は他の電話システム用の .inf ファイルを linmodems メーリングリ スト にポストしています。また、あな たのダイアラでダイアルトーンの検出を無効にすることを試すことができ ます。 このドライバは、まだ完全には検証されていません。これ以上の議論と情 報は メーリングリストのアーカイブをチェックしてくだ さい。 2.2.2. Ambient Technology (公式には Cirrus Logic): Mikhail Moreyra は、CL-MD5620DT チップセット用の GPL のドライバを書き ました。これは最高 33.6kbps まで可能です。しかし、これはアルファ版のソ フトウェアであり、注意深く扱う必要があります。ドライバは から入手できます。つい最 近、Gabriel Gambetta (ggambett(at)internet.com.uy)は、このドライバに パッチをあてて標準 AT コマンドが使えるようにしたバージョンを出しまし た。このバージョンは、 Rob Clarkのサイト (ここ) から入手でき ます。 また、 Rob Clark のサイト では Ambient が、彼ら の MD563X HaM モデムの Linux 用ドライバを将来のどこかの時点でリリース するだろうと報告しています。 2.2.3. Lucent LT Lucent LT (PCI と ISA) モデム用にリリースされた、メーカサポート無しで バイナリーのみの 2.2.12 Linux カーネル用にコンパイルされた、カーネル・ モジュールが存在します。以下で説明するように、このモジュールはカーネル 2.2.14 および、若干の追加の努力をすることでカーネル 2.2.17 まででも、 ちょっとした不平をいいながら動作します。しかし、モジュールは(まだ実験 的な)2.40-test6 カーネルには挿入しません。ドライバは、 から入手できます。 Lucent モデムで使用するオープンソースのツールが にあります。 Pavel Machek は次のように書いていま す。「これはそれほど便利ではありません。しかしこれはハードウェアドライ バであり、v.34 プロトコルスタックが無く、ISP に接続できません。しかし Lucent winmodem を応答装置にするには充分です」 2.2.4. PCTel PCI, AMR, Zoltrix Phantom 用のバイナリドライバが下記にあります。 2.2.5. ESS ES56T-PI (PCI) と ES56V-I (ISA)用のバイナリドライバは以下のところから 入手できます。 o ISA: または o PCI: . man 2.2.6. 3Com Mini-PCI request for comments が、3Com から公式に Linmodems.org メーリングリス ト にポストされました。 3Com 製の miniPCI combination NIC/winmodem 用のバイナリのみのドライバが供給可能 とのことです。私が知る限り、ドライバはまだリリースされていませんが Werner Heuser の miniPCI page には多くの情報とリンク があります。 2.3. 私の GeeWhiz 9.8.7 モデムやラップトップに、これらのチップセット が あるかどうかは、どうすれば分かりますか? 【訳注:GeeWhiz 9.8.7 というのは架空の商品名です。gee whiz は、ウワ ー、ヒエー、おやまあ、おいおい、といった感嘆・驚きを意味することばで す】 2.3.1. システムからの情報 Linux を実行しているなら、インストール済みのハードウェアに関する情報は 次のようなコマンドを使って得られます: o PCI: cat /proc/pci o ISA: pnpdump o Internal PCMCIA: cardctl ident o dmesg Windows のデバイスマネージャは、同様の情報を提供します。しかし、メーカ は単にそのブランド名をビルトイン・モデムに付けることが多いという点に注 意する必要があります。従って、この情報はあなたが期待するほどには役に立 たないかもしれません(例えば、"Compaq Internal 56k" モデムって、どんな チップセットが入っているのでしょう?)。 2.3.2. モデムの名前とID 番号 モデムの正確な名前がわかれば、 Rob Clark のサイト の database にある Linux Modem Compatibility で検索することができます。 (この Web ページで表示 される)一覧表の左側のカラー/文字コードは、そのモデムが Linux で動作す るかどうかを示します。コード "LM" は Linmodem を意味し、モデムのメモと して必要なドライバが書いてあるはずです。"WM" は winmodem であることを 意味し、サポートが存在することは知られていません。よく似た名前のモデム には同じチップセットが入っているだろうとか、全く同じようにふるまうだろ う、と仮定しないように注意してください!あなたの WhizBang LX56 と友人 の WhizBang GT56 は、完全に異なる内部構造を持つことがあるのです。 モデムの正確な名前を知らない場合、モデムの識別番号をベースにして検索す ることができます:あらゆるモデムには登録番号が印刷されているはずです。 それは、ボード製作者の名称かもしれないし、あるいは FCC 登録番号かもし れません。そのようなモデム・ボード上の ID 番号の例の写真が Rob Clark のサイト にあります。これで、チップ セット/ドライバ情報を得るために、モデムと FCC ID の一覧表 をウェブ・ブラウ ザで検索することができます。あるいは で直接、米国連邦通信委員会 (FCC) のデータベースを検索することもできま す。慎重に説明を読んでください。そして O(文字)を0(数字)と混同した り、他のありうる混乱をしないように注意してください。 2.3.3. ラップトップ、内蔵モデム、あなたのものではないマシン ラップトップを持っているが中を開けたくないとか、特定のマシンを買うこと を検討しているが、ベンダーはあなたに情報やサンプル・ボックスを提供する ことに対して十分な思いやりがないなら FCC ID 番号を知ることはできないか もしれません。このような場合は、いくつかの選択肢があります: o Werner Heuser's LiLAC: Linux Modems と LiLAC: Linux Mini- PCI のページに、モデ ムと NIC を内蔵したラップトップの仕様の一覧表があります。また、ここ にリストアップされていないモデルの情報を得るための、役に立つ助言も あります。 o Kenneth Harker のサイト Linux on Laptops には、多数の ユーザが作成した個々のラップトップ・モデルでの Linux の経験を記述し たサイトのインデックスがあります。 o あなたが例えば、フロア・デモンストレーション・モデル【訳注:floor demonstration model:パソコンショップ等のデモ用展示品のこと?】に物 理的にアクセスするなら、Marvin Stodolsky は実際にラップトップまたは PC をテストする方法を書いています: 宣伝されている WhizBang PC/ラップトップを買ってしまう前に、フロッピ ー・ディスクから実行できるクイックテストがあります。この意味はイン ストールされているモデムが Linux でサポートされているかどうかチェッ クするために Linux 自身を使うことです。【訳注:WhizBang というのは 架空の商品名です。whizbang は、ヒュ〜という音がする花火、ヒュ〜・ズ ドンという音、また「素晴らしい」という意味もあります】 ほとんどの Linux レスキュー(緊急用)フロッピーは、RAM ディスク上でブ ートし明確に指示されない限り、または指示されるまではハードディスク を「触る」ことはありません。利用可能な Linuxモデム・ドライバを、事 前に別のフロッピー上に集めておきます。Linux は互換性があるハード ウェアが存在しなければ、ハードウェアに依存するモジュールをカーネル にインストールしません。したがって、 insmod /mnt/modem-driver1.o または最悪の場合、強制的に insmod -f /mnt/modem-driver1.o としたあとで、lsmod が挿入に成功した旨を表示する場合は Linux をフルイ ンストールしたときに、モデムが動作する可能性が大きいです。この挿入テス トは全ての利用可能な modem-driverN.o を繰り返すことができます。そし て、うまくいけば一つが成功するでしょう。このテストのために最初にドライ バが入った DOS 型式でフォーマットされているフロッピーディスクに、アク セスできるようにします: mount /dev/fd0 -t msdos /mnt そしてドライバの一覧を表示します: ls /mnt このテストは modem.o のカーネル・ソース・バージョンとテストで使われて いるカーネルが一致しないために、失敗するかもしれないことを警告しておき ます。レスキューディスクのカーネルは、できるだけぴったりと一致するバー ジョンでなければなりません。 Lucent ltmodem.o と Archtek esscom.o モ ジュールはカーネルソース 2.2.12 の下でコンパイルされているので、それら をテストするにはレスキューフロッピーのカーネルを取り替えるのが最もよい です。 DOS の下で rawrite.exe によって Debian resc1440.bin から作られ るレスキューディスクは、そのカーネルを置き換えて、正しく起動させる命令 を持ち込みます。適切にコンパイルされたカーネル と、Debian レスキューイメー ジのコピー が利 用できます。 Linmodem ドライバモジュールは、上にリストされています。 しかし、もう一つ警告があります:私(Sean)は、手持ちの Red Hat 6.2 ディ ストリビューションで、これを試し esscom.o モジュールを insmod したとこ ろ、そのようなハードウェアは持っていないにもかかわらず、不平をいわない ことがわかりました。したがって、あなたはたぶん他のディストリビューショ ンのそれよりも、上記の MarvS による Debian レスキューディスク・イメー ジを使いたいと思うでしょう。 3. 一般的な設定とカーネルモジュールの問題 3.1. カーネルモジュールのサポート ここでリストアップされているドライバは、全てカーネル・モジュールとして リリースされています。従って、あなたはモジュールをサポートするカーネル を持っていることが確実でなければなりません。これに加えて以下で更に述べ るように、カーネルとバージョンが一致しないモジュールの使用を援助するた めに「モジュール・バージョン」のサポートを可能にする必要があります。 合理的に最近の Linux ディストリビューションからカーネルを使うのであれ ば、たぶんモジュール・サポートはすでに可能になっています。カーネルをコ ンパイルするなら Kernel HOWTO 【訳注: 日本語訳が JF プロジェクト にあります。】を通して、モジュールを可能 にする方法を知っていなければなりません。いずれにせよ、カーネル・コン フィギュレーションファイルに以下の設定が存在することを確認するために チェックできます。 (これは通常 /usr/src/linux にあります): CONFIG_MODULES=y CONFIG_MODVERSIONS=y 3.2. ISA プラグ・アンド・プレイ ISA のプラグ・アンド・プレイのモデム(私が持っている Thinkpad i1411 の ような) をお持ちなら、たぶんリソースをモデム・カードに割り当てるために isapnptools を使う必要があります。これには、isapnptools をインストール し、モデム用に /etc/isapnp.conf ファイルにエントリーを持つ必要がありま す。 Plug-and-Play-HOWTO 【訳注: 日本語訳が JF プロジェクト にあります。】を読まなければなりません が、他に心配すべきいかなる ISA デバイスもないなら、するべきことは基本 的に以下のとおりです: 1. ルート権限で pnpdump を実行して、現在のシステムのリソースの使用状況 に基づくプロトタイプの isapnp.conf ファイルを作成します。 2. この出力からモデムを探し、モデム用に使いたい(または未使用の) IRQ と 一致する行のコメントを外してください。例えば私の isapnp.conf は以下 のようになっています: (CONFIGURE ACRd119/1 (LD 0 (INT 0 (IRQ 11 (MODE +E))) (IO 1 (SIZE 8) (BASE 0x0100) (CHECK)) (NAME "ACRd119/1[0]{LT Win Modem }") # (ACT Y) )) 不思議なことに、少なくとも私の場合は #(ACT Y) をコメントアウトしたまま にしておく必要があります。これがあなたの環境で動作しない場合は、他方を 試してください。 3. ファイルを /etc/isapnp.conf へコピーしてください 4. リブートしてください。ブート時のメッセージの途中でうまくいかない場 合は、たぶん既に使用中の IRQ/DMA の設定を選んだのでしょう。 pnpdump の出力にある他の選択肢を試してください (正しいフラグ付きで isapnp を実行すれば、たぶんリブートする必要はないでしょう。但し、ここでは 初心者にとって最も簡単なのは単にリブートすることです)。 3.3. PCI モデム cat /proc/pci で得られる PCI インタフェースカードの情報よりも多くの情 報が欲しいときは、pciutils ソフトウェアパッケージ内の scanpci と lspci のようなユーティリティが役に立ちます。 【訳注】 以下に私の環境で /proc/pci, scanpci, lspci の各コマンドを実行 した結果(モデムに関する部分のみ)を示します。 # cat /proc/pci の場合 Bus 0, device 9, function 0: Communication controller: Lucent (ex-AT&T) Microelectronics Unknown device (rev 1). Vendor id=11c1. Device id=442. Medium devsel. Fast back-to-back capable. IRQ 3. Master Capable. No bursts. Min Gnt=252.Max Lat=14. Non-prefetchable 32 bit memory at 0xefffbf00 [0xefffbf00]. I/O at 0xde00 [0xde01]. I/O at 0xdc00 [0xdc01]. # scanpci -v の場合 pci bus 0x0 cardnum 0x09 function 0x0000: vendor 0x11c1 device 0x0442 Device unknown CardVendor 0x13e0 card 0x0412 STATUS 0x0290 COMMAND 0x0107 CLASS 0x07 0x80 0x00 REVISION 0x01 BASE0 0xefffbf00 addr 0xefffbf00 MEM BASE1 0x0000de01 addr 0x0000de00 I/O BASE2 0x0000dc01 addr 0x0000dc00 I/O MAX_LAT 0x0e MIN_GNT 0xfc INT_PIN 0x01 INT_LINE 0x03 BYTE_0 0xff BYTE_1 0xff BYTE_2 0xff BYTE_3 0xff $ man lspci でコマンドの使い方が表示されます。 # /sbin/lspci -v の場合 00:09.0 Communication controller: Lucent Microelectronics 56k WinModem (rev 01) Subsystem: GVC Corporation LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd Flags: bus master, medium devsel, latency 0, IRQ 3 Memory at efffbf00 (32-bit, non-prefetchable) I/O ports at de00 I/O ports at dc00 Capabilities: [f8] Power Management version 2 【訳注終わり】 3.4. コンパイル済みのモジュールとカーネルバージョン: insmod -f , Fixscripting, ppp.o このドキュメントを書いている時点で、ソースコードが入手できるのは前記の 一覧にある Ambient Technology ドライバと Lucent LT のユーザ空間ツール だけです。残りのものは、コンパイル済みのバイナリ・ドライバだけがリリー スされています。これらのモジュール/バイナリは、それらがコンパイルされ たバージョンのカーネルのときだけ、素直に動作します。 Linux カーネルは 動的に変化する獣なので、モデム・ベンダーが依然として彼らのドライバのソ ースコード・バージョン(これは改良された Linux カーネルを使うために、こ れらのドライバを修正し再コンパイルする能力を保証します) をリリースする ほうを選ばないことは非常に残念です。一方、しかし、運が良ければ、以下に 述べるようにバイナリ・モジュールをなだめて、少し新しいカーネル・バー ジョンで動作するかもしれません。 3.4.1. insmod -f カーネル・モジュールは、通常 "insmod モジュール名" コマンドを使ってロ ードされるでしょう。モジュールが現在のものとは異なるカーネルの下でコン パイルされている場合、insmod はバージョンが一致しないことを報告し、モ ジュールのロードは失敗するでしょう。 "insmod -f モジュール名" として、 強制フラグ (-f) をつけて、バージョンの不一致にかかわらず、モジュールを ロードすることもできます。モジュールが使うカーネル・インタフェースが、 本当にカーネル・バージョンで変わらないなら、このようにモジュールを強制 的にロードしてモジュールを動作させることができます。この例として、例え ば 2.2.12 の下でコンパイルされた Lucent LT モデム・モジュール ltmodem.o はカーネル 2.2.14 の下で強制的に挿入し問題なく動作します。し かし、 2.2.15-x より新しいカーネル・バージョンでこれを動作させる場合 は、以下で述べるように ppp.o モジュールをカーネル 2.2.14 のものに置き 換える必要があります。 3.4.2. Fixscripting Mark Spieth (mark(at)digivation.com.au) は、バージョン不一致のワーニン グが出ないように、バイナリ・モジュールを編集するスクリプト(付録参照)の 作成に貢献しました。これは、強制フラグなしで(つまり単に "insmod モジュ ール名" とするだけで)モジュールを挿入できます。このスクリプトファイル を fixscript という名前でセーブしたら、それを chmod +x fixscript で実 行可能にし、root 権限で次の例のようにして、編集された ltmodem.o モジュ ールを生成します。 ./fixscript ltmodem.o ltmodem14.o そして、以下のようにすると 2.2.14 の下でも、不一致であるという文句を言 われずに挿入できます。 insmod ltmodem14 しかし、このスクリプトは、モジュールをアップデートしてカーネル API の 不一致を現実に解消するわけではなく、単にモジュールを仮装して実際とは異 なるバージョンでコンパイルされたかのように見せるだけだということに注意 してください。つまり、これはカーネル・バージョンの不一致の症状を抑制し ますが、実際に存在するかもしれない病気を治すようなことはしないのです。 いくつかの PCTel モジュールで提供される「ソースコード」(小さなC言語の ファイル)は、パッケージ内のバイナリ・ライブラリとともにコンパイルおよ びリンクした時に同じような仮装を実行します。しかし、これも変更されたカ ーネル・インタフェースには対応できません。 3.4.3. ppp.o と新しいカーネル 最初に 2.2.15-x 以降のカーネルで Lucent LT モデム用ドライバ ltmodem.o を使おうとすると、失敗します。しかし、Christoph Hebeisen (cth(at)sfu.ca) は、 2.2.12 の下でコンパイルしたモデム・モジュールを、 2.2.14 の下でコンパイルした PPP モジュール(ppp.o)とともに、カーネ ル・バージョン 2.2.16 上で使って成功したと報告しています。 Willie Green (willjr(at)lcc.net) は、これが ESS モジュールでも動作することを 確認しています。 Marvin Stodolsky (stodolsk(at)erols.com) は、前述の 同じ fixscript が 2.2.14 から 2.2.16 までの ppp.o モジュールを以下のよ うにしてバージョン-マスカレード【訳注:バージョンをごまかすこと】に使 うことができると指摘しています。 ./fixscript ppp.o ppp14to16.o このように、カーネル・バージョン 2.2.16 の下で Linmodem を動作させるた めの、ltmodem と ppp モジュールの両方の"ソフトな挿入"が可能です。 更新されないモジュールをこのように修繕しながら使い回すやり方は、おそら くいずれは破綻するでしょう。例えば、古いモジュールをいろいろ複雑に組み 合わせることで、こうしたバイナリドライバが、リリースされたカーネル 2.4 でも動いたとしたら、驚きとしか言えません。最良の解決策は、もちろんオー プン・ソース・ドライバを持つことでしょう。少なくとも、より最近のカーネ ル・バージョン用のバイナリ・モジュールでのベンダーのサポートは、役に立 つでしょう。読者は、そのような開発をサポートし、促進するために彼(女) の全力を尽くすことが奨励されます。 4. 具体的なインストールの方法 4.1. 最初にこれを読んでください 前述のバイナリ・ドライバ用のインストールのドキュメントを作成しました。 添付のドキュメントは(仮に存在するとしても)言葉足らずで、非常にまぎら わしいからです。ここでは、オープンソース・ドライバのインストールについ ては言及しません。というのは、普通はそれ自身のドキュメントにうまく記述 されていますし、パッケージからパッケージへ、そして時々劇的に変化するか らです。 Conexantドライバのインストール方法は、分かっている範囲で前に書きまし た。このドライバは、まだ完全には検証されていません。 あなたは、以下に示す指示に従うのではなく、ドライバに添付されているイン ストールスクリプトを使いたいと思うかもしれません。 開始する前に、どのように進行するのか、そして問題に出くわすかもしれない ところを把握するために、以下の指示を通読しておくべきです。 4.2. ISA お持ちのモデムが ISA PNP モデムの場合、isapnptools を使って PNP リソー スが適切に割り当てられることを確認してください(上の「ISA プラグ・アン ド・プレイ」の項をご覧ください)。 4.3. ドライバパッケージの入手 お持ちのハードウェア用のドライバの適切な URL は、上記の「どの Linmodem ハードウェアがサポートされますか?」の項をご覧ください。 必要に応じて unzip(.zip の場合)、tar -zxvf(.tar.gz の場合)、その他 を使って、空のディレクトリでドライバ・パッケージを展開してくださ い。some-driver.oのような名前のバイナリファイルが入っているはずです。 (次のステップでは例として、モジュールは ltmodem.o という名前にしてい ます) 4.4. モジュール挿入を試す モジュール挿入の試みは、最初にチェックすべきことです。その結果が必ずし も最終的な成功を意味するわけではないですが、残りのステップに時間を費や す価値があるかどうかを示す公平な尺度です。 ファイルが解凍されたディレクトリで、 ltmodem.o をお持ちのモデム用の適 切なモジュール名に変えて、以下のステップを実行してください: 最初に、以下のように単純にモジュールを挿入してみましょう: insmod ltmodem.o 以下のように愚痴を言うかもしれません: kernel-module version mismatch ltmodem.o was compiled for kernel version 2.2.12-20 while this kernel is version 2.2.14. 【訳注:このエラーメッセージの意味。 カーネルモジュールのバージョンが一致しません。 ltmodem.o はカーネルバージョン 2.2.12-20 用にコンパイルされて いますが、このカーネルはバージョン 2.2.14 です。】 こうなった場合は、次のように強制的に挿入します。 insmod -f ltmodem.o このようにしてから、カーネルへの挿入が成功したかチェックします: lsmod 挿入が成功すると以下のようにltmodem.oを含むリストが表示されます。 Module Size Used by ltmodem 453200 0 (unused) nls_iso8859-1 2268 1 (autoclean) nls_cp437 3744 1 (autoclean) vfat 9052 1 (autoclean) fat 29248 1 (autoclean) [vfat]: ... モジュール (ltmodem) が挿入されない場合は、未解決の問題があります。 some-driver.o が、モデム・ハードウェアに適合していないのかもしれませ ん。カーネルと、モジュールがコンパイルされたそれぞれのソースの間の差が ありすぎるのかもしれません。または、そのモジュールは、前もってロードさ れる別のモジュールを必要としているのかもしれません。(PCTel パッケージ には、2つのモジュールを持つものがあります。この二つの挿入する順序を逆 にしてみたらどうでしょう?)。これまでの努力を完全に放棄する前に、バー ジョンがぴったりと一致するカーネルをインストールし、テストしてみるとよ いでしょう。 Linux カーネル のソースファイル はダウンロード可能であり、コンパイル済みのカーネルは多くの Linux ディ ストリビューションで利用できます。 挿入が成功したら、先に進む価値があります。 4.5. モジュールとカーネルバージョンの調整 o Lucent LT と ESS: 以下のステップで、最後のもの以外は全てオプションですが、強制せず に、かつバージョン不一致の警告メッセージなしでモジュールを挿入する ことができます。(ESS モデムの場合、以下の "ltmodem" を"esscom" に 置き換えてください。) 1. 作業用の場所を作成するために mkdir /root/modem および cd /root/modem と入力してください。 2. "fixscript" を/root/modem/fixscript という名前のファイルにセー ブしてください。 3. chmod +x fixscriptでスクリプト実行可能にします。 4. モジュールファイルをリネームします: mv ltmodem.o ltmodem.2212.o 5. モジュールファイルを "Fix" します: ./fixscript ltmodem.2212.o ltmodem.o 6. Fix したモジュールをテストします: insmod ltmodem.o (これは、 バージョンの警告をせずに挿入するはずです) 7. ltmodem.o をモジュールの標準的な場所にコピーします: cp ltmodem.o /lib/modules/`uname -r`/misc/ltmodem.o (`uname -r` は、現在実行しているモジュールを指定します) 最後の3つのステップは、新しいカーネルがインストールされるたびに繰り 返す必要があり、新しいカーネルでのセッションの間「のみ」有効です。 Linux カーネルが 2.2.15-x またはそれより新しいものを実行しているな ら、次のステップで説明するように、カーネル2.2.14(これの上でも "fixscript" を使用する必要があります)からppp.oモジュールを得る必要 があります。 o PCTel: PCTel モジュール・パッケージには明らかに 2つのタイプがあります。 1. 2つのモジュールファイル pctel_hsp.o と pctel_pci.o を /lib/modules/2.2.16 にインストールするパッケージ (rpm または deb 形式) このようなパッケージで、2.2.16 より新しいカーネルを実行している 場合、前記の Lucent と ESS モジュールで使用した "fixscript" の方 法を試す必要がありますが、私はまだ実際に試してみたらどうなるか経 験していません。 2.2.16 より古いカーネルを実行しているなら、カー ネルをアップグレードすることを考えるか、さもなければ同様に fixscript すること(これも動作が保証されていません)を試す必要が あります。 2.2.14 ppp.o モジュールを入手するべきではありません。 これらが動作した場合は、私にレポートを送ってください。 2. パッケージを展開すると、lib/ の下に一組のライブラリ (hsp.a等) と src/module/ の下に小さな C ソースファイル (ptmodule.c) が格納さ れるはずです。ディレクトリがない場合は、以下のようにして作り、 ファイルを整えてください: mkdir lib mkdir src mkdir src/module mv *.a lib/ mv Makefile *.c src/module それでは src/module/ ディレクトリへ行って make と入力してください。 これはモジュール・ファイル pctel.o を生成し、 lib ディレクトリに バックアップができるはずです。 (ドライバモジュールは、src/module の ファイル ptmodule.o ではありません!) このようにして作成されるモジュールのバージョンは、現在のカーネル・ バージョンと一致します。 4.6. 必要かつ希望するなら 2.2.14 ppp.o をフィックスする Lucent または ESS モデムを持っていて、しかもカーネルが 2.2.15-x より新 しいなら、2.2.14 ソースからの ppp.o を使用する必要があります。このモ ジュールのコピーは、下記から入手できます . これは、以下で説明するようにして、適切な /lib/modules/`uname -r`/net ディレクトリにコピーできます。 insmod -f ppp.o で強制することを避ける ために、ここで説明するカーネル・バージョン 2.2.17 の不一致の例のよう に、不一致の ppp.o はバージョンをフィックスすることができます。 1. su root および、パスワードを入力します。ワーキングディレクトリを cd /root/modem に変更します。 2. モジュールバージョンを実行中のカーネルバージョンに合わせます: fixscript ppp2214.o pppfix.o 3. オリジナルのモジュールが既にロードされているなら、カーネルからそれ を削除します: rmmod ppp 4. insmod pppfix.o で不一致の愚痴を言うことなく進行します。 5. lsmod で、ppp が挿入された一覧表が表示されます。 6. このようになったら、最後にオリジナルのモジュールをセーブします。 /lib/modules/2.2.17/net/ppp.o があることを確認し、リネームします: mv /lib/modules/2.2.17/net/ppp.o /lib/modules/2.2.17/net/ppp2217.o そして、修正した pppfix.o を置きます。 cp pppfix.o /lib/modules/2.2.17/net/ppp.o 4.7. モジュールをモジュールディレクトリにコピーする 他のモジュール (例えば ltmodem.o,esscom.o, pctel*.o) を、下記ディレク トリにまだコピーしていないなら。 /lib/modules/`uname -r`/misc/ 4.8. デバイスファイルを作成する o Lucent LT: mknod /dev/ttyS14 c 62 78 o PCTel: mknod /dev/ttyS15 c 62 79 o Esscom: mknod /dev/esscom c 127 1 o Esscom ユーザは、/dev/ttyS14 を /dev/esscom にリンクして wvdial の ような ttyS* 型式の名前を認識するだけの ppp ダイアラを使いたいと思 うかもしれません。注:しかし、その wvdial はカーネル 2.2.16 (そし て、おそらく他でも)の下で、このモジュールと ppp-off でカーネル・パ ニックを起こすと報告されています。しかしこれは、一般的な状況でない かもしれません。 root 以外のユーザがこのデバイスを使ってダイヤルすることを許可するに は、ファイル・パーミッションをセットします。例えば、 chgrp uucp /dev/ttyS14 chmod 666 /dev/ttyS14 グループの定義は /etc/group で変更できます。 4.9. /dev/modem をデバイスファイルにリンクする ln -s /dev/yourdevicefile /dev/modem 【訳注:yourdevicefile は、実際は ttyS14 とか ttyS15 です】 4.10. モジュールをカーネルに挿入する 注: 前記の「モジュールとカーネルバージョンの調整」のステップを省略し た場合、ここで "insmod -f" を使用する必要があります。 o Lucent LT: insmod ltmodem o Esscom: insmod essmodem o PCTel: insmod pctel o 注: PCTel ドライバはカントリーコードのパラメータを受け取ることがで きます。コードの一覧は付録をご覧ください。 4.11. シリアルポートの設定を変更する 多くの場合、Linux システムでは新しい "serial" デバイス /dev/ttyS14 ま たは 15 の追加を通知する必要があります。 4.11.1. 古いカーネル (2.0.x) 利用可能なドライバは、カーネルバージョン 2.2.x (x は10台)用にコンパイ ルされている傾向があります。しかし、何らかの理由でカーネルのアップデー トができない/したくない場合のために、 Werner Heuser (wehe(at)snafu.de) が以下のような古いカーネル用の助言をしています。 カーネル 2.0.x では、シリアルポートはシリアルドライバのソース自身、つ まり /usr/src/linux/drivers/char/serial.c の中で定義されています。 2.1.98 以降では、これらは /usr/src/linux/include/asm-i386/serial.h に 移され、かつカーネル・コンフィグレーション中は CONFIG_SERIAL_MANY_PORTS, MULTIPORT, SHARE_IRQ を必要とします。デバイ スファイルの適切な行を変更することができます。たとえば、 /* UART CLK PORT IRQ FLAGS */ ... { 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS14 (spare; user configurable) */ { 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS15 (spare; user configurable) */ のどちらかの行を、 { 0, BASE_BAUD, 0x0260, 3, STD_COM_FLAGS}}, のように、あなたのハードウェア用に適切なポート/IRQ で、変更します。こ れらの変更をした新しいカーネルをブートするとき、以下のようなメッセージ が表示されるでしょう。 Serial driver version 4.13 with no serial options enabled 【訳注:シリアルオプションを有効にしていないシリアルドライバ version 4.13】 tty00 at 0x03f8 (irq = 4) is a 16550A tty14 at 0x0260 (irq = 3) is a 16550A 4.11.2. 新しいカーネル 最近の Linux カーネルでは、通常 /etc/serial.confようなスクリプトファイ ル とプログラム setserial が、シリアルポートのパラメータを管理するため に使われます。その設定は、明らかに選択したカーネル/ディストリビュー ションに依存しますが、たぶん新しいデバイスに適応させるために修正する必 要があります。このような修正のために最も参考になるのが、David S. Lawyer の優れた Serial HOWTO で、特に Setserial のセクションです。特に、彼はここで「ラップ トップ(PCMCIA)では決して setserial を使わないように」と注意していま す。ご使用のディストリビューションのドキュメントは、特定のデフォルトと 使用されている初期化スクリプトについて、より多くの情報を提供しているは ずです。 例えば Sean の Lucent LT モデム付きラップトップは、Red Hat 6.2/kernel 2.2.14-5 を実行していますが、/etc/serial.conf を修正する必要がありませ ん(実際は存在しません)。しかし Debian をインストールした Marvin の PCI Lucent winmodem は、 /etc/serial.conf ファイルに以下のセクションが必要 です。 # These are two spare devices you can use to customize for # some board which is not supported above.... # #Lucent Modem driver version 4.27.5.66 # ltmodem.o was compiled for kernel version 2.2.12-20 # with MANY_PORTS MULTIPORT SHARE_IRQ enabled # ttyS14 at 0x0260 (irq = 3) is a Lucent /dev/ttyS14 uart 16450 port 0x0260 irq 3 #/dev/ttyS15 uart XXXXX port XXXX irq X # These are the ports used for either the Usenet Serial II # board, or the Boca Board 4, 8, or 16 port boards. あなたの特有の設定で、割り込み(IRQ)の割当てが衝突するものは何であろう と通常は避けるべきです。シリアルポートのプロパティ情報は、次のようにし て表示できます: setserial -agv /dev/ttyS* これは、以下のような情報を返します: /dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4 Baud_base: 115200, close_delay: 50, divisor: 0 closing_wait: 3000 Flags: spd_normal skip_test session_lockout /dev/ttyS14, Line 14, UART: 16950/954, Port: 0x0260, IRQ: 3 Baud_base: 115200, close_delay: 50, divisor: 0 closing_wait: 3000 Flags: spd_normal skip_test 4.12. 最小のターミナルプログラムで試してみましょう ここで、あなたはたぶん minicom のような小さなターミナルプログラムでダ イアリングを試してみたいと思うでしょう。 4.13. ppp ダイアラの設定 これらのスクリプトの名前と位置は、特定の Linux ディストリビューション (Redhat, Debian, Suse およびその他色々)と、(kppp や wvdial のような)特 定のダイアルアップを仲介するソフトウェアに依存します。多くのディストリ ビューション/ダイアルアップ・ソフトウェアには、入力を要求し、自動的に ダイアルアップ・スクリプトを作成する設定ユーティリティがあります。最低 限必要な情報は以下のとおりです。 o ISP (Internet Service Provider) の電話番号 o ISP のユーザ名とパスワード o モデムデバイスファイル (例えば /dev/modem, /dev/ttyS14 , など) 何か問題が起きたら PPP ダイアラのドキュメント、および/または、 PPP- HOWTO をご覧くだ さい。 Debian での pppconfig の特定のサンプルのスクリプトが付録にあり ます。 4.14. ダイアルアップ ppp ダイアラで ISP への接続を試してみてください。 4.14.1. 動いた! おめでとう! 4.14.2. 動かない! ちくしょう! それを解決するための若干のアイデアについて、この HOWTO のトラブルシュ ーティングと FAQ のセクションをご覧ください。 4.15. インストール後 ダイアルするたびにモジュールをカーネルに挿入することを避けるには、付録 の「ppp 関連モジュールの挿入と削除の一致」の項をご覧ください。 5. FAQ 5.1. 私は winmodem を持っていますが Linux で動くでしょうか? たぶんだめでしょう。前記の「どの Linmodem ハードウェアがサポートされて いますか?」のセクションをご覧ください。そして Linux モデムの互換性 (Linux Modem Compatibility)について Rob Clark のサイト の database をチェックしてく ださい。 5.2. "device or resource busy" というエラーがでました。 o ISA モデムをお持ちの場合は、IRQ と DMA のリソースを割り当てるための isapnptools を使用しましたか? 詳しくは前述の "ISA プラグ・アンド・ プレイ" をご覧ください。 o setserial -agv /dev/ttyS* を実行すると、まともなデバイスファイルの 内容が報告されますか? もし、そうでなければこの後の「シリアルポート の設定を変更する」という項目をご覧ください。 o さもなければ、あなたが作成したデバイスファイルは正しいか、念入りに チェックし、IRQ のコンフリクト(衝突)がなくなるようにしてください。 全てうまくいっているように見えるのに動かない場合は、 Linmodems.org メーリングリストで、誰か別の人が同じ問題を 持っていないか(そして解決済みでないか)をチェックしてください。また は、自分自身で解決して、その結果を他の人に知らせるように試みてくだ さい。 5.3. fixscript または insmod で "unresolved symbols" になりました。 Unresolved symbol は、バージョン不一致の本物の脅威です。そして一般的に は悪いことにバイナリモジュールではほとんど避けられません。 fixscript が unresolved symbol と報告する場合、または unresolved symbol にもかか わらずモジュールが動作しないなら、そのカーネルとモジュールの組み合わせ は運が悪いのでしょう。しかし、以下のようなシンボルが含まれる、いくつか の共通なケースもあります。 o slhc_xxxx: たぶん modem や ppp モジュールを挿入する前に slhc モジュ ールを insmod する必要があるでしょう。 o printk, jiffies: あなたのカーネルは、たぶん SMP を enable にしてコ ンパイルされているのでしょう。どのバイナリモジュールも SMP-safe で あることは分かっていません。そして、たぶんシングルプロセッサ・マシ ン上のシングルプロセッサ・カーネル(つまり、SMP が disable になって いる)でのみ動作するでしょう。カーネルの再コンパイルを試すか、そうで なければ SMP が disable のバージョンを入手するべきです。 (ありがと う Tom Reinertson (treinertson(at)uswest.net)) o tty_xxxx と esscom.o: 初期の fixscript は、このモジュール内のバー ジョン固有のシンボルを扱うことができませんでした。拡張された fixscript がこの HOWTO のバージョンには入っています。これはこのモ ジュールもフィックスできるはずです。これは、あなたが depmod ユー ティリティのかなり新しいバージョンを持っていることを前提にしていま す。新しいバージョンは fixscript コードのこれらの新しいパーツの信頼 性と柔軟性を改善するでしょう。スクリプトが改良されたかどうかを知る には、この HOWTO のより新らしいバージョンを探してください。 モジュールの動作が不安定な場合、ある条件下では、それらのシンボルを 避けているのに、他方ではそれらをののしっているのでしょう。同じよう な状況で異なる関数のセットをコールする別の ppp ダイアルアッププログ ラム (wvdial, kppp) を試してみてください。また、LUCENT モジュール用 に設計された fixscript も、あなたのモジュールで使用されているシンボ ルを "fix" していない可能性があります。動作する組み合わせが見つから ない場合は、モジュールにより密接にバージョンがマッチするカーネルの 「ダウンロード」を検討してください。 5.4. SuSE (または他の)カーネルで ppp2214.o が動作しません。 2.2.14 ppp.o のトリックは、カーネルのバージョンと設定に敏感なようにみ えます。できるだけカーネルにマッチするものを入手するようにしてくださ い。そして、それが動作しないときは、他のソースから得ることを試してくだ さい。 Christoph Hebeisen は、彼のサイト で SuSE 7.0 のための SuSE 2.2.16 カーネル用 2.2.14 ppp.o をポストしています。これは動くはずです。 5.5. PCTel のモデムが動作しません。 o モジュールにカントリーコード・パラメータを与える必要がありますか? 付録をご覧ください。 o 適切なドライバモジュールを使用していますか? PCTel ドライバは何種類 か存在します(前述の "どの Linmodem ハードウェアがサポートされている か?" をご覧ください)。他のどれかを試してみるとよいかもしれません。 5.6. モデムがダイヤルして接続できますが、コネクションが落ちます。 これは解決策がない、よく寄せられる問題です。 これは、モジュールは正常にインストールされていて動作しますが ppp の設 定に問題があるのでしょう。詳しくは前記の「ppp ダイアラの設定」をご覧く ださい。 あるカーネル/モジュールの不一致で、同じモジュールとハードウェアで wvdial ではこのエラーが出ないが、kppp のようなプログラムではこのエラー が出るという報告があります。他の ppp ダイアラを試してみるとよいかもし れません。 これらで解決しない場合は、モジュールに密接なカーネルバージョンを使用す ることを検討するとよいかもしれません。そうでなければ、Linmodems.org のメーリングリストで助けを求めてみてください。 5.7. コネクションを閉じるか、ドライバをアンロードするとカーネル・パ ニックが 起きます。 これの解決法は 2 つあります。下記の何れかで動くでしょう。 o 別の ppp ダイアラ (wvdial, kppp) を試してみる。 o モジュールがカーネルの中にとどまる、つまりアンロードされないように 設定する。 5.8. 何も動いていないようにみえます。誰に助けを求めればよいでしょう? o あなたのモデムがそのモジュールで本当にサポートされているのか二重 チェックをしてください。上記の「どの Linmodem ハードウェアがサポー トされているのか?」の項をご覧ください。 o インストールプロセスのどの時点でだめになるのかを見極めてください。 その時点で使用されるコマンドの man ページをチェックし、問題の原因を 突き止めることができるか、見てください。 全くわからないようであれば、以下の「トラブルシューティング」の項を見て ください。そして Linmodems.org に書いてあるよう に完全な情報を添えてメーリングリストにメッセージを送ることを考えてくだ さい。 5.9. winmodem のドライバは誰が書いたのですか。彼(女)と連絡をとるには どうすればよいですか? たぶん、メーカの誰かに連絡をとっても、その人はたぶんソースコードをアッ プデート/リリース/変更する権限を持たないでしょう。そして、いずれにせ よ、その人はたぶんあなたの電子メールに返事を出すことはないでしょう。例 えば を見てください。 6. トラブルシューティング このドキュメントと、 Modem-HOWTO と PPP Howto を通読して、あなたのモデムが利用可能なドライバの一つ に適合することをかなり確信しているのに、それはまだ動作しませんか?問題 を克服するための過程には、たくさんのポイントがあります。 Marvin Stodolsky は、次のように書いています。 一般的に Linux は、トラブルシューティングの問題で非常に役に立つネット ワーク接続の記録を保持しています。それらの特定のファイル名は、Linux ディストリビューションとダイアルイン・ソフトウェアの両方によって変化し ます。下記の要請される情報を集めると、それはあなた自身のトラブルシュー ティングとメーリングリストに助けを乞う問合せの両方のために、役に立つで しょう。 root 権限で (下記にある) Modem test と名付けたスクリプトの記 録を始めてください。このスクリプトが "exit," で終了したあと、それを Linux パーティションからあなたを援助するかもしれないメーリングリストに 送信するためにコピーしてください。モデム・インストール・スクリプトが存 在するディレクトリに移ってください。下記の # は説明に役立つコメントで す。 # 記録を開始する script ModemTest.txt # お持ちのモデムカードの情報をなるべく多く入力する echo winmodem name, manufacturer, designation, and chip if possible # 現在のカーネルバージョン uname -r # これはシリアルポートの情報を表示します setserial -agv /dev/ttyS* # 割り込み(IRQ)の情報 cat /proc/interrupts # モジュール・インストール・スクリプト(スクリプト名を挿入)の内容を表示します。 cat ScriptName # スクリプトが実行可能かチェックします: ls -l ScriptName # 下記のように "x" があれば応答は OK : # -rwxrw-rw- 1 root root 654 Jan 6 2000 ltinst # そうでなければ、それを実行可能にします: chmod o+x ScriptName # 確認します ls -l ScriptName # ScriptName がうまくいかなかったら、このカーネルで実行する前に # これで実行してください: ./ScriptName # /dev/modem にセットされているシンボリックリンクは何か: ls -l /dev/modem # ScriptName (/dev/ttyS14 or ...?)で指定されている DeviceName は何か: echo DeviceName # モデムドライバの名前は? DriverName.o のように # ".o" がついているのはコンパイル済みのバイナリです。 echo This is my DriverName.o # モジュール・パスに挿入したのなら # 次のように、それがそこに表示されるか試します: find /lib/modules | grep DriverName # DriverName が、動作中のカーネルにインストールされているモジュール群 # の中に含まれていますか? lsmod # だめなら簡単な挿入を試してみましょう: insmod ./DriverName.o # または、それがモジュール・パスの中にあるなら、下記で十分です: insmod DriverName # 挿入をチェックします: lsmod # 挿入されていなかったら、強制的に試してみます: insmod -f ./DriverName # もう一度、挿入モジュールを表示します lsmod # DriverName がリストされない場合、モデム・ハードウェア、ドライバ、カーネル # の間に互換性がありません。それ以上努力しても無駄なだけです。 # DriverName がリストされるなら、もう少し多くの情報を集めましょう。 # 最初に、Linux インストール用のダイアルイン接続の設定に使われる # 設定ユーティリティを再実行したいかもしれません。 # 後でこの記録からあなたのパスワードを編集することを忘れないでください。 # 準備しておかなければならない以下の情報について、多分たずねられるでしょう: # 使用するポート(/dev/modem または /dev/ttySn)、ダイアル番号、ユーザ名、 # パスワード。 # 設定ユーティリティを実行します。 YourSetUpConf # 記録をやめる exit ダイアルインが成功しないなら、ログ・ファイルからこの記録を追加してくだ さい。例として Debian Linux システムの /var/log/syslog/ のセクションを 以下に示します。 Aug 21 08:35:41 koala kernel: CSLIP: code copyright 1989 Regents of the University of California Aug 21 08:35:41 koala kernel: PPP: version 2.3.7 (demand dialling) Aug 21 08:35:41 koala kernel: PPP line discipline registered. Aug 21 08:35:42 koala kernel: registered device ppp0 Aug 21 08:35:42 koala pppd[1539]: pppd 2.3.11 started by root, uid 0 Aug 21 08:35:43 koala chat[1545]: abort on (BUSY) Aug 21 08:35:43 koala chat[1545]: abort on (NO CARRIER) Aug 21 08:35:43 koala chat[1545]: abort on (VOICE) Aug 21 08:35:43 koala chat[1545]: abort on (NO DIALTONE) Aug 21 08:35:43 koala chat[1545]: abort on (NO DIAL TONE) Aug 21 08:35:43 koala chat[1545]: abort on (NO ANSWER) Aug 21 08:35:43 koala chat[1545]: send (ATZ^M) Aug 21 08:35:43 koala chat[1545]: expect (OK) Aug 21 08:35:43 koala chat[1545]: ATZ^M^M Aug 21 08:35:43 koala chat[1545]: OK Aug 21 08:35:43 koala chat[1545]: -- got it Aug 21 08:35:43 koala chat[1545]: send (ATQ0V1E1S0=0&C1&D2S11=55+FCLASS=0^M) Aug 21 08:35:44 koala chat[1545]: expect (OK) Aug 21 08:35:44 koala chat[1545]: ^M Aug 21 08:35:44 koala chat[1545]: ATQ0V1E1S0=0&C1&D2S11=55+FCLASS=0^M^M Aug 21 08:35:44 koala chat[1545]: OK Aug 21 08:35:44 koala chat[1545]: -- got it Aug 21 08:35:44 koala chat[1545]: send (ATDT17574238738^M) Aug 21 08:35:44 koala chat[1545]: expect (CONNECT) Aug 21 08:35:44 koala chat[1545]: ^M Aug 21 08:36:16 koala chat[1545]: ATDT17574238738^M^M Aug 21 08:36:16 koala chat[1545]: CONNECT Aug 21 08:36:16 koala chat[1545]: -- got it Aug 21 08:36:16 koala chat[1545]: send (\d) Aug 21 08:36:17 koala pppd[1539]: Serial connection established. Aug 21 08:36:17 koala pppd[1539]: Using interface ppp0 Aug 21 08:36:17 koala pppd[1539]: Connect: ppp0 <--> /dev/ttyS14 Aug 21 08:36:18 koala pppd[1539]: sent [LCP ConfReq id=0x1 ] Aug 21 08:36:18 koala pppd[1539]: rcvd [LCP ConfReq id=0x1 < 00 04 00 00> < 11 04 05 f4> < 13 09 03 00 c0 7b 7d 08 8c>] Aug 21 08:36:18 koala pppd[1539]: sent [LCP ConfRej id=0x1 < 00 04 00 00> < 11 04 05 f4> < 13 09 03 00 c0 7b 7d 08 8c>] Aug 21 08:36:18 koala pppd[1539]: rcvd [LCP ConfAck id=0x1 ] Aug 21 08:36:18 koala pppd[1539]: rcvd [LCP ConfReq id=0x2 ] Aug 21 08:36:18 koala pppd[1539]: sent [LCP ConfAck id=0x2 ] Aug 21 08:36:18 koala pppd[1539]: sent [LCP EchoReq id=0x0 magic=0x64acd5df] Aug 21 08:36:18 koala pppd[1539]: sent [PAP AuthReq id=0x1 user="stodolsk" password=] Aug 21 08:36:19 koala pppd[1539]: rcvd [LCP EchoRep id=0x0 magic=0x0] Aug 21 08:36:19 koala pppd[1539]: rcvd [PAP AuthAck id=0x1 ""] Aug 21 08:36:19 koala pppd[1539]: sent [IPCP ConfReq id=0x1 ] Aug 21 08:36:19 koala kernel: PPP BSD Compression module registered Aug 21 08:36:19 koala kernel: PPP Deflate Compression module registered Aug 21 08:36:19 koala pppd[1539]: sent [CCP ConfReq id=0x1 ] Aug 21 08:36:19 koala pppd[1539]: rcvd [IPCP ConfReq id=0x1 ] Aug 21 08:36:19 koala pppd[1539]: sent [IPCP ConfAck id=0x1 ] Aug 21 08:36:19 koala pppd[1539]: rcvd [IPCP ConfNak id=0x1 ] Aug 21 08:36:19 koala pppd[1539]: sent [IPCP ConfReq id=0x2 ] Aug 21 08:36:19 koala pppd[1539]: rcvd [LCP ProtRej id=0x3 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f] Aug 21 08:36:19 koala pppd[1539]: rcvd [IPCP ConfAck id=0x2 ] Aug 21 08:36:19 koala pppd[1539]: Cannot determine ethernet address for proxy ARP Aug 21 08:36:19 koala pppd[1539]: local IP address 207.172.212.104 Aug 21 08:36:19 koala pppd[1539]: remote IP address 10.65.9.14 Aug 21 08:36:19 koala pppd[1539]: Script /etc/ppp/ip-up started (pid 1548) Aug 21 08:36:20 koala pppd[1539]: Script /etc/ppp/ip-up finished (pid 1548), status = 0x0 7. 付録:便利なスクリプトとその他の情報 7.1. Fixscript: バイナリモジュールのカーネルバージョン情報の変更 (Mark Spieth) 以下のスクリプトは、モジュールのカーネル・バージョン情報を編集して、実 行カーネルと一致させます。これは、実際にはカーネル API の矛盾を修正す るためのモジュールコードのアップデートはせず、単に異なるバージョンの下 でコンパイルされたモジュールを仮装する、ということに注意してください。 これは、簡素な insmod コールを使って【訳注:つまり -f フラグで強制しな くても】、警告無しでモジュールの挿入をできるようにしますが、決してモ ジュールの動作を保証するものではありません。 スクリプトを以下に示しますが、 からダウンロードす ることもできます。 スクリプトは chmod +x fixscript のようにして、実行可能にする必要がある ことに注意してください。 The script: #! /bin/bash # To make this file executable: chmod +x fixscript # This is a very slight edit of the ltfixscript contributed to # the Linmodems Newslist # From - Sun Jul 23 04:27:38 2000 # From: "Mark Spieth" # To: # Subject: ltmodem symbols and version fixed # Date: Sun, 23 Jul 2000 12:39:44 +1000 # Organization: Digivation Pty Ltd echo "Fixscript V1.21" if [ -z "$1" -o -z "$2" ]; then cat < $MI #build the objcopy command CMD="objcopy" #for i in `depmod -e $1 | grep -vE "^$1:"` ; do depmod -e $1 2>$DI AWKSTR=\$2 for i in `awk "{print $AWKSTR}" $DI | grep _R` ; do echo doing $i i1=`echo $i | awk '{ gsub(/_R[0-9a-fA-F]+/,""); printf("%s", $1); }'` echo "i1=" $i1 echo " trunc=\"$i1\"" searchstr=$i1"_R" echo "searchstr=" $searchstr new=`cat /proc/ksyms | grep $searchstr | awk "{print $AWKSTR}"` echo " new=$new" CMD="$CMD --redefine-sym=$i=$new" done #replace the modinfo section with the new one CMD="$CMD --remove-section=.modinfo --add-section=.modinfo=$MI" CMD="$CMD $*" #run the command echo "CMD:" $CMD $CMD #remove the section file rm -f $MI rm -f $DI 7.2. ppp 関連モジュールの挿入と削除の一致 (Marvin Stodolsky) 初期化スクリプト /etc/rc.d/rc.local の最後に insmod -f ltmodem を追加することにより、Lucent ドライバのインストール用スクリプトは、デ フォルトでブート時にモジュールがロードされるようになります。例えば ESS モデムをお持ちなら上記の "ltmodem" を "esscom" に置き換えるとブート時 にモジュールが自動的にロードされます。しかし、初期化スクリプトは Linux ディストリビューションによって異なるので、あなたの固有の設定に合わせて 適切なスクリプトを見つけるか/修正するか/作成する、必要があることにご 注意ください。 しかし多くのユーザは、必要なときだけ補助モジュールを挿入する「スリムな カーネル」を実行することを好みます。以下に、 Lucent winmodem と ltmodem.o ドライバを使ったオンライン・セッションをスタート、ストップす るためのスクリプトの例を示します。これは、単に "ltmodem" を "YourModemDriver" (あなたがお持ちのモデム用のドライバ)と入れ替えるだけ で、他の多くのドライバにも適用することができます。 Modemup: #!/bin/sh # This script inserts the kernel modules supporting # WinModems using the Lucent ltmodem.o module. # Save as /usr/local/bin/Modemup, then # chmod a+x /usr/local/bin/Modemup # to make it executable. # Since insmod & rmmmod require root permission, permission for an # ordinary User must be given under secure-su or sudo. # # the ltmodem.o driver must be within /lib/modules/kernl-version/misc # # When kernel-source-2.?.?? code becomes available for ltmodem.o , # forced "-f" insertion should be removed from the following line: /sbin/insmod -f ltmodem # and the complaint about version mis-match will also then disappear. insmod slhc # is needed to support ppp insmod ppp # if you are using a ppp.o which is not version matched with the kernel # insmod -f ppp # may be necessary instead echo Loaded kernel modules are: lsmod # An automatic start of the ppp connection is specified # by entering the command that starts your online session such as: # wvdial, pon, ppp-on, kppp or # Whatever ## End Modemup Modown: #! /bin/sh # /usr/local/bin/Modown ends a pppd session and does cleanup. # Save as /usr/local/bin/Modown, then # chmod a+x /usr/local/bin/Modown # Starting pppd session related modules are: # ppp_deflate 39108 1 (autoclean) # bsd_comp 3664 0 (autoclean) # ppp 19916 2 (autoclean) [ppp_deflate bsd_comp] # slhc 4200 1 (autoclean) [ppp] # ltmodem 452936 1 # NOTE THAT ltmodem did NOT acquire autoclean status echo " " echo Terminating ppp0 with poff poff sleep 1 # is a pause to let the poff process to terminate, after which /sbin/rmmod ltmodem # removes ltmodem.o module echo " " echo Removed module ltmodem # /sbin/lsmod # echo " " # echo A pause before removing modules ppp_deflate bsd_comp, then ppp slhc sleep 1 /sbin/rmmod ppp_deflate bsd_comp /sbin/rmmod ppp slhc /sbin/lsmod # but doesn't remove the sound related modules called up. Thus echo " " echo Removing sound related module called by LTmodem, soundcore echo " " if not otherwise in use. /sbin/rmmod soundcore echo Remaining modules in kernel-`uname -r` are: /sbin/lsmod # displays remaining modules echo " " ## End Modown 7.3. PPP スクリプトの例 (Marvin Stodolsky) pppconfig による Debian へのインストール用 PPP スクリプトの例を示しま す: /etc/ppp/peers/provider: # This optionfile was generated by pppconfig 2.0.5. hide-password noauth connect "/usr/sbin/chat -v -f /etc/chatscripts/provider" debug /dev/ttyS14 # port used by the Lucent Winmodem 115200 defaultroute noipdefault user NameAtIP remotename provider ipparam provider /etc/chatscripts/provider: # This chatfile was generated by pppconfig 2.0.5. # Please do not delete any of the comments. Pppconfig needs them. # # ispauth PAP # abortstring ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' # modeminit OK ATQ0V1E1S0=0&C1&D2S11=55+FCLASS=0 # ispnumber OK-AT-OK ATDT3019178111 # ispconnect CONNECT \d\c # prelogin # ispname # isppassword # postlogin # end of pppconfig stuff 7.4. PCTel モジュールパラメータ: カントリーコード 下記は、PCTel readme ファイルから引用しました。これの私の解釈は、 insmod pctel.o country_sel=7 のようにしなければならないということです (下記に示すあなたの国のカント リーコードに依存します)。これが動作したら(または動作しなかったら)、私 sean(at)walbran.org に教えてください。 カントリーコードの設定とレポート このドライバは、様々な国の電話網のための正しいカントリーコードを設定し たり、どのカントリーコードがセットされているかを報告できるモジュール・ パラメータがあります。カントリーコードの選択と報告のための 2つのバー ジョンがあります: バージョン 1: カントリーコードをセットするには: "country_sel_rep sel 7" は、カントリーコードを 7 にセットします。 現在セットされているカントリーコードを、ドライバにたずねるには: "country_sel_rep rep" は、戻り値として現在のカントリーコードを返します。 バージョン 2: カントリーコードをセットするには: "country_sel 7" は、カントリーコードを 7 にセットします。 現在セットされているカントリーコードをドライバにたずねるには: "country_rep" は、戻り値として現在のカントリーコードを返します。 country_code country_name 1 USA 2 FRANCE 3 GERMANY 4 ITALY 5 SWEDEN 6 UK 7 JAPAN 8 AUSTRALIA 9 SPAIN 10 TAIWAN 11 SINGAPORE 12 KOREA 13 SWITZERLAND 14 NORWAY 15 NETHERLANDS 16 BELGIUM 17 CANADA 18 IRELAND 19 PORTUGAL 20 POLAND 21 HUNGARY 22 FINLAND 23 DENMARK 24 AUSTRIA 25 S.AFRICA 26 CTR21 COUNTRIES 27 CHINA 28 MALAYSIA 29 LUXUMBURG 30 GREECE 31 ICELAND 32 NEW ZEALAND 33 BRAZIL 8. 日本語訳について 翻訳に関するご意見は JF プロジェクト 宛てに連絡してく ださい。 校正: o Tsutomu Kawashima o TAKEI Nobumitsu o Shintarou Sakai o Daisuke KATO o Yuji Senda