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

2. コンパイル、インストール、設定

2.1 必要なファイルとカーネルの設定

PCMCIA をインストールするためには以下の環境が必要です。

PCMCIA カードサービスの最新バージョンは、1.2.8 以降か 1.3.30 以降のカー ネルに対応しています。1.3.30 以降のうち、1.3.38 は全くダメで、1.3.31 から 1.3.36 のバージョンではテストしていません。また、新しいモジュール ユーティリティも必要となります。PCMCIA を使うためにカーネルへパッチを あてる必要はありません。

PCMCIA のプログラムの中にはカーネルのソースを参照している部分があるの で、コンパイルする際にはコンパイル済のカーネルだけでなく、カーネルのソー スコードそのものが必要です。不要なドライバを除いた新しいカーネルをコン パイルしたくなるかも知れませんが、PCMCIA カードサービスをインストール するためにカーネルを再構築する必要はありません。

最新の「安定版」のカーネルのソースとパッチは、sunsite.unc.edu/pub/Linux/kernel/v1.2tsx-11.mit.edu/pub/linux/sources/system/v1.2 にあります。最新のモジュールユー ティリテイも同じところにあり、modules-1.2.8.tgz というファイル名 になっています。開発中のカーネルは v1.3 のサブディレクトリに入っていま す。最新のカーネルとコンパイラを組み合わせると、古いバージョンのモジュー ルユティリテイが使えない場合があります。最新版のモジュールユーティリティ は http://www.pi.se/blox/modules にあります。

カーネルを設定する際、PCMCIA のイーサネットカードを使うつもりなら、 ``networking support'' を [Y] にして、``pocket and portable adapters'' を含む一般の Linux 用のネットワークカード用のドラ イバは全て使わないように設定します。PCMCIA ネットワークカード用のドラ イバは必要なときにロードされるモジュールとして提供されていますので、カー ネルにドライバを組みこむのはメモリのムダでしかありません。

SLIP や PPP, PLIP を使う場合、カーネルの設定時にこれらを使うように指定 するか、これらのドライバの実行時ロードモジュールを使う必要があります。 残念ながら 1.2.X ではカーネルの設定プロセスに問題があり、実行時ロード モジュール用の細かな設定(例えば SLIP の圧縮の有無)ができません。そのた め、必要ならばこれらのドライバを(モジュールではなく)カーネルに組みこん でしまった方がいいでしょう。

PCMCIA トークンリングアダプタを使う場合、``Token Ring driver support''(CONFIG_TR)を設定して、CONFIG_IBMTRは使わないよ うにします。

もし PCMCIA SCSI アダプタを使うなら、カーネルの設定時に CONFIG_SCSI を設定します。使うメディアごとの SCSI ドライバ(ディス ク、テープ、CD-ROM、 generic)も使うようにに設定します。ホストアダプタ ごとのハードウェアレベルのドライバ(AHA152x, futuredomain 等)は使わない ように設定します。それらを組みこんでもメモリのムダです。

PCMCIA デバイスが必要とするドライバをモジュール化する場合、 /etc/pcmcia/config を修正して、カードの種類に合ったモジュール をロードするように設定します。例えば、シリアルドライバがモジュール化さ れている場合、/etc/pcmcia/configのシリアルデバイスの設定を


device "serial_cs"
  class "serial" module "serial", "serial_cs"

のようにします。

もし、CONFIG_MODVERSIONS を設定してカーネルをコンパイルしていれば、 カーネルに組みこまれている各種シンボルバージョンの記録ファイル、 /usr/include/linux/modversions.h の有無を、設定用のスクリプト がチェックします。/usr/include/linux/modversions.h はカーネル の ``make dep'' 時に自動的に生成されます。

このパッケージには cardinfo という X 上でカードの状態を表示するた めのユーティリティプログラムが入っています。cardinfo を使うために は、Forms Library と呼ばれるパブリックドメインのユーザーインターフェー ス用ツールキットが必要です。Forms Library はhyper.stanford.edu/pub/pcmcia/extras に a.out 版と ELF 版の両方を用意しています。

