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

4. 使い方と機能

4.1 PCMCIA デバイスの設定と監視のためのツール

モジュールが全て正しくロードされれば、カードが全く挿入されていない時の lsmod コマンドの出力は以下のようになります:

Module                  Size  Used by
ds                      5640   2 
i82365                 15452   2 
pcmcia_core            30012   3  [ds i82365]

システムログには、ソケットドライバが検出したホストコントローラとソケッ トの数も記録されるはずです。

設定用デーモン `cardmgr'

cardmgr の仕事は、PCMCIA ソケットの監視を行い、 必要に応じてクライアントドライバをロードし、ユーザレベルで動作する スクリプトをカードの抜き挿しに応じて実行することです。cardmgr は 自分自身の動作をシステムログに記録しますが、ビープ音を使ってもカードの 状態変更を知らせます。ビープ音の音色は、特定の設定段階における成功また は失敗を示します。高いビープ音が二度鳴った時は、カードは正しく認識・設 定されたことが示されています。高いビープ音の後に低いビープ音が鳴った時 は、カードは認識はされたものの何らかの原因により設定できなかったことが 示されています。低いビープ音が一度だけ鳴った時は、カードが認識できなかっ たことが示されています。

cardmgr デーモンは、/etc/pcmcia/config に置か れている既知のタイプのカードのデータベースに基づいてカードを設定します。 このファイルは各種のクライアントドライバについて書かれています。それか ら、各種カードの識別方法と、どのカードにどのドライバを使うかが書かれて います。このファイルの書式の説明は、オンラインマニュアルの pcmcia(5) にあります。

ソケットの状態ファイルとスタブ

cardmgr は各ソケットについてのデバイス情報を /var/state/pcmcia/stab または /var/lib/pcmcia/stab に記録します(どちらが使われる かはファイルシステムの配置によります)。以下に stab の例を示します:

Socket 0: Adaptec APA-1460 SlimSCSI
0       scsi    aha152x_cs      0       sda     8       0
0       scsi    aha152x_cs      1       scd0    11      0
Socket 1: Serial or Modem Card
1       serial  serial_cs       0       ttyS1   5       65

デバイスの状態を示している行の最初の欄がソケット番号、2 つ目が デバイスクラス、3 つ目がドライバ名、4 つ目がそのドライバが関係している デバイスの数、5 つ目はデバイス名、最後の 2 つはそのデバイスの メジャーデバイス番号とマイナーデバイス番号です(使用できる場合)。 詳しい情報については stab のオンラインマニュアルを見てください。

cardctl, cardinfo ユーティリティ

cardctl コマンドを使うと、ソケットの状態をチェック することや、ソケットがどのように設定されているかを調べることができます。 このコマンドを使って、カードの設定状態を変更することもできます。 ``cardctl config'' コマンドの出力例を以下に示します:

Socket 0:
  not configured
Socket 1:
  Vcc = 5.0, Vpp1 = 0.0, Vpp2 = 0.0
  Card type is memory and I/O
  IRQ 3 is dynamic shared, level mode, enabled
  Speaker output is enabled
  Function 0:
    Config register base = 0x0800
      Option = 0x63, status = 0x08
    I/O window 1: 0x0280 to 0x02bf, auto sized
    I/O window 2: 0x02f8 to 0x02ff, 8 bit

``cardctl ident''を実行することにより、カードの識別情報を得ること もできます:

Socket 0:
  no product info available
Socket 1:
  product info: "LINKSYS", "PCMLM336", "A", "0040052D6400"
  manfid: 0x0143, 0xc0ab
  function: 0 (multifunction)

``cardctl suspend'' コマンドと ``cardctl resume'' コマンドを 使うと、対応するドライバを取り外すことなくカードを停止させることができ ます。``cardctl reset'' コマンドはカードのリセットと再設定を行お うとします。``cardctl insert'' コマンドと ``cardctl eject'' コマンドは、カードを物理的に抜き挿しした時に実行する動作を疑似的に行い ます。この動作にはドライバのロードとアンロード、デバイスの設定と停止が 含まれます。

X を実行していれば、cardinfo を使って全ての PCMCIA ソケットの現在の状態をグラフィカルに表示することができます。この内容は ``cardctl config'' に似ています。cardinfo を使うと、 cardctl の他の機能のほとんどをグラフィカルに操作することもできま す。

カードの抜き挿し

理論的には、PCMCIA カードはいつでも抜き挿しすることができます。 しかし、アプリケーションが使っている最中にカードを抜くのはよくありませ ん。1.1.77 より古いバージョンのカーネルは、シリアル/モデムカードを抜く と固まることがありましたが、この問題は既に修正されています。

一部のカードは安全にイジェクトできません。特に ATA/IDE インタフェースカードと SCSI インタフェースカードは安全にホット スワップできません。この問題を完全に解決するには Linux のブロックデバ イスのモデルの大幅な変更が必要なので、この問題はおそらく修正されないで しょう。また、CardBus カードはどんな種類のものであれ安全にホットイジェクト できません。こちらの次第に改善していくでしょう。CardBus ドライバ中の ホットスワップに関するバグの発見と修正が現在行われつつあるからです。 これらの種類のカードを使う場合は、カードをイジェクトする前に 必ず ``cardctl eject'' を実行することをお勧めします。

カードサービスと APM(Advanced Power Management)

APM (Advanced Power Management) に対応するように カーネルを設定してあれば、カードサービスに APM 対応を組み込むことがで きます。APM のカーネルドライバを管理しているのは Stephen Rothwell さん (Stephen.Rothwell@canb.auug.org.au) です。 apmd デーモンを管理しているのは Avery Pennarun さん (apenwarr@worldvisions.ca) であり、詳しい情報は http://www.worldvisions.ca/~apenwarr/apmd/ で入手できます。 システム上で互換バージョンの APM が検出されれば、PCMCIA モジュールは 自動的に APM 用に設定されます。

APM が設定されているかどうかに関わらず、ラップトップ機をサスペンドする 前に ``cardctl suspend'' を使い、レジュームの後に ``cardctl resume'' を使って、PCMCIA カードの停止と再起動を安全に 行うことができます。この操作は使用中のモデムに対しては行えません。なぜ なら、シリアルドライバはモデムの動作パラメータの保存と復元を行うことが できないからです。

システムによっては APM が不安定なことがあるようです。APM と PCMCIA を 組み合わせると問題が起きる場合には、バグ報告を行う前にどちらのパッケー ジに問題があるかを絞りこんでください。

一部のドライバ(特に PCMCIA の SCSI ドライバ)は、サスペンドすると レジュームを行うことができません。PCMCIA の SCSI カードを使う場合には、 システムをサスペンドする前には必ず ``cardctl eject'' を実行してく ださい。

PCMCIA システムの終了

PCMCIA パッケージ全体をアンロードするには、rc.pcmcia スクリプトを 以下のように実行します:

/etc/rc.d/rc.pcmcia stop

このスクリプトの実行には数秒かかります。これは、全てのクライアントドラ イバが正常に停止するのを待つためです。あるデバイスが使用中の場合、停止 が完全には行われず、カーネルモジュールがアンロードされないことがありま す。これを避けるには、rc.pcmcia スクリプトを実行する前に ``cardctl eject'' を実行して全てのソケットを停止させてください。 cardctl コマンドの終了ステータスは、停止できなかったソケットがあ るかどうかを示します。

4.2 PCMCIA 設定スクリプトの概要

PCMCIA デバイスはどのように設定され機能するかについていくつかの 「クラス」に分類できます。クラスは /etc/pcmcia/config の デバイスドライバと対応しています。現時点では I/O デバイスに 5 つの クラス(network, SCSI, cdrom, fixed disk, serial)があり、メモリデバイス には 2 つのクラス(memory, FTL)があります。それぞれのクラスごとに 2 つ のスクリプトが /etc/pcmcia/config に用意されています: 一つが 設定用のメインスクリプト(例えば SCSI デバイス用なら /etc/pcmcia/scsi)で、もう一つは設定オプションを指定する スクリプト(/etc/pcmcia/scsi.opts)です。デバイスを設定する メインスクリプトは、カードが挿入された時にデバイスを設定するために起動 され、カードが抜かれた時にはデバイスを停止させるために起動されます。 複数のデバイスに対応しているカードが挿入された場合、このスクリプトは デバイスごとに起動されます。

設定用のスクリプトは、デバイスについての情報のいくつかを stab ファイルから取り出します。各スクリプトは 「デバイスアドレス」を構築し、これを ADDRESS というシェル変数に設定し ます。この「デバイスアドレス」は、呼び出されたスクリプトの設定対象であ るデバイスを一意に記述するものです。この「デバイスアドレス」は *.opts スクリプトに渡され、*.optsスクリプトは、この アドレスにあるデバイスをどのように設定すべきかの情報を返します。 いくつかのデバイスではデバイスアドレスは単なるソケット番号ですが、その 他のデバイスでは設定の仕方を決めるのに役立つ情報が含まれていることもあ ります。例えば、ネットワーク用のデバイスはハードウェアイーサネット アドレスをデバイスアドレスの一部として network.opts スクリプトに 渡すので、ハードウェアアドレスによって異なる設定を行うことも可能です。

デバイスアドレスの最初の部分は、PCMCIA の現在の「スキーム(scheme)」を 示します。このパラメータを使って、一つの外部ユーザー変数によって複数 のデバイス設定を切り替えることが可能です。スキームの使い方の一つは、 ``home'' スキームと ``work'' スキームの 2 種を用意して、それぞれに異な るネットワークパラメータを設定することです。現在使っているスキームは ``cardctl スキーム'' コマンドで変更できます。特にスキームを設定し ない場合は、``default'' スキームが使われます。

一般論として、ラップトップ機の Linux の場合、PCMCIA デバイスは PCMCIA デバイス用のスクリプトでのみ設定すべきで、常設のデバイスと同じように [訳注: /etc/rc.d/rc.inet* などで] 設定してはいけません。しかし Linux ディストリビューションによっては、 ディストリビューション独自のデバイス設定ツールで PCMCIA パッケージの 設定を行うようになっています。このような場合には、これ以降の章の内容が 当てはまらないことがあります。理想を言えば、そういった部分の解説文書は ディストリビューションの管理者が用意すべきでしょう。

4.3 PCMCIA ネットワークアダプタ

Linux ではイーサネットタイプのネットワークインタフェースは eth0, eth1 といった名前になっています。トークンリングのアダプタも同様で すが、インターフェイス名は tr0, tr1 となります。 ネットワークインタフェースの状態のチェックや変更を行うには ifconfig コマンドを使います。Linux の特徴として、ネットワーク インタフェースが対応するデバイスは /dev の下には無いので、 デバイスファイルが無くても驚かないでください。

PCMCIA イーサネットカードが検出されると、空いている最初のインターフェー ス名が割り当てられます。これは多分 eth0 でしょう。 cardmgr が自動的に /etc/pcmcia/network スクリプトを実行 してインターフェースに関する設定を行いますが、ネットワークに関する設定は /etc/pcmcia/network から読み込まれます。network スクリプト と network.opts スクリプトが実行されるのは、イーサネットカードが 実際に存在する時だけです。ネットワークの自動設定機能をシステムが備えて いる場合、これが PCMCIA 対応であることもそうでないこともあります。 お使いの Linux ディストリビューションの文書や 個別ディストリビューションに関する注意 の節を見て、PCMCIA のネットワークデバイスの設定は自動化されたツールが 行うのか、それとも network.opts を手で編集して行うのかを調べてく ださい。

network.opts に渡されるデバイスアドレスは、コンマで区切られた 4 つのフィールドから成っています。4 つのフィールドは、スキーム、 ソケット番号、デバイスインスタンス、カードのハードウェアアドレスです。 デバイスインスタンスは複数のネットワークインタフェースを持つような カードの(付加的な)デバイス番号なので、通常は 0 になります。もし異なる 目的に使う複数のネットワークカードを持っているなら、ソケット番号によっ て設定オプションを変えることが可能で、その場合の network.opts は以下のようになります:

case "$ADDRESS" in
*,0,*,*)
    # definitions for network card in socket 0
    ;;
*,1,*,*)
    # definitions for network card in socket 1
    ;;
esac

あるいは、それぞれのカードのハードウェアアドレスを使って以下のように 設定することもできます:

case "$ADDRESS" in
*,*,*,00:80:C8:76:00:B1)
    # definitions for a D-Link card
    ;;
*,*,*,08:00:5A:44:80:01)
    # definitions for an IBM card
esac

ネットワークデバイスのパラメータ

network.opts では以下のパラメータを定義することができます:

IF_PORT

イーサネットのトランシーバの種類を自動検出できない特定の 16 ビット カードに対して、これを指定します。詳しくは ``man ifport'' を見て

PUMP

値には y か n を指定します。このパラメータは、RedHat の pump デーモンを用いて、ホストの IP アドレスと経路情報を BOOTP か DHCP を 使って取得するかどうかを指定します。

BOOTP

値には y か n を指定します。このパラメータは、bootpc を使って、 ホストの IP アドレスと経路情報を BOOTP プロトコルを使って取得するかど うかを示します。

DHCP

値には y か n を指定します。このパラメータは、ホストの IP アドレスと 経路情報を DHCP サーバから取得するかどうかを示します。ネットワーク スクリプトは最初に dhcpcd を探し、その次に dhclient を探しま す。

IPADDR

このインタフェースに対する IP アドレス。

NETMASK, BROADCAST, NETWORK

ネットワークの基本的なパラメータです。詳しくはネットワーク関連の HOWTO 文書をご覧ください。

GATEWAY

このホストが所属するサブネットのゲートウェイの IP アドレスです。 終点アドレスがこのサブネットの外部になっているパケットは、この ゲートウェイに送られます。

DOMAIN

このホストのローカルのネットワークドメイン名です。これは /etc/resolv.conf を生成する際に使います。

SEARCH

ホスト名参照の検索リストであり、/etc/resolv.conf に追加されま す。DOMAINSEARCH は互いに排他的です。詳しくは ``man resolver'' をご覧ください。

DNS_1, DNS_2, DNS_3

このインタフェースが使うネームサーバのホスト名または IP アドレス。これ は /etc/resolv.conf に追加されます。

MOUNTS

このインタフェースがマウントに使う NFS マウントポイントを空白で 区切って並べたリストです。

IPX_FRAME, IPX_NETNUM

IPX ネットワーク用のパラメータです。フレームタイプとネットワーク番号を 表し、ipx_interface コマンドに渡されます。

指定例を以下に示します:

case "$ADDRESS" in
*,*,*,*)
    IF_PORT="10base2"
    BOOTP="n"
    IPADDR="10.0.0.1"
    NETMASK="255.255.255.0"
    NETWORK="10.0.0.0"
    BROADCAST="10.0.0.255"
    GATEWAY="10.0.0.1"
    DOMAIN="domain.org"
    DNS_1="dns1.domain.org"
    ;;
esac

NFS ファイルシステムのマウントやアンマウントを自動的に行うには、まず マウントするファイルシステムを全て /etc/fstab に記述します。 ただし、マウント用オプションとして noauto を指定してください。 network.opts では、ファイルシステムのマウントポイントを MOUNTS 変数に列挙します。NFS マウントを行っている最中は、 ネットワークを停止させるのに cardctl コマンドや cardinfo コマンドを使うことが特に重要です。ネットワークカードが予告無しに抜かれ ると、NFS ファイルシステムが正常にアンマウントできないからです。

通常のネットワーク設定オプションに加えて、network.opts では インタフェースの設定が終わった直後やインタフェースを停止する直前に行う 追加の動作を指定することができます。network.optsstart_fn というシェル関数が定義されていれば、ネットワークスクリプトはインタフェース を設定した直後にこの関数を呼び出します。この際には、インタフェース名が 最初の(そして唯一の)引き数として関数に渡されます。同様に、stop_fn というシェル関数が定義されていれば、このシェル関数はインタフェースが停 止する直前に呼び出されます。

一部のカードでは、トランシーバの種類を IF_PORT の設定で選べます。 これは数値で選ぶか、トランシーバの種類を表す キーワードで選びます。全てのネットワークドライバのデフォルト動作は、 可能ならばインタフェースは自動検出し、検出ができなければ 10BaseT を 使うというものです。ifport コマンドを使うと、トランシーバの種類 の現在値の確認や設定ができます。実行例を以下に示します:

# ifport eth0 10base2
# 
# ifport eth0
eth0    2 (10base2)

現在(3.0.10 以降)の 3c589 用ドライバは、トランシーバの変化をいつでも即 座に自動検出するはずです。以前のバージョンの 3c589 用のドライバは、 トランシーバの自動検出アルゴリズムがいくぶん遅く、問題点もありました。 このようなバージョンでは、カードが設定されてから適切なネットワークケー ブルをカードに繋ぐか、以下のようなコマンドを実行して強制的に自動検出を 実行させなければなりません:

ifconfig eth0 down up

個別のカードに関するコメント

  • IBM CCAE と Socket EA カードではネットワークデバイスの設定の際に トランシーバの種類(10base2, 10baseT, AUI)を指定する必要があります。 システムのログファイルを調べて、設定されているトランシーバの種類が、 物理的に接続しているものと一致していることを確認してください。
  • Farallon EtherWave は実は 3Com 3c589 を基にしていますが、独自の トランシーバを使っています。EtherWave は 10baseT タイプのコネクタを使っ ていますが、トランシーバは 3c589 が 10base2 モードに設定されていないと 正しく動作しません。
  • IBM CCAE, NE4100, Thomas Conrad, Kingston といったカードでトラブルが生 じる場合は、pcnet_cs モジュールの mem_speed=# オプションを使ってメモリへアクセスする時間を増やしてみてください。 指定例は標準の config.opts ファイルにあります。 mem_speed=1000(ナノセコンド単位)まで上げてみてください。
  • New Media Ethernet アダプタなどの場合、I/O ポートにアクセスする時間 を io_speed=# オプションで指定する必要があるかもしれませ ん。このオプションは pcmcia_core モジュールをロードする際に指 定します。起動スクリプト中の CORE_OPTS を編集して、この オプションを指定してください。
  • New Media Ethernet ドライバのマルチキャスト対応は不完全です。 最新のドライバはマルチキャスト対応のカーネルで動作しますが、 マルチキャストのパケットは無視します。無差別モードは正しく動作するはず です。
  • IBM と 3Com のトークンリングアダプタが使うドライバは、初期化の際に カードがリングに接続されていなければ、非常におかしな動作をします。これ らのカードは、必ず電源を入れる前にネットワークに接続しましょう。 ifconfig が報告するハードウェアアドレスが全て 0 ならば、たぶん メモリウィンドウの設定に問題があります。
  • Linksys, D-Link, IC-Card 製の 10baseT/10base2 カードは、Linux 用ドライバ では扱えない独特の方法でトランシーバの種類を検出します。回避方法の 1 つは、DOS を起動して、ベンダーが提供しているユーティリティを使って トランシーバの種類を選択し、その後で Linux をウォームブートすることで す。別の方法として、この機能を実行する Linux 用のユーティリティを ftp://sourceforge.org/pcmcia/extras/dlport.c で入手 できます。
  • WaveLAN 無線ネットワークアダプタ向けに、Jean Tourrilhes さん (jt@hpl.hp.com)が wireless HOWTO を書いています。これは http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/ にあ ります。

ネットワークアダプタにまつわる問題の診断

  • あなたのカードはイーサネットカードとして認識されていますか? ログファイル をチェックして、cardmgr がカードを正しく認識し、ネットワーク ドライバを起動しているか確認してください。もしだめならば、サポートされ ているカードと「互換」と称していてもあなたのカードはまだ使えないのでしょ う。これは、カードが「NE2000 互換」と称している時によく起きるようです。
  • カードは正しく設定されていますか? もしサポートされているカードを使い、 cardmgr に正しく認識されてるのにうまく動かないという場合は、他の デバイスと IRQ やポートが衝突しているのかもしれません。カードが使って いるリソースをチェックして(ログファイルを調べて)、カードが別の IRQ や ポートを使うように /etc/pcmcia/config.opts を設定し、問題と なる IRQ やポートを使わないようにします。
  • カードは正しく設定されているが(特に負荷が高い時に)固まってしまうことが 時々起こる場合、ソケットドライバのタイミングを制御するパラメータを変え る必要があるかもしれません。詳細については 起動オプションの節を見てください。
  • ネットワークにアクセスしようとすると ``network unreachable'' という メッセージが表示される場合は、/etc/pcmcia/network.opts で指定 している経路情報に間違いがあります。このメッセージはどう考えても 経路情報エラーを示しているとしか考えられません。これに対して、カードの 設定ミスの場合は普通、うまく動作できなくてもエラーを表示しません。
  • DHCP を使ってネットワークインタフェースを設定しようとしている場合は、 DHCP ではなく固定の IP アドレスを使ったテストを行い、DHCP の設定による 問題を除外します。
  • /etc/pcmcia/network.opts の問題を見つけるためには、まず 同じサブネット上にある他のマシンに ping を打ってみましょう。マシンの指 定には IP アドレスを使います。次にゲートウェイに ping を打ち、それから 他のサブネット上にあるマシンに ping を打ちます。ホスト名を使って ping を打つのは、以上の簡単なテストが終わってからです。
  • 問題が本当に PCMCIA に起因することを確認してください。DOS 上で、ベンダー 製のドライバなら動くかどうかを確認するのもいいでしょう。 /etc/pcmcia/network.opts スクリプトを変更した部分があれば、そ こを繰り返しチェックしてください。ケーブルや ``T'' 型ジャック、 ターミネータ等が正しく動作しているか確認してください。

4.4 PCMCIA のシリアルデバイスとモデムデバイス

Linux のシリアルデバイスは、/dev/ttyS*/dev/cua* という特殊なデバイスファイルを経由してアクセスします。バージョン 2.2 より前のカーネルでは、ttyS* デバイスは端末などを直接接続する ための入力用デバイスであり、cua* デバイスはモデム等で利用する ための出力用デバイスでした。現在のカーネルでは cua* デバイスを使 わないことが推奨されており、全てのアプリケーションで ttyS* を使い ます。シリアルデバイスの設定は、setserialコマンドを使って確認、 変更できます。

シリアルカードあるいはモデムカードの挿入が検出されると、最初の空いてい るシリアルデバイスに自動的に割り当てられます。通常、これはシステムに最 初から付いているシリアルポートの数によって /dev/cua1 (/dev/ttyS1)か /dev/cua2(/dev/ttyS2)のどち らかになります。/dev/ttyS* デバイスは stab に記録されます。デバイスを使いやすくするために、シリアルデバイス設定用 のデフォルトのスクリプト(/etc/pcmcia/serial.opts)は、 /dev/modem から適切なデバイスファイルにシンボリックリンクを張 ります。バージョン 2.2 より前のカーネルでは、このリンクは cua* デバイスに張られます。

PCMCIA モデムカードを設定するのに /etc/rc.d/rc.serial を使っ てはいけません。このスクリプトは抜き挿しをしないシリアルデバイスを設定 するためのものです。モデムにの設定を行う場合には、 /etc/rc.d/rc.serial ではなく /etc/pcmcia/serial.opt で設定してください。また、シリアルデバイスの I/O ポートと割り込みの変 更を行うのに setserial を使ってはいけません。このコマンドは別の アドレスにあるデバイスをシリアルドライバに探させるもので、カードの ハードウェアに実際に設定されている情報を変えることはできないからです。 シリアル設定用のスクリプトを使うと、setserial の別のオプションを 指定することができますし、このポート用に /etc/inittab に行を 追加するかどうかを指定することもできます。

serial.opts に渡されるデバイスアドレスは、コンマで区切られた 3 つのフィールドから構成されています。一つ目のフィールドはスキーム、二 つ目がソケット番号、三つ目がデバイスインスタンスです。複数のシリアルポート をサポートしているカードではデバイスインスタンスが複数の値を持つ ことがありますが、ポートが一つしかないカードの場合には、 デバイスインスタンスの値は必ず 0 です。普段から複数の PCMCIA モデムカード を使っているなら、挿入するソケットによって設定を変えることが可能です。 その場合の設定は以下のようにします:

case "$ADDRESS" in
*,0,*)
    # Options for modem in socket 0
    LINK=/dev/modem0
    ;;
*,1,*)
    # Options for modem in socket 1
    LINK=/dev/modem1
    ;;
esac

起動時に既に PCMCIA モデムカードが設定されていると、ハードウェアに最初 から付いているシリアルポートと誤認される可能性があります。実害はありま せんが、PCMCIA ドライバがモデムを制御する場合、デバイスが異なるスロット に割り当てられる可能性があります。よって、アプリケーション側では PCMCIA モデムが常に同じデバイス(/dev/cua*)に割り当てられると 仮定せず、stab を解析するかシンボリックリンク /dev/modem を使うのがいいでしょう。

基本のシリアルポートドライバをモジュールとしてロードするようにカーネル の設定を行っている場合、/etc/pcmcia/config を修正してシリアル ポートドライバを予めロードするようにします。 /etc/pcmcia/configのシリアルデバイスの項目を以下のように修正 してください:

device "serial_cs"
  class "serial" module "misc/serial", "serial_cs"

シリアルデバイスのパラメータ

以下のパラメータを serial.opts で定義することができます:

LINK

「コールアウト用」デバイスに対して張られるシンボリックリンクのパスを指 定します(例: 2.2 より前のカーネルでは /dev/cua*, 2.2 では /dev/ttyS* です)。

SERIAL_OPTS

setserial コマンドに渡すオプションを指定します。

INITTAB

このパラメータを指定すると、その値を使って、対象となるデバイスの inittab 用のエントリが作られます。

指定例を以下に示します:

case "$ADDRESS" in
*,*,*,*)
    LINK="/dev/modem"
    SERIAL_OPTS=""
    INITTAB="/sbin/getty"

特定のカードについてのコメント

  • Uniden Data 2000 Wireless CDPD カードには、SLIP モードや PPP モー ドで通信を始めるための特殊なダイアル文字列があります。SLIP の場合には ``ATDT2'' を、PPP の場合には ``ATDT0'' を使います。

シリアルデバイスにまつわる問題の診断

  • あなたのカードはモデムとして認識されていますか? /usr/adm/messages をチェックして cardmgr がカードを 正しく識別し、serial_cs ドライバを起動していることを確認して ください。もし正しく識別されていない場合、/etc/pcmcia/config ファイルに新しいエントリを加えて、正しく識別できるようにする必要がある かもしれません。詳しくは 識別されないカードの設定の節を見てください。
  • serial_cs ドライバがモデムを正しく設定していますか? もう一度 /usr/adm/messages をチェックして、serial_cs ドライバの出力を 調べてください。もし ``register_serial() failed'' というメッセージが 出力されていれば、他のデバイスと I/O ポートが衝突している可能性があり ます。デバイスが 8250 であると識別されることも I/O ポートが衝突してい る徴候の一つです。というのも、最近の PCMCIA モデムは 16550A UART と識 別されるはずだからです。I/O ポートが他のデバイスと衝突している場合は、 /etc/pcmcia/config.optsを修正して、モデム用に割り当てられてい るポートを使わないようにしてみてください。
  • IRQ は衝突していませんか? もしログファイルは正しいようだがモデムはうま く動かないという場合、setserial コマンドを使って irq を 0 に して動くかどうか確認してみてください。irq を 0 に設定すれば、シリアル ドライバは割り込みのかわりに、より遅い「呼び出しモード(polled mode)」 を使うようになります。もしこれでうまく行くようなら、serial_cs の選んだ IRQ を何か別のデバイスが使っている可能性があります。この割り込みを使 わないように /etc/pcmcia/config.opts を設定してください。
  • モデムからの反応が異様に遅いというのも IRQ が衝突している徴候のひとつ です。
  • 問題が本当に PCMCIA に由来するものか確認してください。ベンダー製の ドライバを使って DOS で動くか調べるのもいいでしょう。また、単純な接続 ができるようになるまでは、 SLIP や PPP のような複雑な設定は試さないで ください。もし単純な接続はうまくいくが SLIP は駄目という場合の原因は大 抵 SLIP にあり、PCMCIA にはありません。 serial_cs モジュールがロードできないことを示すカーネルメッセージが残っ ていれば、カーネルにシリアルデバイスのサポートが組み込まれていないとい うことです。シリアルドライバをモジュールとして作っていれば、 /etc/pcmcia/config を修正して、serial_cs の前に serial モジュールをロードするように設定しなければなりません。

4.5 PCMCIA パラレルポートデバイス

Linux のパラレルポートドライバはレイヤ化されているので、 いくつかのタイプの高レベルデバイスは、ポート用の低レベルドライバについ ては同じものを共有できます。プリンタデバイスは特殊デバイスファイル /dev/lp* 経由でアクセスできます。プリンタデバイスの設定は、 tunelp コマンドで試験と修正ができます。

parport_cs モジュールは parport ドライバと parport_pc ドライバに依存しています。これらはカーネルに組み込んでも、モジュールと して作成しても構いません。ドライバの構成がレイヤ化されているというこ とは、トップレベルのパラレルドライバ(PLIP ドライバやプリンタドライバ等) は全てモジュールとしてコンパイルしなければならないということです。 これらのドライバはモジュールの起動時しかパラレルポートを認識しないので、 PC カード用パラレルデバイスの設定を終えた後にモジュールをロードしなけ ればなりません。

parport.opts に渡されるデバイスアドレスは、コンマで区切られた 3 つのフィールドから構成されています。一つ目のフィールドはスキーム、 二つ目はソケット番号、三つ目はデバイスインスタンスです。 複数のパラレルポートに対応しているカードの場合はデバイスインスタンスが 複数の値を持つことがありますが、ポートが一つしかないカードの場合は デバイスインスタンスの値は必ず 0 になります。普段から複数の PCMCIA パラレルポートカードを使っているなら、挿入するソケットの位置によって設 定を変えることが可能です。その場合の設定は以下のようにします:

case "$ADDRESS" in
*,0,*)
    # Options for card in socket 0
    LINK=/dev/printer0
    ;;
*,1,*)
    # Options for card in socket 1
    LINK=/dev/printer1
    ;;
esac

Linux の基本のパラレルポートドライバをモジュールとしてロードするように カーネルを設定しているならば、/etc/pcmcia/config を編集して、 適切なモジュールが必ずロードされるようにしなければなりません。読み込ま れるパラレルデバイスの項目を編集してください:

device "parport_cs"
  class "parport" module "misc/parport", "misc/parport_pc", "parport_cs"

パラレルデバイスのパラメータ

以下のパラメータを parport.opts で定義できます:

LINK

プリンタポートに対して張られるシンボリックリンクのパスを指定します。

LP_OPTS

tunelp コマンドに渡すオプションを指定します。

例を以下に示します:

case "$ADDRESS" in
*,*,*,*)
    LINK="/dev/printer"
    LP_OPTS=""

パラレルポートデバイスで起こる問題の診断

  • 割り込みは衝突していませんか? システムログに問題がないけれどポートが動 作しているようには見えない場合は、tunelp を使って IRQ を 0 に変更 し、これで状況が改善するかどうかを見てください。この操作はドライバを ポーリングモードに変えます。これで問題が解決するようであれば、 parport_cs が選んだ割り込みをシステム上の他の何らかのデバイスが使って いると思われます。/etc/pcmcia/config.opts に設定を追加して、 この割り込みを除外してください。
  • parport_cs モジュールがロードできないことを示すカーネルメッセージ が出ている場合は、カーネルがパラレルデバイスをサポートしていないという ことです。パラレルドライバをモジュールとして作ったのであれば、 /etc/pcmcia/config を編集して、parport モジュールと parport_pc モジュールを parport_cs モジュールの前にロー ドするように設定する必要があるでしょう。

4.6 PCMCIA SCSI アダプタ

現時点までにサポートされている PCMCIA SCSI カードは、 Qlogic, Adaptec AHA-152X, Future Domain TMC-16x0 といった ISA バス用のカードと機能的に 同等な PCMCIA カードです。これらのカード用の PCMCIA ドライバモジュール は PCMCIA 独自のコード(qlogic_cs.c, aha152x_cs.c, fdomain_cs.c)とLinux カーネルのソースコードから引っ張ってきた 通常の SCSI ドライバをリンクして作成されています。 Adaptec APA1480 CardBus ドライバは、カーネルの aic7xxx PCI ドライバを ベースにしています。 Linux の SCSI ドライバの設計に由来する制限のため、取り外しができる カードはドライバごとに 1 つずつしかサポートできません。

新しく SCSI カードが挿されたことを検出すると、SCSI ドライバはその カードに接続されているデバイスを調べます。システムログをチェックして、 挿したデバイスが正しく検出されているかどうかを確認してください。検出さ れた SCSI デバイスは、空いている最初の SCSI デバイスファイルに自動的に 割り当てられます。すなわち最初に見つかった SCSI ディスクは /dev/sda に、最初の SCSI テープは /dev/st0 に、 最初 の CD-ROM は /dev/scd0 になります。

このホストアダプタに接続されている SCSI デバイスのリストは stab に記録されます。また SCSI 設定スクリプト (/etc/pcmcia/scsi)が割り当てられたデバイスをごとに一度呼び出 され、そのデバイスの設定や停止を行います。デフォルトのスクリプトは、 SCSI デバイスの設定は全く行わず、カードが抜かれた時に SCSI デバイス上 のファイルシステムを正しくアンマウトする処理だけを行います。

SCSI アダプタには色々な機器が接続できるため、scsi.opts に渡す デバイスアドレスはかなり複雑です。フィールドはコンマで区切られた 6 個 あるいは 7 個のフィールドからできています:それぞれのフィールドは、 スキーム、デバイスタイプ、ソケット番号、SCSI チャンネル、ID、 論理ユニット番号、(これは省略可能ですが)パーティション番号です。 デバイスの種類は ``sd'' がディスク、``st'' がテープ、``sr'' が CD-ROM で ``sg'' がジェネリック SCSI デバイスです。ほとんどの設定では SCSI チャンネルと論理ユニット番号は 0 です。複数のパーティションを持つ ディスクデバイスについては、まず scsi.opts スクリプトが、5 つ のフィールドを持つデバイスアドレスを使ってデバイス全体に対して呼ばれま す。scsi.opts スクリプトはパーティションのリストを PARTS 変数に返します。次に scsi.opts スクリプトがそ れぞれのパーティションについて、7 個全てのフィールドを持つアドレスを使っ て呼び出されます。

お使いのカーネルに、それぞれの SCSI デバイスに対応したディスクやテープ を利用するためのトップレベルドライバが組みこまれていない場合、PCMCIA ドライバからそれらのデバイスを設定することはできません。その副作用とし て、stab に残されるデバイス名は "sd#nnnn" のような形になります。ここで "nnnn"は 4 桁の 16 進数です。この現象は、 cardmgr が SCSI デバイス ID を Linux の対応するデバイス名に 変換できなかった際に起きます。

トップレベルの SCSI ドライバ(SCSI ディスク用ドライバ、SCSI テープ用 ドライバなど)をモジュール化して、必要な時にロードすることも可能です。 そのためには、/etc/pcmcia/config を修正して、アダプタを設定す る時にロードする必要がある追加のモジュールを cardmgr に教えてやる 必要があります。設定例を以下に示します:

device "aha152x_cs"
  class "scsi" module "scsi/scsi_mod", "scsi/sd_mod", "aha152x_cs"

このようにすると、核となる SCSI モジュールとトップレベル SCSI ディスク ドライバ用のモジュールが、通常の PCMCIA ドライバモジュールより先に ロードされます。PCMCIA 設定スクリプトはモジュール化された SCSI ドライバ を自動検出しないので、SCSI のサポートを有効にするためには手動で設定を 行う必要があります。

ラップトップ機の電源を入れる前、あるいはアダプタカードを挿入する前には、 接続する全ての SCSI デバイスの電源を入れておき、アダプタが設定される 時にはきちんと SCSI バスがターミネート(終端)されているようにしましょう。 また、SCSI アダプタを抜く時には細心の注意を払いましょう。これを最も確 実に行う方法は、カードを物理的に抜く前に cardctlcardinfo を使ってカードを抜き出しの要求を出すことです。現状で は、接続する全ての SCSI デバイスの電源を SCSI アダプタの挿入前に入れな ければいけませんし、アダプタカードを抜くかラップトップ機の電源を落とす までは SCSI デバイスの電源を切ってはいけません。

PCMCIA SCSI カードを使う場合、通常の ISA バスに接続するタイプのアダプタ では起こらない問題が生じることもあります。たいてい、パッシブ型の SCSI ターミネータを正しく作動させるためには、 SCSI バスにターミネータ用の 電力が必要です、PCMCIA タイプの SCSI アダプタはターミネータ用の電力を 供給しないので、もしこの電力が必要ならば、接続されている外部デバイスが 電力を供給しなければなりません。SCSI デバイスの中にはターミネータ用の 電力を供給するように設定できるものもありますし、Zip ドライブや Syquest 社の EX-Drive のようにアクティブ型のターミネータを使っているため、 ターミネータ用の電力には依存しないものもあります。時には、APS SCSI Sentry 2 のように外部から電流を供給するタイプの特別なターミネータ を使う必要があるかもしれません。SCSI デバイスをいくつも繋げて接続する 場合には、ターミネータ用の電力を必要とするデバイスや、電力を供給できる デバイスがあるかどうかに注意してください。

SCSI デバイスのパラメータ

以下のパラメータを scsi.opts で定義することができます:

DO_FSTAB

値には y か n を指定します。このデバイスのために /etc/fstab の設定を追加するかどうかを指定します。

DO_FSCK

値には y か n を指定します。マウントを行う前に ``fsck -Ta'' コマンドを使ってファイルシステムの検査を行うかどうかを指定します。

DO_MOUNT

値には y か n を指定します。カードを挿した時に自動的にマウントを行うか どうかを指定します。

FSTYPE, OPTS, MOUNTPT

fstab 用のエントリやデバイスのマウント時に使うファイルシステムの種類、 マウント時のオプション、マウントポイントを指定します。

例として、SCSI ID が 3 でパーティションを 2 つ持つディスクと SCSI ID が 6 である CD-ROM を設定するためのスクリプトを以下に示します:

case "$ADDRESS" in
*,sd,*,0,3,0)
    # This device has two partitions...
    PARTS="1 2"
    ;;
*,sd,*,0,3,0,1)
    # Options for partition 1:
    #  update /etc/fstab, and mount an ext2 fs on /usr1
    DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
    FSTYPE="ext2"
    OPTS=""
    MOUNTPT="/usr1"
    ;;
*,sd,*,0,3,0,2)
    # Options for partition 2:
    #  update /etc/fstab, and mount an MS-DOS fs on /usr2
    DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
    FSTYPE="msdos"
    OPTS=""
    MOUNTPT="/usr2"
    ;;
*,sr,*,0,6,0)
    # Options for CD-ROM at SCSI ID 6
    PARTS=""
    DO_FSTAB="y" ; DO_FSCK="n" ; DO_MOUNT="y"
    FSTYPE="iso9660"
    OPTS="ro"
    MOUNTPT="/cdrom"
    ;;
esac

個別カードに関するコメント

  • Adaptec APA-1480 CardBus カードは巨大な I/O ポートウィンドウ(256 個の ポート境界上に配置された 256 個の連続したポート)を必要とします。このよ うに巨大なウィンドウを検出するためには、 /etc/pcmcia/config.opts で I/O ポート領域を広げる必要があるか もしれません。
  • Adaptec APA-460 SlimSCSI アダプタはサポートされていません。このカード は元々 Trantor 社から発売されていたものですが、Adaptec 社が Trantor 社 を合併してからは Adaptec のラベルを付けて売っています。APA-460 はどの Linux 用のドライバとも互換性がありません。
  • New Media Bus Toaster と UMAX Astra 1200s スキャナについては、通信がう まくできないという報告を受けたことがあります。SCSI プロトコルは複雑な ので、SCSI デバイスにまつわる問題を調べる際には、このように互換性のな い組合せが存在し、しかも文書化されていないかもしれないことを考慮する必 要があります。

SCSI アダプタにまつわる問題の診断

  • aha152x_cs ドライバ(Adaptec, New Media などで使用)の場合、 SCSI 切断/再接続のサポートがテープドライブにおいてよくトラブルの原因に なるようです。この「機能」を無効にするには、 /etc/pcmcia/config.opts に以下の行を追加します:
    module "aha152x_cs" opts "reconnect=0"
    
  • また aha152x_cs ドライバの場合、特定のデバイスで起動時の待ち時間 を長くする必要があるようです。これはモジュールのパラメータ reset_delay で制御できます。Yamaha の 4416S CD-R ドライブは、この ようなドライブの一例です。待ち時間を長く取らないと、デバイスの認識はう まく行きますが、その後にシステムがハングしてしまいます。このような場合 には以下の設定を試してください:
    module "aha152x_cs" opts "reset_delay=500"
    
  • SCSI デバイスの探査で起きる可能性がある別の問題としては、複数 LUN の 探査があります。あるデバイスがうまく検出されたけれど、その後で そのデバイスの LUN 1 を検出する時にSCSI バスがタイムアウトする場合には、 カーネルの CONFIG_SCSI_MULTI_LUN を無効にしてください。
  • SCSI サポートをモジュールとして組み込んだ(CONFIG_SCSI を ``m'' に設定した)場合には、使用する *_cs ドライバがロードされ る前に SCSI モジュールがロードされるように /etc/pcmcia/config を修正しなければなりません。
  • SCSI バスを探査した時に ``aborting command due to timeout'' という メッセージが表示される場合は、ほぼ確実に割り込みの衝突が起こっています。
  • ホストドライバが ``no SCSI devices found'' というメッセージを出力する 場合には、使っているデバイス(つまりディスク、テープ、CD-ROM, ジェネリッ クデバイス)用の適切なトップレベル SCSI ドライバがカーネルに組み込まれ ていることを確かめてください。トップレベルドライバが無ければ、その種類 のデバイスは無視されます。

4.7 PCMCIA メモリカード

memory_cs ドライバは全ての種類のメモリカードを扱うことができます。 別の機能を持つカードの PCMCIA メモリのアドレス空間に直接アクセスすることも できます。このドライバをロードする時には、キャラクタデバイスと ブロックデバイスの組が生成されます。デバイスの命名規則の詳しい説明につ いては、モジュールのオンラインマニュアルを見てください。ブロックデバイス はディスクのようなアクセス(ファイルシステムの作成やマウント等)を行うた めに使います。キャラクタデバイスは、任意の位置においてバッファ無しの読 み書きを行う "raw" デバイスとして用います。

memory.opts に渡すデバイスアドレスには 2 つのフィールドがあります。 すなわちスキームとソケット番号です。オプションは、対応するメモリカード の最初の共通メモリパーティションに適用されます。

一部の古いメモリカードや、ほとんどの単純な静的 RAM カードには CIS(Card Information Structure, カード情報領域)がありません。CIS は PCMCIA が自分自身を識別するために使います。cardmgr は普通、CIS が 無いカードは全て単純なメモリカードとみなし、memory_cs ドライバを ロードします。したがって、一般にカードの識別の問題が起こった時には、 他の種類のカードが間違ってメモリカードと認識されるという副作用がありま す。

memory_cs は経験的手法を使ってカードの機能を推定します。経験的手 法は書き込み禁止のカードでは動作しませんし、他にも間違った推定を行って しまうことがあります。カードが間違って認識された場合には、ddmkfs といったコマンドを使う時には、メモリの大きさを明示的に指定し てください。

メモリデバイスのパラメータ

以下のパラメータは memory.opts で指定することができます:

DO_FSTAB

値には y か n を指定します。このデバイス用に /etc/fstab の 設定を追加するかどうかを指定します。

DO_FSCK

値には y か n を指定します。マウントを行う前に ``fsck -Ta'' コマンドを使ってファイルシステムの検査を行うかどうかを指定します。

DO_MOUNT

値には y か n を指定します。カードを挿した時に自動的にマウントを行うか どうかを指定します。

FSTYPE, OPTS, MOUNTPT

fstab 用のエントリやデバイスのマウント時に使うファイルシステムの種類、 マウント時のオプション、マウントポイントを指定します。

ソケットに挿入されたメモリカードのマウントを自動的に行うためのスクリプ トの例を示します:

case "$ADDRESS" in
*,0,0)
    # Mount filesystem, but don't update /etc/fstab
    DO_FSTAB="n" ; DO_FSCK="y" ; DO_MOUNT="y"
    FSTYPE="ext2" ; OPTS=""
    MOUNTPT="/mem0"
    ;;
*,1,0)
    # Mount filesystem, but don't update /etc/fstab
    DO_FSTAB="n" ; DO_FSCK="y" ; DO_MOUNT="y"
    FSTYPE="ext2" ; OPTS=""
    MOUNTPT="/mem1"
    ;;
esac

リニアフラッシュメモリカードの使い方

以下の情報はいわゆる「リニアフラッシュ」メモリカードにしか当てはまりま せん。SmartMedia や CompactFlash を含む多くのフラッシュカードは、実際 は IDE ディスクデバイスをエミュレートする回路を持っています。したがっ て、こういったカードはメモリデバイスではなく IDE デバイスとして扱われ ます。

フラッシュメモリカードには有力なフォーマットが二つあります: FTL つまり ``flash translation layer'' 形式と Microsoft Flash File System 形式です。一般的には、FTL 形式 の方が柔軟性に優れています。というのも、FTL 形式のフラッシュカード上に は、通常のディスクデバイスと同様に任意の一般的な高レベルファイルシステム (ext2, MS-DOS 等)を作れるからです。FFS は全く独自のファイルシステムで す。現時点では、Linux は FFS でフォーマットされたカードを扱えません。

フラッシュメモリカードを普通のディスクのようなブロックデバイスとして使 うには、まず ftl_format コマンドを使ってデバイス上 に FTL パーティションを作成します。このレイヤはフラッシュメモリ のプログラミングにおけるデバイス固有の細かい部分を隠し、カードが単なる ブロックデバイスに見えるようにします。以下にコマンドの例を示します:

ftl_format -i /dev/mem0c0c

このメモリは ``raw'' メモリカードインタフェース経由でカードにアクセス します。一度フォーマットすると、このカードは ftl_cs ドライバ経由 で通常のブロックデバイスとしてアクセスすることができます。操作例を以下 に示します:

mke2fs /dev/ftl0c0
mount -t ext2 /dev/ftl0c0 /mnt

FTL デバイスの命名規則はちょっと変わっています。マイナーデバイス番号が 3 つの部分に分かれています。すなわちカード番号、そのカード上での領域番号、 (省略可能な)領域内でのパーティション番号です。 ある領域はパーティションテーブルを持たない単独のブロックデバイスとして 扱うこともできますし(フロッピーと同様です)、ハードディスクデバイスのよ うにパーティションを切ることもできます。``ftl0c0'' デバイスはカード 0, 共通メモリ領域 0, 全領域を使うという意味です。 領域がパーティション分割されていれば、``ftl0c0p1'' から ``ftl0c0p4'' が基本パーティションの 1 番から 4 番を表します。

FTL パーティションの設定オプションは ftl.opts で指定できます。 このファイルの構成は memory.opts に似ています。 ftl.opts に渡すデバイスアドレスは、3 個または 4 個のフィールドか ら構成されます。すなわちスキーム、ソケット番号、領域番号、(省略可能な) パーティション番号です。ほとんどのフラッシュカードはフラッシュメモリ領域 を 1 つしか持っていません。したがって領域番号は常に 0 となります。

Intel Series 100 フラッシュカードは、最初の 128K のフラッシュブロック を使ってカードの設定情報を格納しています。この情報を誤って消してしまう のを防ぐため、ftl_format は自動的にこれを検出し、FTL パーティション の作成時には最初のブロックをスキップします。

4.8 PCMCIA ATA/IDE カードドライブ

ATA/IDE ドライブのサポートは、カーネルの通常の IDE ドライバを基にして います。SmartMedia デバイスと CompactFlash デバイスもサポート対象に含 まれています: こういったフラッシュメモリカードは、IDE インタフェースを エミュレートするように設定されています。 このドライバの PCMCIA 固有の部分が ide_cs です。 ATA/IDE カードを抜く前には、cardctlcardinfo を使ってカード を停止させてください。というのも、このドライバはホットスワップに対応し ていないからです。

ide.opts に渡すデバイスアドレスは 3 個または 4 個のフィールドから 構成されます。すなわち現在のスキーム、ソケット番号、デバイスのシリアル番号、 (省略可能な)パーティション番号です。ide_info コマンドを使うと、 IDE デバイスのシリアル番号を得ることができます。SCSI デバイスと同様に、 ide.opts はまずデバイス全体に対して呼び出されます。 ide.opts がパーティションのリストを PARTS 変数に返した場合は、 次にこのスクリプトがそれぞれのパーティションに対して呼び出されます。

ATA/IDE 固定ディスクデバイスのパラメータ

以下のパラメータを ide.opts で指定することができます:

DO_FSTAB

値には y か n を指定します。このデバイス用に /etc/fstab の 設定を追加するかどうかを指定します。

DO_FSCK

値には y か n を指定します。マウントを行う前に ``fsck -Ta'' コマンドを使ってファイルシステムの検査を行うかどうかを指定します。

DO_MOUNT

値には y か n を指定します。カードを挿した時に自動的にマウントを行うか どうかを指定します。

FSTYPE, OPTS, MOUNTPT

fstab 用のエントリやデバイスのマウント時に使うファイルシステムの種類、 マウント時のオプション、マウントポイントを指定します。

任意の ATA/IDE カードの最初のパーティションを /mnt にマウント するための ide.opts ファイルの例を示します:

case "$ADDRESS" in
*,*,*,1)
    DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
    FSTYPE="msdos"
    OPTS=""
    MOUNTPT="/mnt"
    ;;
*,*,*)
    PARTS="1"
    ;;
esac

ATA/IDE アダプタにまつわる問題の診断

  • I/O ポートが衝突していると、IDE ドライバがドライブのジオメトリを誤検出 し、``INVALID GEOMETRY: 0 PHYSICAL HEADS?'' と報告するかもしれま せん。これを修正するには、/etc/pcmcia/config.opts を編集して、 衝突する範囲の I/O ポートを使わないようにしましょう。
  • 一部の IDE カードはディスクの回転が始まるのに時間がかかるため、PCMCIA の仕様でカードの設定のために許されている最大時間を超えてしまうことがあ ります。バージョン 3.0.6 以降では、ide_cs ドライバは自動的にデバイス 検出のリトライを行い、このようなディスクドライブが動き出すための時間を 与えます。古いドライバを使っている場合には、pcmcia_core モジュール を以下のようにしてロードする必要があるかもしれません。
    CORE_OPTS="unreset_delay=400"
    
  • ATA/IDE CD-ROM デバイスを使うためには、カーネルは CONFIG_BLK_DEV_IDECD オプションを有効にして構築しなければなりませ ん。標準のカーネルではこのオプションは有効になっていますが、独自の カーネルを作っている場合には注意が必要です。
  • IDE ドライブの使用時によく起こるエラーは、誤ったデバイスファイルをマウ ントしようとすることです。普通は、デバイス全体ではなくデバイス中の パーティションひとつをマウントします(つまり /dev/hde ではなく /dev/hde1)。

4.9 マルチファンクションカード

一つの割り込みを複数のドライバ(例えばシリアルドライバとイーサネット ドライバ)で共有することができます。実際、PCMCIA の仕様では、カードの機 能全てが同じ割り込みを共有することを要求しています。普通は、カードの機 能は全てドライバを切り替えることなく利用できます。 ある程度最近の Linux カーネル(つまり 1.3.72 以降)は、こういった種類の 割り込みの共有をサポートしています。

カードの機能を 2 つ同時に使うには「細工」が必要で、色々なハードウェア ベンダーがそれぞれ互換性の無い(場合によっては独自の)方法を使って割り込み の共有を実装しています。一部のカード(Ositech Jack of Diamonds, 3Com 3c562 とその関連カード、Linksys 製カード)用のドライバは同時アクセ スをうまくサポートしていますが、サポートできていないカード(特に古い Megahertz 製カード)もあります。両方の機能を有効にしてカードを使うと問 題が起こる場合は、それぞれの機能を切り離して試してください。これを行う には、明示的に ``ifconfig down'' を実行してネットワークインタフェース を停止させ、それから同じカードのモデム機能を使う必要があるかもしれませ ん。


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

[