Linux Kernel 2.4.x を使ってフロッピーディスクから起動するLinuxシステムを作ってみます。
2.4.x に興味のない人はこの記事はスキップして下さい。
今回は linux-2.4.37.11.tar.bz2 を使います。
入手先:
$ pwd /home/msakamoto/reduced.linux $ ls ... linux-2.4.37.11.tar.bz2 ... $ tar jxf linux-2.4.37.11.tar.bz2 $ cd linux-2.4.37.11 $ make menuconfig
2.4.xの時点ではソースディレクトリと出力ディレクトリを分離できません。ソースディレクトリの中で直接 "make XXYYconfig" と "make bzImage" を実行します。
また kernel-2.6.x では "allnoconfig" など便利なターゲットがありましたが、2.4.x ではそれらは用意されていません。手動で不要なオプションを外していきます。
CONFIG_BLK_DEV_FD CONFIG_EXT2_FS
を忘れずに有効化(built-in)しておいてください。
$ make dep $ make clean # オプション。入れなくても平気・・・だと思う、多分。 $ make bzImage ... $ wc -c arch/i386/boot/bzImage 344997 arch/i386/boot/bzImage
NOTE: 2.4.x時代のLinuxカーネルコンパイルの情報を調べていくと、
/usr/include/asm/ /usr/include/asm-generic/ /usr/include/linux/
これら3ディレクトリを、コンパイルするホストマシンのヘッダーファイルではなく、ターゲットとするLinuxソースツリーを示すようにシンボリックリンクを貼り直すよう指示しているドキュメントを見かけます。
カーネルソース中での
#include <asm/...> #include <linux/...>
が、意図していないヘッダーファイルを参照してしまうのを防ぐためです。
ですが、今回使用した 2.4.37.11 ではそのような準備は不要でした。
例えば make dep コマンドの実行内容を見てみると・・・
make[6]: ディレクトリ `.../linux-2.4.37.11/drivers/video/intel' に入ります .../linux-2.4.37.11/scripts/mkdep -D__KERNEL__ \ -I.../linux-2.4.37.11/include -Wall ... -nostdinc ... > .depend ^^^^^^^^^
このように "-nostdinc" が指定されることでホストマシンの "/usr/include" 以下は参照されなくなります。同時に "-I" オプションでターゲットのLinuxソースツリーの "include" ディレクトリを参照するようになっています。
不安であれば一度 "make dep" してみて、ビルドするときのコマンドラインを確認し、もしも上記のような対応がされて「いない」ようであれば、手動で "/usr/include/" 以下の "asm(-generic)", "linux" シンボリックリンクを貼り直してみてください。
kernel-2.4.x の場合、"make bzImage" で生成されたbzImage単体でFDブートが可能です。
rdevコマンドで bzImage にルートデバイスを設定します。
# rdev arch/i386/boot/bzImage Root device /dev/root # rdev arch/i386/boot/bzImage /dev/fd0 # rdev arch/i386/boot/bzImage Root device /dev/fd0
ここまで来れば、bzImageをVMwareなりBochsなりでFDイメージに指定してLinuxをブート出来ます。
VFS: Insert root floppy and press ENTER
のメッセージが表示されると思います。
ここで 技術/Linux/手作りLinuxシステム/01. Boot from Floppy Disk (kernel-2.6.x) で作成したルートファイルシステムイメージを読み込ませてみると、Ext2ファイルシステムのマウントは成功しますが、その後フリーズしてしまいました。
このルートファイルシステムにインストールしたBusyBoxは、CentOS5.5上のglibcと静的リンクしてビルドしていますので、その影響かもしれません。
本シリーズでは kernel-2.4.x を使ったLinuxシステム構築についてこれ以上は取り上げません。
興味のある方は busybox-0.60.x など kernel-2.4.x 時代に開発されていたバージョンを使ってみたり、kernel-2.4.xを載せているCentOS3.xやFedora3などを入手し、kernel-2.4.x時代の環境上で構築してみてください。