2.2 インストール

以下が簡単なインストールの手順です。:

``make config'' とすると、プログラムがいくつか設定のためのオプショ ンを尋ね、PCMCIA カードサービスをインストールする環境が整っているかど うかをチェックします。多くの場合、デフォルトの設定オプションのままで大 丈夫なはずですが、もし何か問題が起これば、このコマンドの出力を注意深く チェックしてみてください。

PCMCIA を別のマシンにインストールするためにコンパイルする場合、設定用 のスクリプトが尋ねる ``alternate target directory'' を指定してください。 このディレクトリ名は絶対パスで指定する必要があります。PCMCIA 用のツー ル類は全てこのディレクトリに元にした相対的なディレクトリにインストール されますので、そのディレクトリ以下を tar でまとめて、目的とするマ シンにコピーし、適切な場所に展開してください。

別のマシン用にクロスコンパイルする場合、コンパイラとリンカの別名を指定 した方がいいかも知れません。a.out と ELF が混在したような環境にもこの ような設定が必要でしょう。設定用スクリプトではデバッグ用に追加するフラ グの指定も可能です。

PCMCIA の各種ツールに関係するカーネルの設定オプションもいくつかありま す。たいていの場合、設定用のスクリプトはこれらのオプションを稼働中のカー ネルから検出します。別のマシン用にコンパイルする場合など、カーネルのソー スコードから設定オプションを読みこむこともできますし、それぞれのオプショ ンを対話的に設定することも可能です。

``make all'' して ``make install'' すると、プログラムをコン パイルし、カーネル用モジュールとユーティリティプログラムを適切な場所に インストールします。カーネル用のモジュールは /lib/modules/<version>/pcmcia ディレクトリにインストー ルされます。[訳注:version の部分は使っているカーネルのバージョン 番号(1.2.13, 1.3.67 等)が入ります ]cardmgrcardctl 用のプログラムは /sbin に、インストールしたなら cardinfo/usr/bin/X11 に、それぞれインストールされます。

設定用のファイルは /etc/pcmcia ディレクトリにインストールされ ます。もし古いバージョンに上書きしてインストールすると、古い設定ファイ ルは、拡張子を *.~1~*.~2~、のように変えて保存した上で、新 しいファイルをインストールします。

もしどのような PCMCIA コントローラ・チップが使われているかわからなけれ ば、 cardmgr/ サブディレクトリにある probe コマンドで調 べることができます。コントローラには大きく分けて Databook TCIC-2 と Intel i82365SL 互換チップの 2 つの種類があります。

cardmgr というデーモンがカードの着脱を管理しています。このプログ ラムは、初期の PCMCIA 用プログラムに入っていた Barry Jaspan 作の pcmciad と機能的にはよく似ています。cardmgr/etc/pcmcia/config から、既知のPCMCIA カードの設定について読 みこみます。このファイルには PCMCIAデバイスを使うために割りあてるコン ピュータの各種リソース(IRQ や I/O ポート)についても記述するので、お使 いのシステムにあわせて変更する必要があるかも知れません。このファイルに ついての詳細は pcmciaman ページをご覧ください。

/etc/rc.d ディレクトリにインストールされる rc.pcmcia と いうスクリプトは PCMCIA システムの起動と終了を管理します。``make install'' を実行すれば、probe コマンドを使ってあなたのコンピュー タが使っているコントローラの種類を識別し、rc.pcmcia を適切に修正 します。/etc/rc.d/rc.pcmcia を起動するために、システムのスター トアップファイルである /etc/rc.d/rc.M に以下の 1 行を加えて下さい:

/etc/rc.d/rc.pcmcia start

