オープンギャラリー:Fedora 7でのLinux Kernel 0.01のビルド

2008年1月2日、http://kerneltrap.org/Linux/Dusting_Off_the_0.01_Kernelにてgcc-4.x, bash-3.2等に対応したLinux kernel 0.01+patchが公開されました。
またpatchを当てたLinux kernel 0.01ソースをコンパイルして作成したバイナリカーネル(ブートディスクイメージ)ファイルも 公開されています。
更に、QEMU環境でLinux Kernel 0.01を実行させるための仮想ディスクも公開されています。


hd_oldlinux.img.zipとlinux0.01-3.3.imgがあれば手っ取り早くQEMU環境でLinux Kernel 0.01を動作させることができます。
しかしここではgcc-4.x対応のpatchを当てたLinux kernel 0.01ソースをビルド(コンパイル)してブートディスクイメージファイルを作成する手順を紹介します。

今回使用したコンパイル環境のホスト, QEMU実行環境は以下の通りです。
・コンパイルホスト:Fedora 7 ※ gcc:4.1.2
・QEMU実行環境:Windows XP ※ QEMU:0.8.2
※WindowsマシンはPentium 4 3.6GHzです。


  1. dev86のインストール
    Linux kernel 0.01ソースをビルドするにはgcc, asの他にas86も必要です。
    as86はdev86パッケージに入っているためdev86を次のようにインストールします。

    # yum install dev86

  2. gcc-4.x対応のpatchを当てたLinux kernel 0.01ソースの取得
    http://draconux.free.fr/download/os-dev/linux0.01/linux-0.01-rm-3.x/linux-0.01-rm-3.3.tgzを取得します。
    ダウンロード先は/home/amberとしました。

  3. QEMU実行用仮想ディスクの取得(Windows環境)
    http://draconux.free.fr/download/os-dev/linux0.01/Image/hd_oldlinux.img.zipを取得します。

  4. カーネルソースファイルの解凍
    $ tar zxvf linux-0.01-rm-3.3.tgz
    linux-0.01-rm-3.3.tgzの構成

  5. Makefieの変更
    linux-0.01-rm-3.3.tgzを展開して得られるlinux-0.01-rm-3.3直下のMakefileにはmakeを実行するユーザ名、グループ名の長さに応じて変更すべき箇所があります。
    それは「ls -l tools/system | grep system」で表示されるファイルサイズの取得箇所です。
    今回はamberという5文字のユーザ名、グループ名を使用しているためその箇所を以下のように変更します。
    ・変更前
    boot/boot:      boot/boot.s tools/system
            (echo -n "SYSSIZE = (";ls -l tools/system | grep system \
                    | cut -c31-37 | tr '\012' ' '; echo "+ 15 ) / 16") > tmp.s
    
    ・変更後
    boot/boot:      boot/boot.s tools/system
            (echo -n "SYSSIZE = (";ls -l tools/system | grep system \
                    | cut -c25-31 | tr '\012' ' '; echo "+ 15 ) / 16") > tmp.s
    

  6. コンパイル
    $ cd linux-0.01-rm-3.3
    $ make dep
    $ make all
    この結果としてImageというブート用のカーネルイメージファイルが生成されます。
    これをQEMUを実行するホストOS(今回はWindows)に転送します。

  7. QEMUでの実行確認
    まずQEMU実行用仮想ディスク(hd_oldlinux.img.zip)を解凍してhd_oldlinux.img(40MB)を得ます(これはhdb専用のものです)。
    次に以下のコマンドをbatファイル化して起動すると一瞬でLinux Kernel 0.01環境のシェルが現れます。
    qemu.exe -L . -m 16 -hdb hd_oldlinux.img -fda Image -boot a
    pause

    【Linux Kernel 0.01環境のシェル画面】



    ※キー配置はフィンランドキーボード仕様のようですので、例えば日本語キーボードで「;」を打つと「|」が入力されます。
    ※/devにはttyとtty0だけが存在します。
    ※linux-0.01-rm-3.3.tgzのソースにおいては実際のlinux-0.01.tar.gzソースとかなり違っている部分もあります。