コンパイルをする前に、本当に自分自身で PCMCIA パッケージをコンパイル しなければならないのかどうかを考えてみてください。一般的な Linux ディストリビューションの全てには、コンパイル済みのドライバパッケージが 付属しています。一般的に、最初からドライバをインストールする必要がある のは、最新ドライバの新機能が必要な場合か、カーネルの更新や再設定を行っ て Linux ディストリビューション付属のドライバとの互換性がなくなった場 合だけです。パッケージのコンパイルは技術的には難しくありませんが、 Linux 全般に慣れている必要があります。
作業を始める前には以下のツールがインストールされていなければなりません:
最新のカーネルイメージだけでなく、カーネルのソースツリー全体が必要です。 PCMCIA のプログラムの中には、カーネルのソースを参照している部分がある からです。不要なドライバを除いた新しいカーネルをコンパイルしたくなるか もしれませんが、PCMCIA カードサービスをインストールするためにカーネル を再構築する必要はありません。
最新の「安定版」のカーネルのソースとパッチは、
ftp://sunsite.unc.edu/pub/Linux/kernel/v2.0 や
ftp://tsx-11.mit.edu/pub/linux/sources/system/v2.0
から入手できます。
開発版のカーネルは同じ場所の v2.1 ディレクトリにあります。
最新のモジュールユーティリティも同じ場所にあります。
[訳注: 翻訳の時点では安定版カーネルの最新は 2.2.x、開発版の最新は
2.3.x です]
Linux カーネルのソースツリーに入っている
Documentation/Changesファイルには、そのバージョンのカーネルで
必要となる全ての種類のシステムコンポーネントのバージョンが書かれていま
す。このファイルを調べて、システムを最新の状態にするとよいでしょう。
特にカーネルを更新した場合にはそうすべきです。開発版のカーネルを使って
いる場合には、共有ライブラリとモジュールユーティリティの組合せが正しい
かどうかを確認してください。
カーネルを設定する際、PCMCIA のイーサネットカードを使うつもりなら、
``networking support'' を [Y] にして、``pocket and
portable adapters'' を含む一般の Linux 用のネットワークカード用のドラ
イバは全て使わないように設定します。PCMCIA ネットワークカード用のドラ
イバは必要なときにロードされるモジュールとして提供されていますので、カー
ネルにドライバを組みこむのはメモリの無駄でしかありません。
SLIP や PPP, PLIP を使う場合には、カーネルの設定時にこれらを使うように 指定するか、これらのドライバのローダブルモジュール版を使う必要があります。 残念ながらカーネル 1.2.X では設定の手順に問題があり、ローダブル モジュール用の細かな設定(例えば SLIP の圧縮の有無)ができません。そのた め、SLIP が必要ならば(モジュールとして使うのではなく)カーネルに組み込 む方がいいでしょう。
PCMCIA トークンリングアダプタを使う場合、``Token Ring driver
support''(CONFIG_TR) を設定しますが、CONFIG_IBMTR
は使わないようにします。
PCMCIA IDE アダプタを使いたい場合、カーネル 2.0.* から 2.1.7 では、
CONFIG_BLK_DEV_IDE_PCMCIA を有効にしなければなりません。
古いカーネルはリムーバブル IDE デバイスをサポートしていません。新しい
カーネルでは、特別な設定は必要ありません。
もし PCMCIA SCSI アダプタを使うなら、カーネルの設定時に
CONFIG_SCSI を設定します。使うメディアごとの SCSI ドライバ(ディス
ク、テープ、CD-ROM、 汎用ドライバ)も設定します。特定のホストアダプタ用
のハードウェアレベルのドライバは使わないように設定します。それらを組み
こんでもメモリの無駄です。
PCMCIA デバイスが必要とするドライバをモジュール化する場合、
/etc/pcmcia/config を修正して、カードの種類に合ったモジュール
をロードするように設定します。例えば、シリアルドライバがモジュール化さ
れている場合、/etc/pcmcia/configのシリアルデバイスの設定を
device "serial_cs"
class "serial" module "misc/serial", "serial_cs"
のようにします。
このパッケージには cardinfo という X 上でカードの状態を表示するた
めのユーティリティプログラムが入っています。cardinfo を使うために
は、XForms Library という自由に配布できるユーザインタフェース用
ツールキットが必要です。ほとんどの Linux ディストリビューションでは、
このライブラリは PCMCIA と別のパッケージとして使うことができます。
cardinfo をコンパイルしたければ、PCMCIA パッケージの設定を行う前
に XForms と X11 のヘッダファイルとライブラリをインストールする必要が
あります。
以下が簡単なインストールの手順です:
/usr/src で pcmcia-cs-3.1.?.tgz ファイルを展開するpcmcia-cs-3.1.? ディレクトリで ``make config'' を実行するmake all'', ``make install'' を順に実行する。/etc/pcmcia ディレクトリにあるオプション指定用
ファイルを環境に合わせて設定する。基本の PCMCIA 配布物に含まれていない、他の方が作成した クライアントドライバをインストールするつもりであれば、これらを PCMCIA ソースツリーのトップディレクトリで展開してください。その後は通 常のインストール手順に従います。追加のドライバは、自動的にコンパイル・ インストールされます。
``make config'' とすると、プログラムがいくつか設定のためのオプショ
ンを尋ね、PCMCIA カードサービスをインストールする環境が整っているかど
うかをチェックします。多くの場合、デフォルトの設定オプションのままで大
丈夫なはずですが、もし何か問題が起これば、このコマンドの出力を注意深く
チェックしてみてください。
以下のオプションが使えます:
別のマシンにインストールするためのパッケージ用にコンパイルする場合、
「alternate target directory(別のインストール先)」を指定してく
ださい。このディレクトリ名は絶対パスで指定する必要があります。PCMCIA
用のツール類は全てこのディレクトリに元にした相対的なディレクトリに
インストールされますので、そのディレクトリ以下を tar でまとめて、
目的とするマシンにコピーし、適切な場所に展開してください。
サポート用ユーティリティの一部(cardctl と cardinfo)は、
「安全な(safe)」形式または「信頼する(trusting)」形式のどちらかで
コンパイルすることができます。「安全な」形式では、root 以外のユーザが
カードの設定を変更することは禁止されます。「信頼する」形式では、カード
のサスペンドとリジューム、カードのリセット、現在の設定スキームの変更を
行うコマンドを一般ユーザが発行することを許可されます。
デフォルトでは「安全」な形式を作ります。
32 ビットの CardBus カードを使いたければ、このオプションを選択しなけれ ばなりません。 16 ビットの PC カードしか使う予定がなければ、CardBus ブリッジのサポート は必要ありません。
このオプションを選ぶと、追加のコードが PCMCIA のコアモジュール内に入り
ます。このコードはシステムの PnP BIOS と通信して組み込みの
「マザーボード」デバイス(シリアルポート、パラレルポート、サウンド等)の
リソース情報を取得し、リソースの衝突を避ける役に立ちます。
このオプションを有効にすると、いくつかの追加のリソースファイルが
/proc/bus/pccard の下に作られ、
lspnp ツールと setpnp ツールを使って PnP BIOS デバイスの参照
と操作を行えます。しかし、この設定は一部のラップトップ機で問題を起こす
ので、デフォルトでは有効になっていません。
PCMCIA の各種ツールに影響を与えるカーネルの設定オプションもいくつかありま す。たいていの場合、設定用のスクリプトはこれらのオプションを稼働中のカー ネルから推定します(デフォルト動作であり、最も一般的なケースです)。 別のマシン用にコンパイルする場合などにはこれを行わ ないで、カーネルのソースコードから設定オプションを読み込むこともできま すし、それぞれのオプションを対話的に設定することも可能です。
Configure スクリプトは、自動的に構築するためやカーネルの更新後に
素早く再設定するために非対話的に実行することもできます。
あまり使われないオプションのいくつかは、コマンドラインでしか指定できま
せん。利用可能な全てのオプションを見るには、``Configure --help''
を実行してください。
``make all'' して ``make install'' すると、プログラムをコン
パイルし、カーネル用モジュールとユーティリティプログラムを適切な場所に
インストールされます。カーネル用のモジュールは
/lib/modules/<version>/pcmcia ディレクトリにインストー
ルされます。
[訳注: version の部分には、使っているカーネルのバージョン番号
(2.0.36, 2.2.8 等)が入ります]
プログラム cardmgr と cardctl は /sbin に、インストー
ルされます。cardinfo を作っていれば、これは /usr/X11R6/bin
にインストールされます。
設定用のファイルは /etc/pcmcia ディレクトリにインストールされ
ます。もし古いバージョンに上書きしてインストールすると、古い設定ファイ
ルはバックアップ後に置き換えられます。保存されたスクリプトには
*.O という拡張子が付けられます。
もしどのような PCMCIA コントローラチップが使われているかわからなければ、
cardmgr/ サブディレクトリにある probe コマンドで調べるこ
とができます。コントローラには大きく分けて Databook TCIC-2 と Intel
i82365SL 互換チップの 2 つの種類があります。
たまに probe コマンドで自動的にコントローラを設定できない
ことがあります。Halikan NBD 486 システムでは TCIC-2 コントローラが変わった
アドレスにあります。したがって、rc.pcmcia を編集して
tici モジュールをロードするようにし、PCIC_OPTS の
パラメータに``tcic_base=0x02c0''を指定する必要があります。
Cirrus 製のコントローラを使っている一部のシステム(NEC Versa M 等)では、
システムの起動時に BIOS がコントローラに特殊なサスペンド状態を設定しま
す。このようなシステムでは、probe コマンドは対応していても
ホストコントローラの検出に失敗します。この場合には、rc.pcmcia を
編集して、PCIC に i82365 を設定し、PCIC_OPTS に
``wakeup=1'' を設定してください。
PCMCIA の起動スクリプトは、何種類かのグループの起動オプションを認識し ます。これは環境変数を使って設定します。オプションが複数個になる場合は、 空白で区切り、全体をクォートしなければなりません。起動オプションを書く 場所はディストリビューションによって違います。直接起動スクリプトに書い ても構いませんし、独立したオプション用ファイルに書いてもいいでしょう。 ディストリビューション固有の事情については、 個別ディストリビューションに関する注意 の節をご覧ください。
PCMCIAこの変数は、PCMCIA サポートを起動するかどうかを指定します。``yes'' 以 外が設定されると、起動スクリプトは無効になります。
PCICこのオプションは PC カードコントローラドライバモジュールを指定します。 選択肢は 2 つ(``tcic'' または ``i82365'')です。事実上、現在利用可能な ドライバは全て ``i82365'' に属しています。これは唯一必須なオプション 設定です。
PCIC_OPTSこのオプションは、PCIC モジュール用のオプションを指定します。 ホストコントローラによっては、実際のシステムでは実装されていることもさ れていないこともあるオプション機能があります。場合によっては、この機能 が実装されているかどうかをソケットドライバが検出できないことがあります。 指定できるオプションの詳しい説明については、該当するオンラインマニュアル をご覧ください。
CORE_OPTSこのオプションは、pcmcia_core モジュール用のオプションを指定しま
す。このモジュールは、PC カードドライバサービスの中心部分を実装したも
のです。詳しくは ``man pcmcia_core'' を見てください。
CARDMGR_OPTSこのオプションは、cardmgr デーモンに渡すオプションを指定します。
詳しくは ``man cardmgr'' をご覧ください。
SCHEMEこのオプションが設定されていると、その内容がドライバの起動時の PC カードの設定スキームとして初期化されます。スキームについての説明は、 PCMCIA 設定スクリプトの概要の節をご覧ください。
ハードウェアレベルのソケットドライバ(tcic と i82365)はバスタ
イミングを制御するためのパラメータを多数持っており、バスクロックが通常
とは異なるシステムではそれらを調整する必要があるかもしれません。バスタ
イミングに起因する問題としては、カードが認識されない、負荷が高いとハン
グアップする、エラーがよく起きる、デバイスの性能が出ない等があります。
タイミング調整のパラメータを持っているのは特定のホストブリッジだけです。
お使いのコントローラに対して指定できるオプションについては該当するオン
ラインマニュアルを見てもらうこととして、ここでは概要だけを説明します:
cmd_time フラグ
でしょう。このフラグは PCMCIA のバスサイクル長を設定します。
高速な 486 システム(つまり DX4-100)では、この値を 6 (デフォルト値)から
12 または 16 に増やすと効果があるようです。fast_pci というフラグがあり
ます。もし PCI バスのスピードが 25MHz 以上の場合、このフラグをセットす
る必要があります。async_clock フラグがあり、PCMCIA のバスクロックとホストの
バスクロックの相対的なタイミングを変更します。このフラグをセットすれば、
いくつかの操作ついて余分のウェイトサイクルが入るようになります。
ただし私は、このフラグが必要なラップトップ機を聞いたことはまだありませ
ん。pcmcia_core モジュールには cis_speed というパラメータがあり、
PCMCIA カードのカード情報領域(CIS:Card Information Structure)にアクセス
する速度を変化させます。バスクロックの速いシステムではこのパラメータを
大きくする(すなわち、カードへのアクセス速度を遅くする)とカード認識の問
題が解決するかもしれません。extra_sockets
パラメータを 1 にしてロードしなければなりません。この設定は、
PCI-PCMCIA や PCI-CardBus ブリッジの検出では必要ないはずです。個別システムでのタイミングの設定例をいくつか紹介します:
``freq_bypass=1 cmd_time=8'' と設定します。``cmd_time=12'' を
指定します。``cmd_time=16'' を試してください。fast_pci=1'' を指定します。カードサービス・システムは他の標準的なデバイスが既に使っている
I/O ポートや IRQ は自動的に回避しようとします。非標準的なデバイスとぶ
つかっていることを検知しても自動的に別のリソースを使おうとしますが、こ
の機能はまだ完璧ではありません。場合によっては、使わないリソースを
/etc/pcmcia/config.opts で明示的に指定する必要があるかもしれ
ません。
以下は、特定のラップトップ機で必要なリソースの設定です。このリストを信 用しすぎないでください。このリストは問題解決のためのヒントになるかもし れませんが、どうしても内容は古くなってしまいますし、きっと間違いもある でしょう。訂正・追加は歓迎です。
[訳注: VAIO PCG-C1R に関する情報が JF 文書の VAIO PCG-C1R で Linuxにあります]
この節は未完成です。訂正・追加をよろしくお願いします。
Debian では、システムの起動スクリプトの配置は System V 風になっていま
す。PCMCIA の起動スクリプトは /etc/init.d/pcmcia にインストー
ルされ、起動オプションは /etc/pcmcia.conf で指定されます。
Debian における syslog の設定では、カーネルからのメッセージは
/var/log/messages に書き込まれ、cardmgr からのメッセージ
は /var/log/daemon.log に書き込まれます。
Debian は、PCMCIA システムを 2 つのパッケージで配布しています。すなわ
ち、cardmgr やオンラインマニュアル、設定スクリプトを含む
``pcmcia-cs'' パッケージと、カーネルドライバモジュールを含む
``pcmcia-modules'' パッケージです。
[訳注: 日本語 RedHat Linux, LASER5 Linux, Vine Linux を含みます]
これらのディストリビューションの起動スクリプトの配置は System V 形式で
す。PCMCIA の起動スクリプトは /etc/rc.d/init.d/pcmcia にイン
ストールされ、起動オプションは /etc/sysconfig/pcmcia に書かれ
ます。RedHat のデフォルトのインストールでは、PCMCIA を無効にした状態の
起動オプションファイルがインストールされるので注意してください。
PCMCIA を有効にするには、環境変数 ``PCMCIA'' に ``yes'' を設
定します。RedHat のデフォルトの syslogd の設定では、関連メッセージは全
て /var/log/messages に記録されます。
RedHat の PCMCIA パッケージには、ネットワーク設定スクリプト
(/etc/pcmcia/network)を置き換えるファイルが入っています。その
ため、RedHat の linuxconf 設定システムとうまく組み合わせて使えます。
これは 1 つだけのネットワークアダプタを 1 組のネットワーク設定で
使っている時には便利ですが、通常の PCMCIA ネットワークスクリプトのよう
な柔軟性はありません。PCMCIA の素のソース配布物からコンパイルとインストー
ルを行うと、RedHat のツール群へのリンクが壊れてしまいます。
RedHat のスクリプトを使いたければ、RedHat の RPM だけを使うか、以下の
内容の /etc/pcmcia/network.opts を作るようにしてください:
if [ -f /etc/sysconfig/network-scripts/ifcfg-eth0 ] ; then
start_fn () {
/sbin/ifup $1
}
stop_fn () {
/sbin/ifdown $1
}
fi
linuxconf (または netconf)を使ってネットワークインタフェース
を設定する場合は、``kernel module'', ``I/O port'', `irq'' パラメータは
空のままにしてください。これらのパラメータを設定すると、PCMCIA サブシステム
の適切な動作の邪魔になるかもしれません。
マシンの起動時にネットワークサブシステムが立ち上がる際に ``Delaying eth0 initialization'' と ``[FAILED]'' と出力されるかもしれ ません。これは実際には問題ありません: これは、PCMCIA のネットワーク デバイスが設定されるまではネットワークインタフェースが初期化されないと いう意味です。
RedHat では、多少修正が入った PCMCIA のソース配布物がカーネルの SRPM に付いています。単独のソースパッケージでは配布されていません。
[訳注: Plamo Linux を含みます]
Slackware の起動スクリプト配置は BSD 風です。PCMCIA 起動スクリプトは
/etc/rc.d/rc.pcmcia にインストールされ、起動オプションは
rc.pcmcia で直接指定されます。PCMCIA 起動スクリプトは
/etc/rc.d/rc.S から呼び出されます。
SuSE の起動スクリプトは System V 形式です。起動スクリプトは
/sbin/init.d に置かれます。PCMCIA の起動スクリプトは
/sbin/init.d/pcmcia にインストールされ、起動オプションは
/etc/rc.config に書かれます。SuSE の起動スクリプトには
多少の制限があり、lilo の起動プロンプトから PCMCIA の起動変数を
上書きすることができません。