Filewatcher File Search
FTP Search
  
Directory 
  
Content Search 
   
pkg://PCMCIA-HOWTO.tar.gz:51154/PCMCIA-HOWTO-5.html  downloads

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>Linux PCMCIA HOWTO: 高度な話題</TITLE>
 <LINK HREF="PCMCIA-HOWTO-6.html" REL=next>
 <LINK HREF="PCMCIA-HOWTO-4.html" REL=previous>
 <LINK HREF="PCMCIA-HOWTO.html#toc5" REL=contents>
</HEAD>
<BODY>
<A HREF="PCMCIA-HOWTO-6.html">次のページ</A>
<A HREF="PCMCIA-HOWTO-4.html">前のページ</A>
<A HREF="PCMCIA-HOWTO.html#toc5">目次へ</A>
<HR>
<H2><A NAME="s5">5. 高度な話題</A></H2>

<P>
<P>
<H2><A NAME="ss5.1">5.1 PCMCIA デバイスへのリソース割り当て</A>
</H2>

<P>理論的には、2 つのデバイスが同じ IRQ を使わない限り、どの IRQ がどの
デバイスに割りあてられても問題にはならないはずです。
<CODE>/etc/pcmcia/config</CODE> ファイルには、PCMCIA 以外のデバイスが
利用する IRQ を PCMCIA では使わないように設定する部分があります。
<P>同様に、あるカードが使う I/O アドレスを直接指定する方法はありません。
<CODE>/etc/pcmcia/config.opts</CODE> ファイルを使うと、どのカードでも使え
る I/O ポートの範囲を指定することや、他のデバイスと衝突する範囲の
I/O ポートを使わないように指定することができます。
<P><CODE>/etc/pcmcia/config.opts</CODE> を修正したら、``<CODE>kill -HUP</CODE>'' を使っ
て <CODE>cardmgr</CODE> の初期化をやり直してください。
<P>カード状態の変更を監視するための割り込みは、<CODE>cardmgr</CODE> が 
<CODE>/etc/pcmcia/config</CODE> を読み込む前に低レベルのソケットドライバ
モジュール(<CODE>i82365</CODE> や <CODE>tcic</CODE>)が決めます。したがって、このファイル
を変更しても影響はありません。この割り込みを設定するには、
ソケットドライバをロードする時に <CODE>cs_irq=</CODE> オプションで設定してくだ
さい。この設定は <CODE>/etc/rc.d/rc.pcmcia</CODE> で <CODE>PCIC_OPTS</CODE> 変数を
設定することによって行います。
<P>全てのクライアントカードドライバには、割り当てを試みる割り込みを指定す
るための <CODE>irq_list</CODE> というパラメータがあります。このようなドライバ
オプションは <CODE>/etc/pcmcia/config</CODE> ファイルで設定します。指定例
を以下に示します:
<P>
<BLOCKQUOTE><CODE>
<PRE>
device "serial_cs"
  module "serial_cs" opts "irq_list=8,12"
  ...
</PRE>
</CODE></BLOCKQUOTE>
<P>この指定により、シリアルドライバは irq 8 か irq 12 しか使わなくなりま
す。<CODE>irq_list</CODE> の設定に関係なく、カードサービスシステムは他のデバイス
が既に使っている割り込みや設定ファイルで除外されている割り込みは決して
割り当てません。
<P>
<H2><A NAME="ss5.2">5.2 家と会社で別々の設定を使い分けることができますか?</A>
</H2>

<P>PCMCIA の「スキーム」を使えば簡単です。例えば ``home'' と ``work'' と
いう 2 つのスキームの設定を考えてみましょう。スキームを反映した
<CODE>network.opts</CODE> スクリプトの例を以下に示します:
<P>
<BLOCKQUOTE><CODE>
<PRE>
case "$ADDRESS" in
work,*,*,*)
    # definitions for network card in work scheme
    ...
    ;;
home,*,*,*|default,*,*,*)
    # definitions for network card in home scheme
    ...
    ;;