ごくまれに probe コマンドで自動的にコントローラを設定できない ことがあります。Tadpole P1000 を始めとするいくつかの PCI バスを使った ラップトップ機では、 Cirrus の特殊な PCI-PCMCIA ブリッジチップを使って いるため、probe コマンドで PCMCIA コントローラを検出できません。もし、 この種のシステムを利用されているならば、 i82365 モジュールをロー ドするように rc.pcmcia を修正する必要があります。Halikan NBD 486 システムでは TCIC-2 コントローラが変ったアドレスに位置しているので、 PCIC_OPTS のパラメータに``tcic_base=0x02c0''を指定する 必要があります。

2.3 マシンごとの設定オプション

カードサービス・システムは他の標準的なデバイスが既に使っている IO ポー トや IRQ は自動的に回避しようとします。非標準的なデバイスとぶつかって いることを検知しても自動的に別のリソースを使おうとしますが、この機能は まだ完璧ではないため、/etc/pcmcia/config.opts で使わないリソー スを明示的に指定する必要があるかも知れません。

以下は、特定のラップトップ機で必要なリソースの設定です。

いくつかの PCMCIA コントローラは、特定のシステムでしか使えない、あるい は特定のシステムでは使えないような、特殊な機能を持っている場合がありま す。ソケットドライバにはこの種の機能が使えるか否かを検知することはでき ません。使っているドライバの man ページをチェックして、どのようなオプ ション機能が利用できるか調べてみてください。

ハードウェアレベルのソケットドライバ、tcici82365 はバス タイミングを制御するためのパラメータを多数持っており、特に高速なプロセッ サを使ったシステムではそれらを調整する必要があるかも知れません。バスタ イミングに起因する問題としては、カードが認識されない、負荷が高いとハン グアップする、エラーがよく起きる、性能がでない、などがあります。詳細に ついては関連のマニュアルを見てもらうこととして、ここでは簡単な説明にと どめます。

これら全てのオプションは /etc/rc.d/rc.pcmcia ファイルを修正することで 設定できます。例えば、

# Should be either i82365 or tcic
PCIC=i82365
# Put socket driver timing parameters here
PCIC_OPTS="async_clock=1"
# Put pcmcia_core options here
CORE_OPTS="cis_speed=500"

いくつかタイミングの設定を行なわなければならないシステムを紹介します。

NEC Versa M など、Cirrus 製のコントローラを使っているいくつかのシステ ムでは、起動時に BIOS が PCMCIA コントローラを特別のサスペンドモードに 設定してしまい、probe コマンドが PCMCIA コントローラを検出できな くなります。このような場合、/etc/rc.d/rc.pcmcia を以下のよう に修正します。

# Should be either i82365 or tcic
PCIC=i82365
# Put socket driver timing parameters here
PCIC_OPTS="wakeup=1"

2.4 カーネル・モジュールをロードする際の問題

configure スクリプトを使えばカーネルに対応した PCMCIA 用のモジュールが 適切にインストールされるはずなので、モジュールをロードする際にトラブル が起きるのは、ユーザーが通常のインストールプロセスを中断した場合くらい でしょう。モジュールをロードする際に生じたエラーのいくつかは直接 Linux のコンソール画面へ出力されます。その他のエラーは /usr/adm/messages/var/log/messagesというシステム のログファイルに記録されます。どのモジュールが問題を起しているかを見極 めるには両方のファイルを注意深くチェックしてください。

いくつかの PCMCIA モジュールはカーネルの設定によって存在したりしなかっ たりするカーネルサービスを必要とします。例えば、SCSI カードドライバを 使うためにはカーネルの SCSI 機能を必要としますし、ネットワークカードを 使う場合にはネットワーク機能を使うようにカーネルを設定しておかねばなり ません。もし必要な機能が存在しないカーネルを使っている場合、 insmod が「シンボルが未定義(undefined symbols)」というエラーを出 してモジュールをロードしないことがあります。

もし insmod が ``wrong version'' というエラーを出した場合、そのモ ジュールは現在動いているシステムとは違うバージョンのカーネル用にコンパ イルされていることを意味します。このトラブルは各モジュールがコンパイル されたマシンから別の設定のマシンにコピーされたような場合やカードサービ スがインストールされてからカーネルが再構築されたような場合に起ります。

