level1

Linux kernelを構築する。kernelのソースの場所を見つけ、それを設定(config) し、コンパイルせよ。
コンパイルしたkernelが正しく動く事を確認せよ。

Linux Kernelを構築するには

Linux kernelを構築するためには、まずkernelの設定を行います。
kernelのソースがある/usr/src/linux/に移動し、そこで設定をします。
Linuxでは、以下の3つの方法があります。

カスタマイズが終わったら、その変更をカーネルツリー全体に反映させます。
以下のコマンドを続けて入力します。

[root@pw019 ~]% make dep
[root@pw019 ~]% make clean

make depは、カーネルソース中に相互依存ツリーを構築します。
これらの相互依存は設定時に選んだオプションに影響されます。
make clianは、以前のカーネルの構築時から残っていて、現在は必要でない ファイルを取り除きます。

次に、カーネル本体をmakeします。

[root@pw019 ~]% make bzImage
[root@pw019 ~]% /sbin/installkernel 2.4.27.new arch/i386/boot/bzImageSystem.map

make bzImageを実行すると、vmlinuxとSystem.mapとarch/i386/boot/bzImage が作成されます。
vmlinuxとarch/i386/boot/bzImageは、カーネル本体(カーネルイメージ)です。
vmlinuxは非圧縮のもので、bzImageの方が圧縮されたものです。
通常は、bzImageの方が使われます。
System.mapは、vmlinuxからsymbol情報を取り出したものです。
symbolとは、c言語のオブジェクトファイルのsymbolです。
つまり、System.mapは、カーネルが利用できるモジュールについての情報が
格納されたファイルと考えられます。

/sbin/installkernelを実行すると、arch/i386/boot/bzImageを vmlinux-2.4.27.newに改名し/boot/に置きます。
リブート時にはこれを読み込みます。

カーネル本体をmakeしたら、モジュールをmakeします。

[root@pw019 ~]% make modules

ここまでできたら、後はインストールするだけです。

[root@pw019 ~]% make modules_install
[root@pw019 ~]% make install

make modules_installを実行すると、/lib/modules/'リリース'以下にモジュー ルが展開されます。

最後に、ブート時の変更をします。/etc/のlilo.confを書き換えます。
lilo.confは以下の様になっています。

[root@pw019 /etc]%cat lilo.conf
prompt
timeout=50
default=linux
boot=/dev/hda
map=/boot/map
install=menu
message=/boot/message

image=/boot/vmlinuz-2.4.26-0vl15
        label=linux
        initrd=/boot/initrd-2.4.26-0vl15.img
        read-only
        root=/dev/hda1
        append=" resume2=swap:/dev/hda2"

これを以下の様に変更します。

[root@pw019 /etc]% cat lilo.conf
prompt
timeout=50
default=new
boot=/dev/hda
map=/boot/map
install=menu
message=/boot/message

image=/boot/vmlinuz-2.4.27.new
        label=new
        read-only
        root=/dev/hda1
        append=" resume2=swap:/dev/hda2"

変更点は、defaultとlabelの名前を変更しています。
起動時に変更されているかこれで確認できます。
次に、imageを新しく作ったものに変更し、これを読み込ませます。
ここでは、vmlinuz-2.4.26-0vl15からvmlinux-2.4.27.newに変更し、 読み込ませています。
そして、initrdの行を削除しています。
これは、initrdで読みこまれるファイルを見つけることが出来なかったからです。
これでブート時の変更は終わりです。後は、この変更を反映されるように、

[root@pw019 /etc]% /sbin/lilo -v

として、エラーが無ければ終わりです。

これで、変更は終了しましたので、リブートしてみます。

[root@pw019 ~]% reboot

これで正しく起動されればkernelの再構築は終了です。

kernelが正しく動いている証拠として、linuxのバージョンを調べてみると、

[root@pw019 ~]% uname -r
2.4.27-0vl7

となり、他のpwのバージョンが2.4.26から、正しく実行されたことが分かります。


考察

このLevel1の実験は相当苦労しました。kernelを構築すると、
pwが壊れる可能性があったので、他のLevelから実験することにしましたが、
他の実験(Level2以外)全て、kernelを再構築しなければ出来ないことが分かり、
とても時間をロスしました。
逆に、Level1が出来ると、他のLevelはスムーズに出来ました。
最初は恐ろしく思える実験ですが、実際に実行してみると 案外簡単な実験であることが分かりました。


参考リンク

Linuxのカーネルコンパイル
http://japan.internet.com/linuxtutorial/20001111/1.html
Linux kernel再構築
http://www.geocities.jp/lethevert/softwares/linux_kernel/
Linux kernelの再構築
http://www.geocities.co.jp/SiliconValley-Cupertino/9120/kernel_recompile.html

Linux Kernelを構築するには
configの設定
カーネルをmake
モジュールをmake
インストール
ブート時の変更
考察
参考リンク

top level2