esac
</PRE>
</CODE></BLOCKQUOTE>
<P>PCMCIA デバイスアドレスの最初の部分は常にスキームの設定に対応していま
す。この例では 2 つめの ``case'' の部分が ``home'' と ``default'' のス
キームになっており、スキームが設定されていない場合は ``home'' の設定で
起動されることになります。
<P>2 つの設定を切りかえるには、
<P>
<BLOCKQUOTE><CODE>
<PRE>
cardctl scheme home
</PRE>
</CODE></BLOCKQUOTE>
<P>あるいは
<P>
<BLOCKQUOTE><CODE>
<PRE>
cardctl scheme work
</PRE>
</CODE></BLOCKQUOTE>
<P>を実行します。
<P><CODE>cardctl</CODE> は、全てのカードの停止と再起動に相当する操作を行います。
このコマンドは PCMCIA システムがロードされているかどうかに関わらず安全
に実行することができますが、その時にちょうど別の PCMCIA デバイスを使っ
ていれば、コマンドは失敗するかもしれません(たとえ、設定がそのスキーム
設定に明示的に依存していなくても)。
<P>現在のスキームの設定を知るには以下のコマンドを実行します:
<P>
<BLOCKQUOTE><CODE>
<PRE>
cardctl scheme
</PRE>
</CODE></BLOCKQUOTE>
<P>デフォルトでは、スキーム設定は再起動しても変化しません。そのため、
間違った環境向けにネットワークが初期化されてしまうと、好ましくない結果
になるかもしれません。このような場合には、起動オプションの <CODE>SCHEME</CODE> 
を使ってスキームの初期値を設定することができます(詳しくは
<A HREF="PCMCIA-HOWTO-2.html#startup">起動オプション</A> を参照)。<CODE>lilo</CODE> の起動
プロンプトを使ってスキームを設定することもできます。<CODE>lilo</CODE> は認識で
きないオプションを環境変数として <CODE>init</CODE> に渡すので、起動プロンプト
で <CODE>SCHEME</CODE>(あるいは別の PCMCIA 起動オプション)を設定すると、その値
が PCMCIA 起動スクリプトに伝えられます。
<P>キー操作を減らすには、スキームを <CODE>lilo</CODE> の設定ファイルで指定すると
よいでしょう。例えば以下のように設定します:
<P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
root = /dev/hda1
read-only
image = /boot/vmlinuz
  label  = home
  append = "SCHEME=home"
image = /boot/vmlinuz
  label  = work
  append = "SCHEME=work"
</PRE>
</CODE></BLOCKQUOTE>
<P>起動プロンプトで ``home'' あるいは ``work'' と入力すれば、適切な
スキームでシステムが起動します。
<P>
<H2><A NAME="ss5.3">5.3 PCMCIA デバイスからの起動</A>
</H2>

<P>
<P>ルートファイルシステムを PCMCIA デバイス上に置くには細工が必要です。と
いうのも、Linux の PCMCIA システムはカーネルにリンクするようには設計さ
れていないからです。中心部分となるローダブルカーネルモジュールと、
ユーザモードで動作する cardmgr デーモンは、既に動作しているシステムを
前提にしているのです。この要件はカーネルの ``initrd'' を使っ
て回避することができます。この機能は一時的な RAM ディスクを小さな
ルートファイルシステムとして用いて起動し、ドライバをロードし、その後で
別のルートファイルシステムを改めてマウントするというものです。一時的な
ルートファイルシステム上で PCMCIA のデバイスを設定し、それから PCMCIA 
デバイスをルートファイルシステムとしてマウントし直すことができます。
<P>initrd イメージは絶対に起動デバイス以外に置かなければなりません。した
がって、これを PCMCIA デバイスに置くことはできません。これは BIOS によ
る制限であり、カーネルの制限ではありません。ここでは「起動可能」デバイス
(つまり起動できるデバイス)と「ルート利用可能」デバイス(つまり
ルートファイルシステムとしてマウントできるデバイス)を区別すると便利で
しょう。「起動可能」デバイスは BIOS が決めますが、一般的には内蔵フロッピー
とハードディスクに制限されています。「ルート利用可能」デバイスは、
カーネルがロードされた後に対応している全てのブロックデバイスです。
initrd 機能は、より多くのデバイスを「ルート利用可能」にします。
「起動可能」にはしません。
<P>Linux ディストリビューションには、インストール時に PCMCIA SCSI アダプタ
を使えるものもあります。これは、PCMCIA SCSI CD-ROM デバイスからの
インストールに対応した結果としての意図しない副作用です。しかし現状では、
``initrd'' を適切に設定して PCMCIA デバイス上のルートファイルシステム
を使って起動するインストール用ツールはありません。したがって、PCMCIA 
デバイス上にルートファイルシステムを置くシステムを設定するには、別の 
Linux マシンを使って ``initrd'' イメージを作らなければなりません。別の 
Linux マシンが無ければ、最小構成の Linux を PCMCIA でないデバイス上に
一時的に構築し、そこで initrd イメージを作成し、それからインストール先
の PCMCIA に改めてインストールすることもできます。
<P>Linux Bootdisk-HOWTO には起動ディスクの設定に関する一般的な情報が書か
れていますが、initrd 固有の情報は載っていません。initrd に関する最も
重要な文書は、最近のカーネルソースに含まれている
<CODE>linux/Documentation/initrd.txt</CODE> です。作業を始める前に、この
文書を必ず読んでください。<CODE>lilo</CODE> にも慣れておくといいでしょう。
initrd を使うためには、カーネルの <CODE>CONFIG_BLK_DEV_RAM</CODE> オプションと
<CODE>CONFIG_BLK_DEV_INITRD</CODE> オプションが有効でなければなりません。
<P>これは高度な設定技術であり、Linux と PCMCIA に関する高度な技術が必要で
す。作業の前には必ず関連文書を全て読んでください。以下の説明の手順でう
まく行くはずですが、例から離れるとすぐに案内がない「サポート無し」の領
域に入るので、自分で何とかしなくてはならなくなります。
<P>この方法を使うにはバージョン 2.9.5 以降の PCMCIA ドライバが必ず必要で
す。古い PCMCIA パッケージやパッケージ内の個別の要素は、initrd におい
てはうまく動作しません。異なるバージョンの内容を混ぜてはいけません。
<P>
<H3>補助スクリプト ``pcinitrd''</H3>

