ブートローダのテストのための覚え書き

ブートローダの一発勝負はリスクが高すぎる。 もう一台テスト用のPCがあったとしても、転送→再起動の手間も 馬鹿にならない。そこで、エミュレータを使ってブートローダのテストを すると良いと考えた。(Vine-4.2用)

qemuのインストール

ここではqemuを使うことにする。

apt-get install qemu

qemuのディクスイメージの作成

取りあえず32MBあれば足りるはず.

dd if=/dev/zero of=ディスクイメージファイル名 bs=1M count=32

パーティション作成

losetup /dev/loop0 ディスクイメージファイル名
fdisk -u /dev/loop0

fdiskは、「p」して「n」して「p」して 「1」してEnterしてEnterして「p」して「w」すれば良い。

後半の途中で以下のような表示がでるはず。

コマンド (m でヘルプ): p

Disk /dev/loop0: 33 MB, 33554432 bytes
255 heads, 63 sectors/track, 4 cylinders, total 65536 sectors
Units = セクタ数 of 1 * 512 = 512 bytes

    デバイス Boot      Start         End      Blocks   Id  System
/dev/loop0p1              63       65535       32736+  83  Linux
Partition 1 does not end on cylinder boundary.

このスタートの63を記憶しておく。 (普通63以外にはならないけど)

losetup -d /dev/loop0

ファイルシステム作成

先ほどのスタートの数値に512を掛けた値を計算し(512*63=32256)、 その値をオフセットにして、loopデバイスをセットする。

losetup -o 32256 /dev/loop0 ディスクイメージファイル名

ファイルシステムの作成

mke2fs /dev/loop0
losetup -d /dev/loop0

grubの導入

取りあえず、イメージファイル内にパッケージを導入し、 さらに、イメージファイル内の適当な位置にstageファイルをコピーする。

mount -o loop,offset=32256 ディスクイメージファイル名 /mnt/floppy/
rpm -ivh --nodeps --root /mnt/floppy grub-0.97-0vl6tpu0.i386.rpm
cd /mnt/floppy
mkdir -p boot/grub
cp usr/lib/grub/i386-pc/*stage* boot/grub
cd /
umount /mnt/floppy

grubのイメージファイル内のMBR等への書き込みを行う。

grub
device (hd0) ディスクイメージファイル名
root (hd0,0)
setup (hd0)
quit

エミュレータの実行のテスト

qemu -std-vga ディスクイメージファイル名

そっけないgrubの画面が出たら、取りあえず成功。

マウスが捕まったら、CtrlとAltを同時に押すこと。

特に書き込みもないので、qemuは適当に止めてOK.

gfxbootのテスト

もう一度マウントし、gfxbootのテーマファイル(ここではbootlogoする)と menu.lstを書込む。

mount -o loop,offset=32256 ディスクイメージファイル名 /mnt/floppy/
cp bootlogo /mnt/floppy/boot/
cp /boot/grub/menu.lst /mnt/floppy/boot/grub/

menu.lstのgfxmenuの行を忘れずに。

あとはsyncしてから、もう一度qemuを立上げれば良い。

sync
qemu -std-vga ディスクイメージファイル名

なにか、それっぽいブートの画面が出ればOK.

本当は、umountしてからqemuを起動すべきなのだが、 ブートローダのテストを目的としていて、 qemu側で書込むことはしないはずなので、 bootlogoやmenu.lstを書き換えても syncで大丈夫だと思う。

(2008/10/31)