ホーム
 TOPへ 最終更新日:2004年 1月10日



Contents
RedHat Linux 9.0 向けカーネル再構築手順
-------------------------------------------------------------------------------

1. ソースツリー確認(初回のみ)
  
  カーネルのソースツリーの正当性を確認する。
  
    [foo@bar foo]$ su -
    Password:
    [root@bar root]# cd /usr/src/linux-2.4
    [root@bar linux-2.4]# make mrproper

  特にエラー等が出なければOK(以前のコンパイルの残骸等も同時にクリアされる)。

  ※設定ファイル(.config)も消されてしまう為、通常は初回のみ行うこと。
    すでに.config が存在している場合には念のためバックアップを取っておくこと。
  ※ソースフォルダはカーネルバージョン等によって異なる。
    なお、上記例の場合には、linux-2.4 は実際は linux-2.4.20-8 へのシンボリック
    リンクになっている。
  
  カーネル開発用のインストールを行っている場合、/usr/src/linux-2.4/configs/.
  に .config のテンプレートファイルが存在するので、これを使用するのが便利。

    [root@bar linux-2.4]# cp -a ./configs/kernel-2.4.20-i686.config .config
  
  テンプレートは、
  kernel-<カーネルバージョン>-<プロセッサ種別>[-<オプション>].config
  というファイル名になっている。
  <オプション> が SMP となっているものは、マルチプロセッサ用である。
  ※ SMP = Symmetric Multi Processing|Processor
  
  ※Pentium 4 及び Pentium M の場合には上記のテンプレート(i686)でとりあえず
    動作する模様
    なお、-i386 を選んだり、カスタマイズで Pentium 4 に変更したりすると
    make modules_install 時に depmod でエラーが出て、起動時にカーネルパニック
    が発生してしまった。

2. カーネルのカスタマイズ

  以下の方法のいずれかによって、各種コンポーネントの取捨選択をすることにより
  カーネルのカスタマイズを行う。
  
  2-1. 対話型
    [root@bar linux-2.4]# make config
  
  2-2. テキストメニュー選択
    [root@bar linux-2.4]# make menuconfig
  
  2-3. X Window メニュー選択
    [root@bar linux-2.4]# make xconfig
    ※当然ながら、X 上からしか使用できない
  
  2-4. 既存設定仕様+対話型
    [root@bar linux-2.4]# make oldconfig
    ※予め .config が存在する場合に、過去の設定をそのまま使用する(追加された
      コンポーネントのみ対話式で選択)

3. 依存関係構築

  依存関係の構築と不要ファイルの削除を行う。
  
    [root@bar linux-2.4]# make dep
    [root@bar linux-2.4]# make clean

4. カーネルバージョン設定

  作成するカーネルの extra-version を設定する。

    [root@bar linux-2.4]# vi Makefile

  で、
    EXTRAVERSION = -8custom
  の '-8custom' のところを任意に書き換える。
  
  ※実際のカーネルバージョンは、
    KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
    となる。

5. カーネルのコンパイル

  カーネル及びモジュールの作成を行う。
  
    [root@bar linux-2.4]# make bzImage 2>&1 | tee make_bzImage.log
    [root@bar linux-2.4]# make modules 2>&1 | tee make_modules.log
  
  ※各行の '2>&1' 以下はコンパイルログ取得の為のもの。