モジュールをロードする際のトラブルのもう一つの原因は、モジュールとカー ネルが異なる設定の CONFIG_MODVERSIONS の元でコンパイルされている 場合です。もしバージョンチェックするようにコンパイルされたモジュールが バージョンチェックの無いカーネルにロードされた場合、insmod は「シ ンボルが未定義」のエラーを出します。

比較的新しいバイナリ用コマンド(binutils)は古いバージョンのモジュール用 コマンド(module utilities)と完全には互換性が無いので、モジュールバージョ ンが非互換である旨のエラーが報告される可能性があります。よく起きる症状 は ``gcc_compiled'' が定義されていない(undefined)というエラーです。こ の種のエラーになった場合、モジュール用のコマンドも http://www.pi.se/blox/modules から入手できる最新のバージョンに してください。

2.5 カードの抜き差しがうまく認識されないトラブル

ほとんどの場合、ソケット・ドライバ(i82365tcic)はカードの 抜き差しを感知する IRQ を自動的に検出・設定します。この IRQ 自動検出機 能は Cirrus のチップやいくつかの IBM ThinkPad で使われている i82365 互 換のコントローラではうまく機能しないことがあります。もし IRQ のチェッ ク時に、あるデバイスが使われていないと判断されると、そのデバイスが使う 予定の IRQ も利用可能と誤判断してしまいます。このような場合、ソケット ドライバは既に別のデバイスが使っている IRQ を選んでしまうこともありま す。

i82365tcic ドライバの場合、検出対象とする IRQ を irq_mask オプションで制限することが可能です。このオプションを指定 すれば、PCMCIA カードが利用する IRQ やカードの抜き差しをチェックするた めに監視する IRQ を限定することができます。cs_irq オプションを使 えば、カードの状態変化のチェックに使う IRQ を明示的に指定することが可 能です。

利用可能な IRQ が見つからない場合、「呼出しモード」で使うことも可能で す:i82365 でも tcic でも、poll_interval=100 というオプ ションが利用でき、このオプションを使えば、カードの抜き差しのチェックを 1 秒に 1 度チェックすることになります。このオプションは利用可能なIRQ が不足している場合にも使えます。特に複数の PCMCIA コントローラを持つシ ステムではカードの状態変化を検出するために IRQ を割りあてられないこと があります。

これらのオプションは全て /etc/rc.d/rc.pcmcia/etc/sysconfig/pcmciaOPTS= 行で設定します。どちらの設 定ファイルを使うかは使っているディストリビューションによります。

この種の問題でもっともよく起きるのは PS/2 タイプのポインティングデバイ スが利用している IRQ 12 との衝突でしょう。この場合、rc.pcmciaOPTS= 行に:

PCIC_OPTS="irq_mask=0xefff"

と設定します。

2.6 メモリ・ウィンドウの設定に関する問題

デフォルトでは PCMCIA ドライバはメモリアドレスの 0xd0000-0xdffff の領 域を使って PCMCIA デバイスにアクセスします。この領域は /etc/pcmcia/config.opts で設定します。お使いのシステムで別の デバイスがこの領域を使っている場合、カードは正しく認識されないことがあ ります。また、memory shadowing が可能なチップセットを使っていてこの領 域を shadowing の対象にしている場合も、うまく認識できない可能性があり ます。全てのカードがメモリカードであると誤認される場合、ハードウェアの 設定を再確認して、この領域を shadowing していないか確認してください。 メモリ・ウィンドウの衝突を自動的に検出する確実な方法はないので、どのメ モリ・ウィンドウが使えるかは実際に試してみるしかないでしょう。変更可能 なウィンドウ領域は 0xd8000-0xdffff, 0xc0000-0xcffff, 0xc8000-0xcffff です。

