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

5. 専用のシステムを作るには

pcmciax.gz は Slackware 3.1 のカーネルと組みあわせて使うように pcmcia-cs も 2.0.0 のカーネル用にコンパイルしていますので、カーネルを バージョアップする際には pcmcia-cs も再コンパイルが必要です。

initrd 経由で起動している場合、pcmcia-cs が initrd で起動するファイル システムの中に置かなければならないので、システムをバージョンアップする 際には多少の注意が必要になります。

5.1 カーネルの再構築

カーネルの再構築時には 以下の項目に注意して設定してください。これら以 外のオプションはお使いの環境に合わせて設定します。

カーネルをコンパイルする際には make zlilo ではなく、make zImage/usr/src/linux/arch/i386/boot/zImage を作りま す。この zImage を DOS 領域にコピーして、このカーネルイメージを loadlin.exe でロードするようにします。


# cp /usr/src/linux/arch/i386/booz/zImage /dos/linux/zimage.new

カーネルのコンパイルが終れば、モジュール類も忘れずコンパイル、インストー ルしておきます(make modules; make modules_install)。

次回に起動するときは loadlin.exe で zimage.new を指定します。

5.2 pcmcia-cs の再構築

pcmcia-cs はルートファイルシステムと initrd の双方にインストールしてや る必要があります。pcmciax2 をループバックでマウントして /sbin/{cardmgr, cardctl}/lib/modules/2.0.x/pcmcia 以下を入れ替えるのも一つの方法です が、この場合、pcmciax には libc-4.7.6 しか入っていないことに注意してく ださい。すなわち、コマンドである /sbin/{cardmgr,cardctl} をコ ンパイルする場合は a.out 形式でコンパイルする必要があります。

このためには、pcmcia-cs を通常の make でコンパイルしてから、cardmgr ディ レクトリに移り、Makefile に CC = /usr/i486-linuxaout/bin/gcc を追加し て make clean; make します。いくつかのコマンドは a.out 形式でうまくコ ンパイルできないかも知れません。

もう一つの方法は、 ELF 形式のコマンドを集めた新しい initrd を用意する ことです。新しく initrd を作るには、まず ramdisk 上にファイルシステム を作って必要なファイルを集め、それをファイルに書き出すのが簡単でしょう。 以下にそのための一つの手順を述べます。

  1. ramdisk 上に 4M ほどの ext2 のファイルシステムを構築する。
    # mke2fs /dev/ram0 4000
    

    initrd 経由で起動したシステムの場合、/dev/ram0 は使用中の場合 がありますので、その際は /dev/ram1 等を使ってください。
  2. ramdisk を適当なディレクトリにマウント。ヒナ型に使うために、pcmciax2 も別のディレクトリにマウントし、いったん pcmciax と同じファイルを /workdir 以下にコピーします。
    # mount -t ext2 /dev/ram0 /workdir
    # mount /dos/linux/pcmciax /refdir -o loop,ro
    # cd /refdir; tar cvf - * | (cd /workdir; tar xf -)
    

  3. この時点で /workdir 以下は pcmciax2 と同じファイル構成になっているので、 a.out 形式のライブラリやコマンド類を ELF 形式のものに入れかえます。こ のあたりは面倒ですが、手作業でやるしかないようです。
  4. pcmcia-cs を /workdir 以下にインストールします。pcmcia-cs のディレクト リでmake configすると設定に関する質問が表示されますので、 "Alternate target install directory" で /workdir を指定します。
     # make config
    
      Linux PCMCIA Configuration Script
      The default responses for each question are correct for most users.
      Consult the PCMCIA-HOWTO for additional info about each option.
    
      Linux source directory [/usr/src/linux]:
      Alternate target install directory [/]: /workdir
      /workdir
      C compiler name [gcc]: 
      ......
    

    この状態で make all して make install すれば /workdir/etc/pcmcia/workdir/lib/modules/`uname -r`/pcmcia に必要なモジュールがイ ンストールされます。ただし、/workdir/usr/man 以下に pcmcia-cs の マニュアル類もインストールされてしまうので不要ならば削除してください。 initrd 以外に、起動後に実行される実際のルートファイルシステムにも pcmcia-cs はインストールしておく必要があります。そのためには、 pcmcia-cs を再度 "Alternate target install directory : / " に設定して インストールしておきましょう。
  5. /dev/ram0 に作成したファイルシステムを通常のファイルに落とし ます。
    # umount /workdir
    # dd if=/dev/ram0 of=initrd bs=1k count=4000
    

  6. これで新しい initrd ができました。mount initrd /workdir -o loop として、正しくファイルシステムとして認識できるか確認しておき ましょう。
  7. 新しく作った initrd を DOS からアクセスできる領域にコピーします。 initrd は圧縮しておくことも可能です。
    # cp initrd /dos/linux
    # gzip /dos/linux/initrd
    

  8. 新しいカーネルと initrd の組み合わせで再起動します。

手元で試作した initrd を http://www.st.rim.or.jp/~isle/Linux/initrd.gz に用意しました。 この initrd には、対話的に外付け SCSI をルートファイルシステムにしたり、 NFS root を指定したりする dialog も付けていますので、興味のある方はお 試しください。この initrd に組みこんでいる pcmcia-cs は 2.8.23 でカー ネル 2.0.27 用にコンパイルしています。


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