Red Hat Linux 8.0への2.4.19以降の組み込み

1.はじめに

Red Hat Linux 7.2, 7.3, 8.0では、カーネルのブートローダにGRUBが標準で採用されるようになりました。ext3ファイルシステムが使われる環境では、ブート時にext3ファイルシステムのマウントに必要なinitrdイメージの指定も欠かせません。アプリケーション・プログラマやシステム・インテグレータにとってGRUB は、以前のLILOより使い易く、メリットも多いのですが、デバイスドライバの開発等で頻繁にカーネルを入れ替える作業では、わざわざブートローダをLILOに変える場合もあり、あまり使われていないかも知れません。

ここではGRUB と initrdを使ってブートする環境に、新しくkernel.orgからダウンロードしたカーネルを組み込んでそのまま動作させるとともに、initrdの中身を直接編集して、毎回mkinitrdでinitrdイメージを作成しなくても、initrdイメージを開発用にカスタマイズしたカーネルで流用させる方法を紹介します。

2.新カーネルのダウンロードとコンパイル、コピー

kernel.orgから一般的な方法を用いて、組み込むためのカーネルをダウンロードし、カーネルをコンパイル、リンクして作成します。
以下は、kernel-2.4.19を/usr/src/linux-2.4.19に展開した場合の操作例です。

# cd /usr/src/linux-2.4.19
# make mrproper
# make ?config #(好きなCONFIG作成方法でconfigファイルを読み込んで設定します
# make dep
# make clean
# make bzImage
# make modules
# make modules_install
# cp -p System.map /boot/System.map-2.4.19
# cp -p arch/i386/bzImage /boot/vmlinuz-2.4.19

★注意! 日本語Red Hat Linux 8.0 では、付属のコンパイラのgcc-3.2が賢くなりすぎて、あらゆるメッセージを日本語で出力します。その結果、カーネルコンパイル時にはgccに対して期待している「install」の文字列を出力しないので、カーネルコンパイルでいきなりエラーとなります。理由がわかればいろいろな対策ができると思いますが、例えばShellでコンパイルする前に。
# LANG=
という環境変数LANGをクリアするコマンドで、このエラーは回避する事ができます。
この回避策は、日本語Red Hat Linux 8.0プレインストールカーネルの2.4.18-14をコンパイルする場合にも必要です。

3.INITRD用RAMDISKの展開と修正、再作成

以下は、前項の「カーネルコンパイル」手順が終った後での作業です。

Redhatブート用RAMDISKファイルを2.4.19用に名前を変えて展開

# gzip -cd /boot/initrd-2.4.18-14.img > /tmp/initrd-2.4.19

RAMDISKファイルのマウント

# losetup /dev/loop0 /tmp/initrd-2.4.19
# mkdir /loop0
# mount /dev/loop0 /loop0

2.4.19用ローダブル・モジュールの上書きコピー

# cd /loop0
# cp -p /usr/src/linux-2.4.19/fs/ext3/ext3.o lib
# cp -p /usr/src/linux-2.4.19/fs/jbd/jbd.o lib

linuxrcファイルの編集

# vi linuxrc
<==== 編集内容ここから:insmodに'-f'オプションを付けます。(4行目と6行目)===>
#!/bin/nash

echo "Loading jbd module"
insmod -f /lib/jbd.o
echo "Loading ext3 module"
insmod -f /lib/ext3.o
echo Mounting /proc filesystem
mount -t proc /proc /proc
echo Creating block devices
mkdevices /dev
echo Creating root device
mkrootdev /dev/root
echo 0x0100 > /proc/sys/kernel/real-root-dev
echo Mounting root filesystem
mount -o defaults --ro -t ext3 /dev/root /sysroot
pivot_root /sysroot /sysroot/initrd
umount /initrd/proc
<====ファイルは、ここまで====>

RAMDISKファイルのアンマウントと2.4.19用圧縮イメージの作成

# cd /tmp
# umount /loop0
# gzip -c initrd-2.4.19 > /boot/initrd-2.4.19.img

4.grub.confファイルの編集

# cd /boot/grub
# vi grub.conf
<==== 編集内容の一部、ここから:2.4.19のtitle行以下を追加します。(以下の4行目から7行目) ===>
default=0
timeout=10
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
title Red Hat Linux (2.4.19) from kernel.org
 root (hd0,1)
 kernel /boot/vmlinuz-2.4.19 ro root=LABEL=/
 initrd /boot/initrd-2.4.19.img

title Red Hat Linux (2.4.18-14)
 root (hd0,1)
 kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
 initrd /boot/initrd-2.4.18-14.img
<====編集内容の一部は、ここまで====>

※ファイルの編集が終った後は、何もせずに(LILOのようにliloコマンドを実行する必要無しに)ブート可能です。
GRUBのしくみやgrub.confの記述に関して興味があれば、Google等で検索して下さい。

5.ポイント

ここでのポイントはlinuxrc内のinsmodに'-f'を付ける事です。このために、今後はカスタマイズした開発中の派生バージョン"2.4.19-special" のカーネルを新たに作成しても、同じinitrd用RAMDISK圧縮イメージが使える可能性は高いと思います。2.4.20以降でどうなるかは、各自で試してみて下さい。

Last editted on 4/10/2003
Copyright(c) 2003, Device Drivers Limited 戻る→