DOS 用の PCMCIA ドライバを使えば、それらのドライバが使っているメモリ領 域を調べることも可能です。気を付けなければならないことは、DOS のメモリ アドレスは ``セグメント'' の形で記述してあることです。``セグメント''形 式だと、16 進の最後の数字が省略されます(すなわち、0xd0000 は 0xd000 に なります)。/etc/pcmcia/config.opts に記述する際に最後の数字を 付けわすれないようにしてください。

2.7 Red Hat や Caldera 上にインストールするには?

Red Hat とそれを元にした Caldera のディストリビューションでは、システ ムの起動用ファイルをSystem V 風の配置にしています。PCMCIA のインストー ルスクリプトはこの配置を自動的に検知して正しく設定します。これらのディ ストリビューションでは rc.pcmcia スクリプトは /etc/rc.d/init.d/pcmcia にインストールされます。自動的に起動 されるので、PCMCIA 用に Caldera のスタートアップスクリプトを修正する必 要はありません:PCMCIA カードサービスは自動的に起動されます。

起動時のオプション指定用に /etc/sysconfig/pcmcia という設定ファ イルがあります。モジュール用のオプションを変更したい場合(PCIC=OPTS= の設定をするなど)には、実際の PCMCIA 起動用のスクリプトでは なく、このファイルで修正してください。このファイルはシステムをバージョ ンアップしでも上書きされません。

古いバージョンでは Red Hat や Caldera 用には /etc/pcmcia の 代りに/etc/sysconfig/pcmcia-scripts というディレクトリを使っ ていました。新しいバージョンでは (Red Hat や Caldera を含めた)全てのシ ステムで /etc/pcmcia を使うようにしたので、バージョンアップ された方は /etc/sysconfig/pcmcia-scripts のファイルを /etc/pcmcia に移してください。

2.8 なぜ PCMCIA のバイナリを配布しないの?

私にとって、PCMCIA のバイナリを配布するにはかなりな労力を必要とする仕 事です。コンパイル時にしか設定できない機能もありますし、PCMCIA のモジュー ル類は ``正しい'' カーネルの設定に依存しています。そのため、もしコンパ イル済のモジュールを配布しようとすれば、対応するカーネルを添付する必要 があるでしょう。コンパイル済の PCMCIA モジュールが必要とされるのは新し いマシンに Linux をインストールする際なので、Slackware や Red Hat といっ た特定の Linux のディストリビューションに合わせたような設定も必要とな ります。それぞれの Linux のディストリビューションには独自のインストー ル法があり、一般的なドライバとディストリビューションを組みあわせた boot/root ディスクを用意することは私には不可能です。

PCMCIA は Red Hat, Caldera, Slackware, Yggdrasil, Craftworks, Nascent Technology と言った Linux の主要なディストリビューションに含まれるよう になりました。

2.9 なぜ PCMCIA パッケージはこんなに大きいの?

最初に弁解しておきますが、実際のところそんなに大きいわけではないですよ。 全てのドライバモジュールをあわせてもディスクを 200k ほど食うだけです。 各種のユーティリティ類がもう 70k 、/etc/pcmcia が 30 k ほどで す。動いている時は PCMCIA モジュールの core の部分がシステムメモリを 48k ほど取ります。通常、cardmgr デーモンはカードが抜き挿しされた時以外 はスワップアウトされているはずです。パッケージ全体の規模としては DOS のカードサービスとそれほど変りません。

PCMCIA に特徴的な機能、すなわち省電力や活線挿抜、を必要としない人々か ら見ると、DOS の ``point enabler'' に比べて、まだかなりのオーバーヘッ ドがあるように思えるかも知れません。``point enabler'' は確かに小さいプ ログラムですが、ごく限られたカードしかサポートしませんし、使える PCMCIA コントローラも限られています。もし誰か ``一般的'' なモデムの enabler を書いてみれば、多くのベンダーからリリースされているカードをサ ポートし、PCMCIA コントローラの違いにも対応するためには、結局カードサー ビスの機能のほとんどをサポートしなければならないことが分るでしょう。


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