6. カーネルのインストール

  カーネル及びモジュールのインストールを行う。
  
    [root@bar linux-2.4]# make install 2>&1 | tee make_install.log
    [root@bar linux-2.4]# make modules_install 2>&1 | tee make_modules_install.log
  
  ※各行の '2>&1' 以下はコンパイルログ取得の為のもの。
  
  上記例の場合、カーネルは、
    /usr/src/linux-2.4/arch/i386/boot/bzImage
  として作成されており、これが
    /boot/vmlinuz-<バージョン>
  としてコピーされる。
  
  同時にシステムマップ
    /usr/src/linux-2.4/System.map
  も、
    /boot/System.map-<バージョン>
  としてコピーされる。
  ※なお'/boot/vmlinuz'及び'/boot/System.map'も上記のコピーされたファイルへの
    シンボリックリンクとなっている。

  また、通常はイニシャルRAMディスクイメージが、
    /boot/initrd-<バージョン>.img
  として作成される。
  ※手動での作成は、mkinitrd /boot/initrd-<バージョン>.img <バージョン> とする。
    具体的には、
    # mkinitrd /boot/initrd-2.4.20-8custom.img 2.4.20-8custom
    のようになる
  
  一方、モジュールは、
    /lib/modules/<バージョン>
  以下にコピーされる。
  
7. ブートローダ設定

  通常、GRUB の設定ファイル(/etc/grub.conf)には新しいカーネルの設定が自動的に
  追加される。
  ※ブートローダとしては GRUB のみを対象とする(LILO他の場合は不明)。
  ※'/etc/grub.conf'は実際には'/boot/grub/grub.conf'へのシンボリックリンク。
  
    # vi /etc/grub.conf
  
      default=1
      timeout=10
      splashimage=(hd0,0)/grub/splash.xpm.gz
      title Red Hat Linux (2.4.20-8custom)
          root (hd0,0)
          kernel /vmlinuz-2.4.20-8custom ro root=LABEL=/ hdc=ide-scsi
          initrd /initrd-2.4.20-8custom.img
      title Red Hat Linux (2.4.20-8)
          root (hd0,0)
          kernel /vmlinuz-2.4.20-8 ro root=LABEL=/ hdc=ide-scsi
          initrd /initrd-2.4.20-8.img
  
  ここで、
    default=0
  とすれば、デフォルトで起動するカーネルが新しく再構築したものとなる。

8. 再起動

  再起動して問題ないかどうかを確認する。

-------------------------------------------------------------------------------
[追記]

・2003.10.16 現在、上記方法で再構築したカーネルでは、PCMCIA サービスが正しく
  動作しない現象が発生している。

  ※具体的には、
    - PCカードを挿しても認識音が鳴らず、(カードの)POWERランプも点灯しない。
    - cardctl ident を実行すると、
        no pcmcia driver in /proc/devices
      というメッセージが表示される。
    - service pcmcia restart を実行すると、
        Shutting down PCMCIA services:.
        Starting PCMCIA services: modulesmodprobe: Can't locate module pcmcia_core.o
        modprobe: Can't locate module yenta_socket.o
        modprobe: Can't locate module ds.o
         cardmgr.
      のようなメッセージが表示される。
    という現象になる。
  
  詳細な原因は不明だが、とりあえず、
    /lib/modules/<バージョン>/
  に出来ている、'pcmcia'というディレクトリを削除(あるいはリネーム)した後で
  サービスを再起動することにより回避している。

  ※ /lib/modules/<バージョン>/pcmcia 以下には、PCMCIA 関連のモジュール(*.o)が
    存在するが、実際はこれらは ../kernel/drivers 以下のファイルへのシンボリック
    となっている。

[追記2](2004.1.10)

・/usr/src/linux-2.4/Makefile 中に、

| # Backwards compatibilty symlinks for people still using old versions
| # of pcmcia-cs with hard coded pathnames on insmod.  Remove
| # _modinst_post_pcmcia for kernel 2.4.1.
| .PHONY: _modinst_post_pcmcia
| _modinst_post_pcmcia:
|  cd $(MODLIB); \
|  mkdir -p pcmcia; \
|  find kernel -path '*/pcmcia/*' -name '*.o' | xargs -i -r ln -sf ../{} pcmcia

    という記述を発見。
    
    試しに、"_modinst_post_pcmcia:" 以下4行をコメントアウトしてから
    make modules_install をかけると、/lib/modules/<バージョン>/pcmcia は
    出来なくなった。

  Indexに戻る



ホーム  このページの先頭