<P><CODE>pcinitrd</CODE> スクリプトは、PCMCIA デバイス上のルートパーティションで
起動するための基本的な initrd イメージを作ります。このイメージには必要
最低限のディレクトリ階層とわずかのデバイスファイル、少しの実行ファイル
と共有ライブラリ、PCMCIA ドライバモジュール群しか入っていません。
<CODE>pcinitrd</CODE> を実行する時には、イメージに入れたいドライバモジュールを
指定します。PCMCIA システムの中心部分である <CODE>pcmcia_core</CODE> と 
<CODE>ds</CODE> は自動的に入ります。
<P>例として、i82365 互換のホストコントローラを使っているラップトップ機が
あり、Adaptec SlimSCSI アダプタに接続されているハードディスク上に
ルートファイルシステムを置いて Linux を起動したいと考えているものとし
ます。この場合の initrd イメージは以下のようにして作成します:
<P>
<BLOCKQUOTE><CODE>
<PRE>
pcinitrd -v initrd pcmcia/i82365.o pcmcia/aha152x_cs.o
</PRE>
</CODE></BLOCKQUOTE>
<P>initrd の起動シーケンスのカスタマイズは、
<P>
<BLOCKQUOTE><CODE>
<PRE>
mount -o loop -t ext2 initrd /mnt
</PRE>
</CODE></BLOCKQUOTE>
<P>といったコマンドで「ループバックデバイス」を利用してイメージをマウント
して、
<CODE>linuxrc</CODE> スクリプトを編集することで行えます。設定ファイルはイメージ
の <CODE>/etc</CODE> ディレクトリにインストールされ、これもカスタマイズで
きます。詳しくは <CODE>pcinitrd</CODE> のオンラインマニュアルを見てください。
<P>
<H3>initrd 起動ディスクの作成</H3>

<P><CODE>pcinitrd</CODE> を使ってイメージを作った後は、起動ディスクを作成します。
これはカーネルと圧縮した initrd イメージ、<CODE>lilo</CODE> 用のファイル数個を
新品のフロッピーにコピーすることによって行います。以下の例では、使う予
定の PCMCIA ルートデバイスは <CODE>/dev/sda1</CODE> であるものとします:
<P>
<BLOCKQUOTE><CODE>
<PRE>
mke2fs /dev/fd0
mount /dev/fd0 /mnt
mkdir /mnt/etc /mnt/boot /mnt/dev
cp -a /dev/fd0 /dev/sda1 /mnt/dev
cp [kernel-image] /mnt/vmlinuz
cp /boot/boot.b /mnt/boot/boot.b
gzip &lt; [initrd-image] > /mnt/initrd
</PRE>
</CODE></BLOCKQUOTE>
<P>以下の内容を持つ <CODE>/mnt/etc/lilo.conf</CODE> を作成します:
<P>
<BLOCKQUOTE><CODE>
<PRE>
boot=/dev/fd0
compact
image=/vmlinuz
    label=linux
    initrd=/initrd
    read-only
    root=/dev/sda1
</PRE>
</CODE></BLOCKQUOTE>
<P>最後に <CODE>lilo</CODE> を以下のように実行します:
<P>
<BLOCKQUOTE><CODE>
<PRE>
lilo -r /mnt
</PRE>
</CODE></BLOCKQUOTE>
<P><CODE>-r</CODE> オプションを付けて <CODE>lilo</CODE> を実行すると、<CODE>lilo</CODE> は指定さ
れた代替ルートディレクトリからの相対位置に基づいて全ての動作を行います。
<CODE>/mnt/dev</CODE> ディレクトリにデバイスファイルを作成した理由は、
<CODE>lilo</CODE> はこの代替ルートモードで動作している時には、<CODE>/dev</CODE>
ディレクトリにあるファイルを使うことができないからです。
<P>
<H3>Linux 用でないドライブ上にある initrd イメージのインストール</H3>

<P>initrd 機能を使う理由としてよくあるのは、内蔵ハードディスクが他の OS 
専用になっているシステムを使う場合でしょう。Linux のカーネルと initrd 
イメージを Linux 用でないパーティションに置き、
<CODE>lilo</CODE> や <CODE>LOADLIN</CODE> を使ってこれらのイメージから Linux を起動す
る設定にすることができます。
<P>適切なルートデバイス用のカーネルの設定が既にできており、他の OS 上に 
initrd イメージが作られているものとすると、手っ取り早い方法は
<CODE>LOADLIN</CODE> を使って Linux を起動することです。これは以下のように行い
ます:
<P>
<BLOCKQUOTE><CODE>
<PRE>
LOADLIN &lt;kernel> initrd=&lt;initrd-image>
</PRE>
</CODE></BLOCKQUOTE>
<P>対象のマシンで一度 Linux が起動できれば、<CODE>lilo</CODE> をインストールして
直接 Linux を起動するようにできるでしょう。例えば <CODE>/dev/hda1</CODE> 
が Linux 用のファイルシステムでない対象パーティションであり、
<CODE>/mnt</CODE> がマウントポイントとして使えるものとします。まずは Linux 
関連ファイル用のサブディレクトリを作成します:
<P>
<BLOCKQUOTE><CODE>
<PRE>
mount /dev/hda1 /mnt
mkdir /mnt/linux
cp [kernel-image] /mnt/linux/vmlinuz
cp [initrd-image] /mnt/linux/initrd
</PRE>
</CODE></BLOCKQUOTE>
<P>この例では <CODE>/dev/sda1</CODE> が希望する Linux のルートパーティション
であり、SCSI ハードディスクは PCMCIA の SCSI アダプタ経由でマウントさ
れるものとします。<CODE>lilo</CODE> をインストールするには、以下のような内容の
<CODE>lilo.conf</CODE> を作ります:
<P>
<BLOCKQUOTE><CODE>
<PRE>
boot=/dev/hda
map=/mnt/linux/map
compact
image=/mnt/linux/vmlinuz
        label=linux
        root=/dev/sda1
        initrd=/mnt/linux/initrd
        read-only
other=/dev/hda1
        table=/dev/hda
        label=windows
</PRE>
</CODE></BLOCKQUOTE>
<P><CODE>boot=</CODE> 行は、指定されたデバイスの MBR(Master Boot Record)に
ブートローダをインストールすることを指示します。<CODE>root=</CODE> は、
initrd イメージをロードした後に使うルートファイルシステムを指定します。
この指定は、カーネルイメージが既にこのように設定されている場合には必要
ありません。<CODE>other=</CODE> は、<CODE>/dev/hda1</CODE> にインストールされてい
る他の OS を記述するために使います。
<P>この場合に <CODE>lilo</CODE> をインストールするには、以下のコマンドを使います:
<P>
<BLOCKQUOTE><CODE>
<PRE>
lilo -C lilo.conf
</PRE>
</CODE></BLOCKQUOTE>
<P>今回は、<CODE>lilo.conf</CODE> では <CODE>/mnt</CODE> 等の絶対パスを使っている点に
注意してください。私が例でこれを使ったのは、
対象のファイルシステムでは <CODE>boot=</CODE> オプションと <CODE>root=</CODE> オプション
に対して、Linux のデバイスファイルが作れないかもしれないからです。
<P>
<HR>
<A HREF="PCMCIA-HOWTO-6.html">次のページ</A>
<A HREF="PCMCIA-HOWTO-4.html">前のページ</A>
<A HREF="PCMCIA-HOWTO.html#toc5">目次へ</A>
</BODY>
</HTML>
Results 1 - 1
Help - FTP Sites List - Software Dir.
Searching half a billion files worldwide
© 1997-2009 MARUHN Internet Solutions